问题
我正在从第三方服务器获取音频和视频块,我希望将这些块通过管道传输到ffmpeg,以根据以下说明创建WebM实时流:
http://wiki.webmproject.org/adaptive-streaming/instructions-to-do-webm-live-streaming-via-dash
这里他们使用的是来自网络摄像头和麦克风的输入,但我需要使用数据块,所以ffmpeg命令看起来像这样:
cmd = [
"ffmpeg",
"-f", "flv", "-i", "video.fifo",
"-f", "s16le", "-ar", "16000", "-ac", "1", "-i", "audio.fifo",
"-map", "0:0",
"-pix_fmt", "yuv420p",
"-c:v", "libvpx-vp9",
"-s", "640x480", "-keyint_min", "40", "-g", "40", "-speed", "6",
"-tile-columns", "4", "-frame-parallel", "1", "-threads", "8",
"-static-thresh", "0", "-max-intra-rate", "300",
"-deadline", "realtime", "-lag-in-frames", "0",
"-error-resilient", "1",
"-b:v", "3000k",
"-f", "webm_chunk",
"-header", self.video_header,
"-chunk_start_index", "1",
"video_360_%d.chk",
"-map", "1:0",
"-c:a", "libvorbis",
"-b:a", "16k", "-ar", "16000",
"-f", "webm_chunk",
"-audio_chunk_duration", "2000",
"-header", self.audio_header,
"-chunk_start_index", "1",
"audio_171_%d.chk"
]
如你所见,我正在使用一个“视频.fifo“和”音频.fifo“文件,因为我认为通过一个命名管道将块导入是一个好主意,但我无法使其工作。我要做的是:
^{pr2}$所以我先启动子进程,这样它就可以打开fifo文件进行读取。在那之后,我应该可以打开它们进行写作,但我没有。更具体地说,我可以打开第一个,但不能打开第二个。所以也许这和ffmpeg如何处理输入有关,如果输入不止一个,但我不知道。在
问题
如何解决不可打开的命名管道的问题,或者如何在没有命名管道的情况下实现我想要实现的目标。在
链接中的说明建议在后台运行ffmpeg。从ffmpeg手册页:
不久前我也遇到过类似的问题。当处理多个输入时,ffmpeg第一次将按预期工作,然后每次都开始抛出错误。将
-nostdin
添加到全局参数或</dev/null
中应该可以更正此问题。除去所有的铃铛和哨声,下面的任何一个都可以。在ffmpeg [in-args][input][out-args][output] & </dev/null
ffmpeg [-nostdin in-args][input][out-args][output] &
希望这有帮助。在
相关问题 更多 >
编程相关推荐