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())

希望帮助到你

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注