[英]Fading effect with QAudioOutput and QMediaPlayer (PyQt6)
[英]PyQt6 QMediaPlayer and QAudioOutput not behaving as expected
我一直在使用 QAudioOutput 和 QMediaPlayer 遷移到 PyQt6 時遇到問題,其中 QMediaPlayer object 似乎不適用於我制作的任何 QAudioOutput。 如果我設置 QAudioOutput object 視頻將無法呈現並且事件循環變得緩慢,就像發生錯誤一樣。 此外,當使用 QMediaPlayer.setAudioOutput 時,QMediaPlayer 似乎不會增加 QAudioOutput 對象的引用計數器,因為除非我自己保留對 object 的引用,否則它會被清除。
這是一些演示代碼:
import sys
from PyQt6.QtWidgets import QMainWindow, QApplication
from PyQt6.QtCore import QUrl
from PyQt6.QtMultimedia import QMediaPlayer, QAudioOutput
from PyQt6.QtMultimediaWidgets import QVideoWidget
class MainWin(QMainWindow):
def __init__(self, file_path):
super(MainWin, self).__init__()
self.cent_wid = QVideoWidget()
self.setCentralWidget(self.cent_wid)
self.player = QMediaPlayer()
self.audio_output = QAudioOutput()
#self.player.setAudioOutput(self.audio_output)
self.audio_output.setVolume(1.0)
self.player.setVideoOutput(self.cent_wid)
self.file_path = file_path
def showEvent(self, a0) -> None:
super(MainWin, self).showEvent(a0)
self.player.setSource(QUrl.fromLocalFile(self.file_path))
self.player.play()
if __name__ == '__main__':
app = QApplication([])
frm = MainWin(sys.argv[1])
frm.show()
app.exec()
對我來說,上面的代碼將運行並播放視頻文件(路徑的第一個參數),但“player.setAudioOutput”被注釋掉了。 如果未注釋,則播放器將失敗。 我試過手動設置 QAudioDevice 和 PyQt (6.2.3, 6.2.2)。 盡管閑逛了很長一段時間,但我什么也做不了。 有任何想法嗎?
雖然不是這個問題的解決方案,但我確定問題出在 windows 上的 vorbis 音頻編解碼器。由於 Qt 放棄了 DirectShow 並且僅支持 WMF,這導致我的計算機出現問題。 不幸的是,我無法獲得 Qt 來配合任何安裝編解碼器的嘗試。 不是第 3 方編解碼器或來自 ms store 的“Web Media Extensions”。 下面是一些代碼,似乎可以證明 vorbis 編解碼器是問題所在(以及僅需要該編解碼器破壞 Qt 的文件):
from PyQt6.QtMultimedia import QMediaFormat
mf = QMediaFormat()
for codec in mf.supportedAudioCodecs(QMediaFormat.ConversionMode.Decode):
print(codec.name)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.