簡體   English   中英

PyQt6 QMediaPlayer 和 QAudioOutput 未按預期運行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM