关于QMediaPlayer.duration()的一个需要特别注意的点

特别提醒

QMediaPlayer.duration()的作用是获得当前播放媒体的总时间
播放器的进度条需要用到这个方法,
需要特别注意的一点是:这个方法在视频播放最开始是不生效
如果你一开始就要用到这个数值,需要先进行判定,当前播放状态 是播放中(self.player.playbackState()==self.player.PlayingState)

怎么发现这个问题的

我做一个视频播放器用到QSlider,作为进度条显示,
为了方便,我直接将QSlider的最大值设置为Player.duration()

        self.timeSlider.setMinimum(0)
        self.timeSlider.setMaximum(self.player.duration())

运行程序发现视频正常播放,但是进度条不随着移动,而且不可挪动,导致后续功能无法正常进行
但是如果我把上面代码改成

        self.timeSlider.setMinimum(0)
        self.timeSlider.setMaximum(151116) #这个数值就是Player.duration(),也就是视频的总时长    

再运行进度条随着播放一起移动,滑动滑块也会改变视频进度

我很迷惑,151116就是等于self.player.duration(),二者没有一点区别,为什么结果天差地别,

下面是调试,记录self.player.duration()是播放过程的变化
在这里插入图片描述
可以看到,在刚开始播放的时候self.player.duration()=0,然后把0赋值给self.timeSlider.setMaximum,所以进度条一直动不了,查了官方文档这有说:“ The value may change across the life time of the QMediaPlayer object and may not be available when initial playback begins”这个值在播放周期可能发生改变,且初始播放时可能不可用

后面我就在用self.player.duration()赋值的时候加了一个判定语句,程序完美运行

        if self.player.playbackState()==self.player.PlayingState:
            self.timeSlider.setMaximum(self.player.duration())

希望能帮助到你

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值