播放器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() | 关联的视频播放器发生改变时发送信号 |