1
QMediaPlayer.mediaStatusChanged
を使用している問題があります。ステータスがメディアの終わりに変更されたときにQMediaPlayerの状態が停止しない
メディアステータスがEndOfMedia
に変更さQt5.7ドキュメントによれば、QMediaPlayer状態がStoppedState
すべきである:
は再生が現在のメディアの終わりに達しています。プレイヤーはStoppedStateにいます。
しかし、状態は停止されません。問題を再現するサンプルは次のとおりです。
import sys
from PyQt5 import QtWidgets
from PyQt5.QtCore import QUrl
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
class MediaPlayer(QMediaPlayer):
default = 'test.mp3'
def __init__(self):
super(MediaPlayer, self).__init__()
self.mediaStatusChanged[QMediaPlayer.MediaStatus].connect(self.media_status_changed)
self.setup_media(self.default)
def setup_media(self, media):
url = QUrl.fromLocalFile(media)
self.setMedia(QMediaContent(url))
def media_status_changed(self, status):
if status == QMediaPlayer.EndOfMedia:
print(self.state() == QMediaPlayer.StoppedState) # I get False
# self.state() is QMediaPlayer.PlayingState
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
m = MediaPlayer()
m.play()
sys.exit(app.exec_())
誰も同じ問題に直面していますか? 問題を回避策で解決できますが、Qtの問題である可能性があります。
私はこれを確認することができます。変更の直後の状態になるかもしれませんが、その経験はドキュメントに矛盾しているようです(少なくともC++のQTドキュメントの場合)。これはバグかもしれません。 – Trilarion
Btw。あなたの回避策は何ですか? – Trilarion
私は回避策を使って質問を更新しました。個人的には最初のものを使用します。処理する前に強制停止しますが、方法1や方法2のどちらも好きではありません。 – SyedElec