57-输入和显示- 播放音频和视频- 播放器QMediaPlayer

播放器QMediaPlayer

播放器 QMediaPlayer 可以播放音频和视频,它可以直接播放的格式有限。

要播放更多格式的音频或视频,例如 mp4 格式的视频文件,需要在本机上安装解码器。

这里推荐种解码器 K-Lite Codec Pack,它可以对绝大多数影音格式进行解码,安装它之后QMediaPlayer 可以播放绝大多数的音频和视频文件。

在搜索引警中搜索"K-Lite"就可以下载 K-Lite Codec Pack 解码器,或者到官网下载。K-Lite Codec Pack 是完全免费的下载后使用默认设置安装即可。

QMediaPlayer 继承自QObject,用QMediaPlayer 定义播放器实例对象的方法如下所示,其中 parent 是继承自QObject 类的实例对象

from PySide6.QtMultimedia import QMediaPlayer

QMediaPlayer(parent: Union[PySide6.QtCore.QObject,NoneType]= None)-> None
播放器 QMediaPlayer 的常用方法

QMediaPlayer 的常用方法如表所示,要方法介绍如下:

  • 要播放音频或视频,首先需要给 QMediaPlayer 设置媒体源。

    • 可以用setSource(source: Union[QUrl,str])方法或用setSourceDevice(device: QIODevice,sourceUrl:Union[QUrl,str]=Default(QUrl))方法设置媒体文件,其中 sourceUrl是可选参数,用于取额外的信息;
    • 用source()和 sourceDevice()分别获取媒体源QUrl和QIODevice,有关 QUrl和 QIODevice 的介绍见参数/辅助类章节的内容
  • 要显示视频,需要将 QMediaPlayer 与显示视频的控件关联

    • 可以显示视频的控件有QVideoWidget、QGraphicsVideoltem,关联方法分别是 setVideoOutput(QVideoWidget)和 setVideo(utput(QGraphicsVideoltem)
    • 要播放音频,需要用setAudioOutput(output: QAudioOutput)方法设置音频输出设备,有关QAudioOutput 的介绍见下面的内容。
  • 用play()方法开始播放音频或视频,用pause()方法暂停播放,用stop()方法停止播放并返回。

  • 若isSeekable()返回值是True

    • 可以用setPosition(position:int)方法设置当前播放的时间
    • 用position()方法获取当前播放的时间
    • 用duration()方法获取音频或视频的总时间,参数或返回值的单位是毫秒。
  • 用setPlaybackRate(rate:float)方法设置播放速率,参数为10表示正常播放;参数 rate可以为负值,表示回放速率。有些多媒体不支持回放。

  • 用setLoops(loops;int)方法设置循环播放次数参数loops 可取:

    • QMediaPlayer.Infinite(无限次)
    • QMediaPlayer.Once(一次或其他整数)
  • 用state()方法获取播放状态,QMediaPlayer.State,返回值可能是

    • QMediaPlayer.StoppedState
    • QMediaPlayer.PlayingState
    • QMediaPlayer.PausedState
  • 用playbackState()方法获取播放器的播放状态QMediaPlayer.PlaybackState,返回值可能是:

    • QMediaPlayer.StoppedState
    • QMediaPlayer.PlayingState
    • QMediaPlayer.PausedState
  • 用mediaStatus()方法获取播放器所处的状态QMediaPlayer.MediaStatus,返回值可能是:

    • QMediaPlayer.NoMedia
    • QMediaPlayer.LoadingMedia
    • QMediaPlayer.LoadedMedia
    • QMediaPlayer.StalledMedia
    • QMediaPlayer.BufferingMledia
    • QMediaPlayer.BufferedMedia
    • QMediaPlayer.EndOfMedia
    • QMediaPlayer.InvalidMedia。
  • 用error()方法获取播放器出错信息QMediaPlayer.Error,返回值可能是:

    • QMediaPlayer.NoError
    • QMediaPlayer.ResourceError
    • QMediaPlayer.FormatError
    • QMediaPlayer.NetworkError
    • QMediaPlayer.AccessDeniedError
QMediaPlayer的方法及参数类型说 明
[slot]setSource(source:Union[QUrl,str])设置要播放的音频或视频源
source()获取音频或视频地址QUrl
[slot]setSourceDevice(device:QlODevice,sourceUrl: Union[QUrl,str]=Default(QUrl))设置音频或视频源
sourceDevice()获取音频或视频源QIODevice
setActiveAudiotrack(index:int)设置当前的声道
activeAudiQtrack()获取当前的声道
setActiveVideQtrack(index:int)设置当前的视频轨道
activeVideQtrack()获取当前的视频轨道
setActiveSubtitleTrack(index:int)设置当前的子标题轨道
activeSubtitleTrack()获取当前的子标题轨道
[slot]setPlaybackRate(rate:float)设置播放速
playbackRate()获取播放速率
isSeekable()获取是否可以定位到某一播放时间
[slot]setPosition(position:int)设置播放时间(毫秒)
position()获取当前的播放时间(毫秒)
setAudioOutput(output:QAudioOutput)设置播放音频的设备
setVideoOutput(QVideoWidget)设置显示视频的控件
setVideoOutput(QGraphicsVideoItem)设置显示视频的图项
setLoops(loops:int)设置循环播放次数
loops()获取循环播放次数
duration()获取音频或视频可以播放的总时间(毫秒)
isAvailable()获取平台是否支持该播放器
playbackState()获取播放状态QMediaPlayer.PlaybackState
mediaStatus()获取播放器所处的状态
error()获取出错原因 QMediaPlayer.Error
errorString()获取出错信息
hasAudio()、hasVideo()获取多媒体中是否有音频或视频
bufferProgress()获取缓冲百分比,100%时才可以播放
[slot]play()播放音频或视频
[slot]pause()暂停播放
[slot]stop()停止播放并返回
播放器QMediaPlayer 的信号

播放器QMediaPlayer 的信号如表所示

QMediaPlayer的信号及参数类型说明
activeTracksChanged()当前轨道发生改变时发送信号
audioOutputChanged()音频输出设备发生改变时发送信号
bufferProgressChanged(float)缓冲进度发生改变时发送信号
durationChanged(int)播放总时间发生改变时发送信号
errorChanged()出错信息发生改变时发送信号
errorOccurred(error:QMediaPlayer.Error,errorString:str)播放出错时发送信号
hasAudioChanged(bool)可播放音频的状态发生改变时发送信号
hasVideoChanged(bool)可播放视频的状态发生改变时发送信号
loopsChanged()播放次数发生改变时发送信号
MediaStatusChanged(QMediaPlayer.MediaStatus)播放器所处的状态发生改变时发送信号
playbackRateChanged(float)播放速度发生改变时发送信号
P]aybackStateChanged(QMediaPlayer.PlaybackState)播放状态发生改变时发送信号
positionChanged(int)播放位置发生改变时发送信号
scekableChanged(bool)可定位播放状态发生改变时发送信号
sourceChanged(QUrl)音频或视频源发生改变时发送信号
tracksChanged()轨道发生改变时发送信号
videoOutputChanged()关联的视频播放器发生改变时发送信号
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日,当挖目相待

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值