QMediaPlayer : 負責處裡音頻與影片的播放控制。它的功能有 :
雖然可以控制播放的內容,可是他不能直接顯示內容,所以需要配合 QVideoWidget 顯示畫面。
QVideoWidget : 專門用來顯示影片畫面的視窗部件。QVideoWidget 本身不能處理任何影片,它的功能只有播放,所以要使用的話,要配合 QMediaPlayer 。
QAudioOutput:負責音頻的輸出控制
在使用 QMediaPlayer 播放音頻或視頻時,通常會搭配 QAudioOutput 來控制音頻的輸出。
positionChanged.connect(function)
: 當影片的位置改變時,會觸發信號。傳入函數時會傳入影片當前的位置。setVideoOutput(QVideoWidget)
: 將 QVideoWidget 設置為影片的輸出目標。setAudioOutput(QAudioOutput)
: 將 QAudioOutput 設置為聲音的輸出目標。msetSource(path)
: 設定播放資源,要給影片的路徑。PlayingState
: 會回傳播放的狀態duration()
: 回傳影片長度。功能 | 方法 |
---|---|
播放 | play() |
暫停 | pause() |
停止 | stop() |
setVolume(float)
: 調整音量,範圍在 0 到 1 , 所以如果今天設計的滑條是 0 到 100 就需要調整。下面範例是設定一個 QSlider
控制音量大小 , 然後設定按鈕進行播放和暫停。並設置一個進度條,去做影片的時間長短。
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QSlider, QHBoxLayout, QProgressBar
from PySide6.QtMultimedia import QMediaPlayer, QAudioOutput
from PySide6.QtMultimediaWidgets import QVideoWidget
from PySide6.QtCore import Qt
# 播放器初始化
def init_media_player(self):
self.mediaPlayer = QMediaPlayer()
self.audioOutput = QAudioOutput()
self.videoWidget = QVideoWidget()
self.mediaPlayer.setAudioOutput(self.audioOutput)
self.mediaPlayer.setVideoOutput(self.videoWidget)
# 元件創建
def init_ui(self):
layout = QVBoxLayout()
layout.addWidget(self.videoWidget)
controlLayout = QHBoxLayout()
self.playButton = QPushButton("播放")
self.playButton.clicked.connect(self.toggle_playback)
controlLayout.addWidget(self.playButton)
self.volumeSlider = QSlider(Qt.Horizontal)
self.volumeSlider.setRange(0, 100)
self.volumeSlider.setValue(100)
self.volumeSlider.valueChanged.connect(self.set_volume)
controlLayout.addWidget(self.volumeSlider)
self.progressBar = QProgressBar()
self.progressBar.setRange(0, 100)
controlLayout.addWidget(self.progressBar)
layout.addLayout(controlLayout)
self.setLayout(layout)
play_video
函數 : 用 setSource(path)
來設定播放路徑,還有播放影片。toggle_playback
函數 : 設定的暫停和播放set_volume
函數 : 設定影片的音量,要注意 setVolume
裡面是 0 到 1 所以要除以 100 。 # 媒體控制功能
def play_video(self):
self.mediaPlayer.setSource("Payphone.mp4")
self.mediaPlayer.play()
def toggle_playback(self):
if self.mediaPlayer.playbackState() == QMediaPlayer.PlayingState:
self.mediaPlayer.pause()
self.playButton.setText("播放")
else:
self.mediaPlayer.play()
self.playButton.setText("暫停")
def set_volume(self, value):
self.audioOutput.setVolume(value / 100)
# 進度條更新
def update_progress(self,position):
if self.mediaPlayer.duration() > 0:
progress = position / self.mediaPlayer.duration() * 100
self.progressBar.setValue(progress)
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.init_media_player()
self.init_ui()
self.play_video()
self.mediaPlayer.positionChanged.connect(self.update_progress)
if __name__ == "__main__":
app = QApplication([])
window = MyWindow()
window.show()
window.resize(600,600)
app.exec()
播放影片的三元件
常用功能
功能 | 方法 |
---|---|
播放 | play() |
暫停 | pause() |
停止 | stop() |
設定播放資源 | msetSource(path) |
回傳播放狀態 | PlayingState() |
回傳影片長度 | duration() |
設定影片輸出 | setVideoOutput(QVideoWidget) |
設定聲音輸出 | setAudioOutput(QAudioOutput) |
影片位置改變時觸發信號 | positionChanged.connect(function) |
功能 | 方法 |
---|---|
設定音量 | setVolume(float) |