python - Python 不播放 Omxplayer 视频
问题描述
我正在开发一个系统,其中 Raspberry Pi 使用 Omxplayer 在 PyQt GUI 上播放 YouTube 视频(我认为 PyQt 位无关紧要)(就像演员一样——人们以前做过这个)。
PyQt 程序没有播放视频,而是挂起并且没有播放视频。该过程在下面更详细地解释:
YouTube 链接(例如:“https://www.youtube.com/watch?v=ciASlzZCQOU”)通过 POST 请求发送到我的 Python 脚本(在无头 RPi 上运行),并且脚本应该在Raspberry Pi 使用以下命令:
"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 链接并使用子外壳中的链接执行命令(使用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 脚本来执行此操作,但似乎没有什么能解决问题。
任何帮助,将不胜感激。
解决方案
马克在评论中的建议是解决方案:在命令后添加尾随&
解决了问题 - 它与os.system
.
推荐阅读
- c++ - libzip zip_source_t 缓冲区已被释放,即使我告诉 libzip 不要这样做
- html - 谷歌字体图标
- javascript - 如何从 onclick 事件中显示列和行中的数据
- python - 列表类型不可调用
- vue.js - Vue变量未在方法的异步中更新
- angular - 当数据未更改时,Angular 11 Router 可观察数据未更新
- json - 无法将 JSON 数据打印到 Dart 对象中 - “'对象'的实例”
- javascript - 使用 jquery 从任何下拉列表中获取值
- javascript - 未捕获的错误:目标容器不是 DOM 元素
- python - 如何将两个 DateTimeFields 与当前时间进行比较