Gstreamer转码管道1个源N个接收器

时间:2018-07-14 04:43:46

标签: gstreamer transcoding

您好,我有一个要转换为mp4,ogg和webm的mkv

我尝试跟随管道,但被卡住

gst-launch-1.0 filesrc location=output.mkv ! matroskademux name=demux demux.video_0 ! jpegparse ! jpegdec ! tee name=vo \
oggmux name=ogg ! filesink location=output.ogg \
qtmux name=mp4 ! filesink location=output.mp4 \
webmmux name=webm ! filesink location=output.webm \
vo. ! queue ! videoconvert ! vp8enc ! progressreport update-freq=1 ! webm. \
vo. ! queue ! videoconvert ! x264enc ! progressreport update-freq=1 ! mp4.  \
vo. ! queue ! videoconvert ! theoraenc ! progressreport update-freq=1 ! ogg. 

输出

Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Redistribute latency...
Redistribute latency...
progressreport2 (00:00:01): 0 seconds
progressreport2 (00:00:02): 0 seconds
progressreport0 (00:00:02): 0 seconds

从我看到的情况来看,队列有问题,bc仅识别2个,应该有3个 此外,如果我从管道中删除一个队列,似乎工作得很好

gst-launch-1.0 filesrc location=output.mkv ! matroskademux name=demux demux.video_0 ! jpegparse ! jpegdec ! tee name=vo \
oggmux name=ogg ! filesink location=output.ogg \
webmmux name=webm ! filesink location=output.webm \
vo. ! queue ! videoconvert ! vp8enc ! progressreport update-freq=1 ! webm. \
vo. ! queue ! videoconvert ! theoraenc ! progressreport update-freq=1 ! ogg. 

输出

Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Redistribute latency...
progressreport1 (00:00:01): 0 seconds
progressreport0 (00:00:02): 0 seconds
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
progressreport1 (00:00:02): 0 seconds
progressreport1 (00:00:03): 0 seconds
progressreport1 (00:00:04): 0 seconds
progressreport1 (00:00:05): 0 seconds
progressreport1 (00:00:06): 0 seconds
progressreport0 (00:00:08): 0 seconds
progressreport1 (00:00:09): 0 seconds

请咨询

致谢

1 个答案:

答案 0 :(得分:1)

默认情况下,

x264enc的延迟时间大于默认队列大小,从而导致管道停止。 (它必须消耗比实际创建输出缓冲区更多的数据。这样,管道将永远无法完成预滚动。)

两个选项:

  • 增加所有队列的队列大小的缓冲区大小。
  • 使用x264enc tune=zerolatency作为编码器。