当状态更改为媒体结尾时,QMediaPlayer 状态不会停止
QMediaPlayer state not stopped when status changed to end of media
我在使用 QMediaPlayer.mediaStatusChanged
时遇到问题。
根据 Qt5.7 文档,当媒体状态更改为 EndOfMedia
时,QMediaPlayer 状态应为 StoppedState
:
Playback has reached the end of the current media. The player is in the 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 问题。
我向 Qt 报告了 issue,因为它似乎是 Windows 唯一的错误:
解决问题的可能解决方法:
处理前强制停止
def media_status_changed(self, status):
if status == QMediaPlayer.EndOfMedia:
super(MediaPlayer, self).stop()
# process
投票直到得到 StoppedState
def media_status_changed(self, status):
if status == QMediaPlayer.EndOfMedia:
while not (self.state() == QMediaPlayer.StoppedState):
time.sleep(0.1)
# process
我将在此处添加有关 Qt 问题的任何更新。
编辑: 问题已在 Qt v5.10.1 中更新和修复
我在使用 QMediaPlayer.mediaStatusChanged
时遇到问题。
根据 Qt5.7 文档,当媒体状态更改为 EndOfMedia
时,QMediaPlayer 状态应为 StoppedState
:
Playback has reached the end of the current media. The player is in the 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 问题。
我向 Qt 报告了 issue,因为它似乎是 Windows 唯一的错误:
解决问题的可能解决方法:
处理前强制停止
def media_status_changed(self, status): if status == QMediaPlayer.EndOfMedia: super(MediaPlayer, self).stop() # process
投票直到得到
StoppedState
def media_status_changed(self, status): if status == QMediaPlayer.EndOfMedia: while not (self.state() == QMediaPlayer.StoppedState): time.sleep(0.1) # process
我将在此处添加有关 Qt 问题的任何更新。
编辑: 问题已在 Qt v5.10.1 中更新和修复