Python 不播放 Omxplayer 视频

问题描述

我正在开发一个系统,在该系统中,RaspBerry Pi 使用 Omxplayer 在 PyQt GUI 上播放 YouTube 视频(我认为 PyQt 位无关紧要)(例如投射 - 人们以前已经这样做了)。

PyQt 程序没有播放视频,而是挂起,没有播放视频。下面更详细地解释了该过程:

YouTube 链接(例如:“https://www.youtube.com/watch?v=ciASlzZCQOU”)通过 POST 请求发送到我的 Python 脚本(在无头 RPi 上运行),并且脚本应该启动使用以下命令在 RaspBerry Pi 上运行 omxplayer: "omxplayer -o both --orientation 0 `youtube-dl -g -f best \"{}\"`".format(youtube_link) 并将视频显示在正在运行的 PyQt 程序之上。如果我在 shell 中手动执行命令(通过 ssh 和物理方式),这确实有效。

整个过程由 RPi 上的以下代码块处理:

elif self.path.endswith("/playVideo"):
        content_length = int(self.headers['Content-Length']) # <--- Gets the size of data

        youtube_link = self.rfile.read(content_length).decode('utf-8')
        print(youtube_link)
        play_command = "omxplayer -o both --orientation 0 `youtube-dl -g -f best \"{}\"`".format(youtube_link)
        print(play_command)
        os.system(play_command)

该块的作用是解码 POST 数据,获取 YouTube 链接并在子 shell 中执行带有链接的命令(使用 os.system())。

这个块输出

https://www.youtube.com/watch?v=ciASlzZCQOU
omxplayer -o both --orientation 0 `youtube-dl -g -f best "https://www.youtube.com/watch?v=ciASlzZCQOU"`

几秒钟后导致主程序挂起。之后什么都没有发生,视频没有播放,我不得不强制 Python 进程退出

我之前已经能够完成这项工作,但我似乎已经破坏了它,我认为这是一个简单的问题,但我似乎看不到它。我曾尝试使用 subprocess.Popen() 而不是 os.system(),甚至创建了一个 shell 脚本来执行此操作,但似乎没有任何方法可以解决问题。

任何帮助将不胜感激。

解决方法

Mark 在评论中的建议是解决方案:在命令中添加尾随 & 解决了问题 - 它与 os.system 关系不大。