【问题标题】:Why is my ffmpeg stream subprocess freezing at 6 minutes?为什么我的 ffmpeg 流子进程在 6 分钟时冻结?
【发布时间】:2014-11-12 23:33:39
【问题描述】:

我在一个 shell 脚本中有一个 ffmpeg 管道,它在 Python 中作为子进程启动。出于某种原因,当 Python 启动脚本时,我的视频完美流式传输,然后每次冻结大约六分钟。冻结后,如果我尝试手动运行脚本,它会给我这个错误:

无效的 MIT-MAGIC-COOKIE-1 keyxcb_connection_has_error() 返回 true 符号链接失败 /root/.pulse/65f3ded611649c6dcf9ebae20000046d-运行时到 /tmp/pulse-PKdhtXMmr18n:输入/输出错误 [alsa @ 0x4b2f0] 不能 打开音频设备 hw:0,0(设备或资源忙) hw:0,0: 输入/输出错误

但是,如果我手动重新启动并运行脚本,音频和视频将无限期地正常播放。

有人知道为什么会这样吗?谢谢。

这是我的 pipline.sh 文件:

sudo ffmpeg -f video4linux2 -video_size 640x480 -framerate 30 -input_format yuyv422 -i /dev/video7 -f alsa  -i hw:0,0 -map 0:0 -map 1:0  -b:v 120k -bufsize 120k -vcodec libx264 -preset ultrafast -crf 28 -acodec aac -strict -2  -f flv -metadata streamName= StreamName tcp://71.192.1.22

这是我在 Python 中使用的子进程:

subprocess.Popen("sudo ./ffmpeg_script.sh", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

【问题讨论】:

    标签: python ffmpeg


    【解决方案1】:

    我的猜测:脚本没有足够快地耗尽 stdout 管道,并且它正在填充调试输出,以至于 ffmpeg 的 stdout 用完缓冲区空间并冻结。

    【讨论】:

    • 谢谢。我正在通过 python 文档寻找一种在它填满时排出它的方法。知道我会怎么做吗?
    • 您真的关心这些数据吗?如果是这样,请在它进入时对其进行处理,或者将 stdout 设置为一个临时文件,以便您稍后在空闲时对其进行解析。如果没有,请不要捕获它。
    • 感谢您的帮助。我不需要数据。使用 stdout=None,stderr=None 让它工作。起初没有工作,因为我没有设置“无”。
    • 好吧,我以为我有。它可以在终端上运行,但是当我的 python 脚本使用 upstart 启动时,ffmpeg 子进程没有启动。
    • 部分可能是由于 $PATH 在您的终端和新贵中具有不同的值。确保你在 upstart 的 $PATH 中有 ffmpeg,或者在你的脚本中添加 ffmpeg 的完整路径。
    猜你喜欢
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多