gpt4 book ai didi

python - PyQt 4.8 Phenon.VideoPlayer 错误的视频状态

转载 作者:太空宇宙 更新时间:2023-11-04 12:05:17 26 4
gpt4 key购买 nike

虽然我在做一些 python 编程,但我是 PyQt 的新手。我们使用 linux 操作系统 (debian) 和 PyQt 4.8 以及 python 2.7。

我的任务是让它播放视频。我研究了一些可能性并决定使用 Phenon.VideoPlayer 模块。

一段时间后,我有了播放视频文件的工作测试脚本:

import sys
from PyQt4 import QtCore, QtGui
from PyQt4.phonon import Phonon


# CONST ****************************************************************************************************************

SAMPLE_VIDEO_LOCAL = 'Event-29544-r1-s1.mp4'

SAMPLE_VIDEO_URL_MP4 = 'http://techslides.com/demos/sample-videos/small.mp4'
SAMPLE_VIDEO_URL_WEBM = 'http://techslides.com/demos/sample-videos/small.webm'
SAMPLE_VIDEO_URL_OGV = 'http://techslides.com/demos/sample-videos/small.ogv'
SAMPLE_VIDEO_URL_3GP = 'http://techslides.com/demos/sample-videos/small.3gp'
SAMPLE_VIDEO_URL_FLV = 'http://techslides.com/demos/sample-videos/small.flv'


app = QtGui.QApplication(sys.argv)
vp = Phonon.VideoPlayer()
print "Showing VP"
vp.show()

print "Loading media"
media = Phonon.MediaSource(SAMPLE_VIDEO_LOCAL)
vp.load(media)
mo = vp.mediaObject()
media_state = mo.state()
while media_state == Phonon.LoadingState:
media_state = mo.state()
if media_state == Phonon.StoppedState:
print "Ready to play"
break
elif media_state == Phonon.BufferingState:
print "Buffering data from URL, please wait.."
elif media_state == Phonon.ErrorState:
print "Error has occured with media.."
sys.exit()
print "Loading.."

vp.setVolume(0.0)
print "Media loaded, playing.."
vp.play()
print "Finished, exitting!"
sys.exit(app.exec_())

这按预期工作。但是一旦我尝试让视频继续运行,检测视频何时停止并再次播放,它就失败了。两种方法

while True:
print vp.currentTime()
if vp.isPlaying():
print "It is playing.."
else:
print "Video stopped, playing it again.."
vp.play()
time.sleep(1)

while True:
media_state = mo.state()
if Phonon.PlayingState:
continue
elif media_state == Phonon.StoppedState:
vp.play()

就像视频停止了一样,但实际上并没有,正如我看到它在我的显示器上运行一样,脚本只是不断地一次又一次地启动它们……直到我杀死它。无论我是从 URL 还是本地文件播放它,结果都是一样的。

最佳答案

GUI 的基本规则:您不应该在 GUI 中使用阻塞任务,在您的情况下 while True: 是,PyQt 通过信号通知您某些变量的状态,在这种情况下你应该使用 stateChanged Phonon::MediaObject

的信号
import sys
from PyQt4 import QtCore, QtGui
from PyQt4.phonon import Phonon


# CONST ****************************************************************************************************************

SAMPLE_VIDEO_LOCAL = 'Event-29544-r1-s1.mp4'

SAMPLE_VIDEO_URL_MP4 = 'http://techslides.com/demos/sample-videos/small.mp4'
SAMPLE_VIDEO_URL_WEBM = 'http://techslides.com/demos/sample-videos/small.webm'
SAMPLE_VIDEO_URL_OGV = 'http://techslides.com/demos/sample-videos/small.ogv'
SAMPLE_VIDEO_URL_3GP = 'http://techslides.com/demos/sample-videos/small.3gp'
SAMPLE_VIDEO_URL_FLV = 'http://techslides.com/demos/sample-videos/small.flv'



def onStateChanged(newstate, oldState):
if newstate == Phonon.StoppedState:
print("Ready to play")
elif newstate == Phonon.BufferingState:
print("Buffering data from URL, please wait..")
elif newstate == Phonon.ErrorState:
print("Error has occured with media..")
QtGui.QApplication.quit()
print("Loading..")


if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
vp = Phonon.VideoPlayer()
vp.show()
print("Loading media")
media = Phonon.MediaSource(SAMPLE_VIDEO_LOCAL)
vp.load(media)
mo = vp.mediaObject()
mo.stateChanged.connect(onStateChanged)
vp.setVolume(0.0)
print("Media loaded, playing..")
vp.play()
sys.exit(app.exec_())

关于python - PyQt 4.8 Phenon.VideoPlayer 错误的视频状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50948656/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com