使用FFmpeg通过管道输出视频片段

时间:2014-05-13 16:24:45

标签: javascript node.js ffmpeg video-streaming http-live-streaming

我的Node.js应用程序使用FFmpeg捕获DirectShow设备的视频,然后输出用于实时流(HLS)的段。目前我正在将段输出到文件中,但是如果我可以通过管道输出它,它将允许我通过websocket高效地发送段而不是托管HTTP服务器。

我尝试过使用此命令:

  

ffmpeg -y -f dshow -i video = FFsource:audio = Stereo Mix(Realtek High)   定义音频)-vcodec libvpx -acodec libvorbis -threads 0 -b:v   3300k -cpu-used 5 -keyint_min 150 -g 150 -map 0 -flags:v   + global_header -f segment -

然而,它给出错误“无法为输出文件#0写入标头(错误的编解码器参数?):未找到Muxer”。此命令适用于输出到文件(通过将' - '替换为'seg_%03d.webm')。

FFmpeg不支持分段视频的管道,或者命令有问题吗?感谢。

2 个答案:

答案 0 :(得分:0)

您可以传递ffmpeg -i pipe:0 pipe:1从stdin读取并输出到stdout。

您可以查看我在其中一个项目中使用的示例FFmpeg包装器:

https://github.com/lperrin/node_airtunes/blob/master/examples/play_ffmpeg.js

如果您计划从网络进行流式传输,则可能需要在某个时刻使用循环缓冲区。你可以抢夺项目中的一个。

答案 1 :(得分:0)

使用do.call("cbind", lapply(df[3:5], function(x) { inds <- head(order(x, decreasing = TRUE), 10) data.frame(Partner = df$Partner[inds], year = x[inds]) })) # X2000.Partner X2000.year X2001.Partner X2001.year X2002.Partner X2002.year #1 Russia 1710262 Russia 1733412 Russia 1497738 #2 Italy 917604 Italy 956196 China 1018680 #3 China 672549 China 646651 Italy 904222 #4 Germany 546887 Germany 495533 Switzerland 773596 #5 Switzerland 463171 Ukraine 490215 UAE 472277 #6 Ukraine 254241 Switzerland 378243 Poland 320482 #7 Netherlands 219459 UAE 330340 Iran 309882 #8 UK 219420 UK 271586 Ukraine 291469 #9 Iran 203270 Iran 208925 Germany 219732 #10 USA 176198 Poland 164157 UK 131824 代替-f nut-f segment格式可以包含所有类型的标题和音频,视频编解码器。

nut