如何解决在 Raspberry Pi 上的 Python 程序中播放视频
我有一个 RaspBerry Pi 3+、python 3.7、wx 和 gstreamer。我写了以下代码:
import os
import wx
import wx.media
class TrainingUI(wx.Frame):
def __init__(self,parent,title):
super(TrainingUI,self).__init__(parent,title="Training")
self.media_control = None
self.init_ui()
self.Center()
def start_clicked(self,evt):
print("path = " + os.path.abspath("."))
#file_to_play = 'C:\\Users\\ralph\\files\\programming\\ImpactEmbedded\\senecadevices\\easy-shift-automation\\EasyShiftController\\LSDSHN.mpg'
#file_to_play = '/home/pi/SenecaDevices/easy-shift-automation/EasyShiftController/sample-mp4-file.mp4'
#file_to_play = "sample-mp4-file.mp4"
file_to_play = "LSDSHN.mpg"
print("Path exists: ") # find out if the program thinks the file exists
print(os.path.exists(file_to_play))
if not self.media_control.Load(file_to_play):
print("media load Failed")
else:
self.media_control.Play()
def init_ui(self):
# the main_screen_panel holds all the controls and sizers;
# we arrange their placement on it with the sizers,defined later.
main_screen_panel = wx.Panel(self)
start_btn = wx.Button(main_screen_panel,label="Start")
self.Bind(wx.EVT_BUTTON,self.start_clicked)
control_Box = wx.BoxSizer(wx.VERTICAL)
control_Box.Add(start_btn)
# the prompt,error message,and the video panel
video_Box = wx.BoxSizer(wx.VERTICAL)
self.media_control = wx.media.MediaCtrl(main_screen_panel,style=wx.SIMPLE_BORDER,size=wx.Size(250,150),szBackend="") #,szBackend=wx.media.MEDIABACKEND_DIRECTSHOW)
video_Box.Add(self.media_control)
big_Box = wx.BoxSizer(wx.HORIZONTAL)
big_Box.Add(control_Box)
big_Box.Add(video_Box,border=10,flag=wx.ALL)
# outermost_Box has a label across the top of the main window,and a 'big Box' below containing everything else
outermost_Box = wx.BoxSizer(wx.VERTICAL)
outermost_Box.Add(wx.StaticText(main_screen_panel,label="wx.media test"),flag=wx.ALIGN_CENTER_HORIZONTAL)
outermost_Box.Add(big_Box)
main_screen_panel.SetSizer(outermost_Box)
def main():
app = wx.App()
ex = TrainingUI(None,title="traaiin")
ex.Show()
app.MainLoop()
if __name__ == '__main__':
main()
我是这样运行的:
project_directory $ ls -l LSDSHN.mpg
-rw-r--r-- 1 pi pi 21665792 Jul 23 11:35 LSDSHN.mpg
project_directory $ python training_ui_video.py
path = /home/pi/SenecaDevices/easy-shift-automation/EasyShiftController
Path exists:
True
media load Failed
当它运行时,它立即弹出一个消息对话框说“Got an invalid playbin (error 2: No such file or directory)”;这出现在程序主屏幕的顶部。它有一个确定按钮来关闭它。我不知道这个错误是从哪里来的,只是加载程序并没有尝试加载视频文件,是否还有“无效播放箱”指示的其他内容?
在程序的主屏幕上,我有按钮和媒体控件周围的黑色边框,如编码。当我单击“开始”按钮时,我会在程序调用下方看到如上所示的文本(以“路径 = ...”开头)
我也试过 MP4 文件,结果一样。
我发现了一篇关于无效 playbin 消息的 SO 帖子;一个答案说 wxPython 必须用正确的库编译。我没有编译它(我听说在 Pi 上需要 10 个小时),而是从我认为正确的 .whl 文件安装它 - "";我还必须搜索 gstreamer 包,最终得到“apt-get install python-wxgtk-media3.0”,这消除了我在尝试导入 wx.media 时收到的消息。
我可以用这种方法或另一种方法在上述 python 程序中播放视频。理想情况下,我可以通过编程控制开始、停止、暂停、播放不同的视频等。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。