Python 与 omxplayer 通信

Posted

技术标签:

【中文标题】Python 与 omxplayer 通信【英文标题】:Python communicate with omxplayer 【发布时间】:2015-11-12 21:26:00 【问题描述】:

我想知道 omxplayer 何时开始播放直播链接。 有时这需要 4-5 秒,有时需要 6-7 秒。

当我执行os.system('omxplayer '+url)时,我立即收到以下消息:

no xset in (/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl)
which: no xrefresh in (/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl)

然后当直播开始时(5-7 秒后),我得到:

Video codec omx-h264 width 1280 height 720 profile 578 fps 25.000000
Audio codec aac channels 2 samplerate 44100 bitspersample 16
Subtitle count: 0, state: off, index: 1, delay: 0
V:PortSettingsChanged: 1280x720@25.00 interlace:0 deinterlace:0 anaglyph:0 par:1.00 layer:0 alpha:255

我正在尝试通过子进程获取第二条消息。但我从来没有得到它。我怎样才能收到第二条消息,或者我怎样才能知道 omxplayer 何时开始工作?

谢谢

#!/usr/bin/python2

import sys, os, time
from subprocess import PIPE, Popen


url="http://livestreamlink.m3u8"


def Main():
    proc=Popen(['omxplayer',url], stdout=PIPE)
    time.sleep(5)
    print proc.communicate()[0]


if __name__ == "__main__":
    Main()

【问题讨论】:

您想在进程仍在运行时获取消息吗?如果您在终端中以omxplayer $url |& cat 运行它;您是否在 5-7 秒内看到消息(在omxplayer 退出之前)?见Python subprocess readlines() hangs 【参考方案1】:

试试这个:

proc=Popen(['omxplayer',url], stdout=PIPE, stderr=PIPE)
print proc.communicate()   # remove [0]

【讨论】:

我已经尝试过了,但没有任何改变,我没有收到 omxplayer 终端消息的第二部分。 请看我更新的代码。您需要阅读 subprocess 模块的文档以了解如何处理 stdout 和 stderr

以上是关于Python 与 omxplayer 通信的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 在 Raspberry Pi 上杀死 omxplayer 播放器

尝试使用 Omxplayer 同步 LED 和视频 - 出现 omxplayer.bin 错误和其他问题

树莓派 omxplayer 包装器 + Gpio

cvlc 不能播放 rtsp(omxplayer 可以)

如何在不使用终端的情况下退出 omxplayer?

播放视频时 OMXPlayer 卡住