微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Raspberry Pi 上的 Python 程序中播放视频

如何解决在 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 举报,一经查实,本站将立刻删除。