在gstreamer中从HLS生成MP4

时间:2018-07-05 20:45:43

标签: audio video gstreamer transcoding

我正在尝试从具有不连续标签的HLS流生成MP4。由于视频来自同一来源,因此FPS和WXH是相同的。

我使用以下管道测试了多路分配并播放它,并且效果很好

gst-launch-1.0 -v souphttpsrc location=<HLS_URL> ! hlsdemux ! decodebin name=decoder \
! queue ! autovideosink decoder. ! queue ! autoaudiosink

为此,我添加了x264 enc和avenc_aac编码器以将其保存到文件中,并且始终失败 "gstadaptivedemux.c(2651): _src_chain (): /GstPipeline:pipeline0/GstHLSDemux:hlsdemux0"

管道失败

gst-launch-1.0 -v  mp4mux name=mux faststart=true presentation-time=true ! filesink location=dipoza.mp4 \
souphttpsrc location=<HLS_URL> ! hlsdemux ! decodebin name=decoder ! queue name=q1 ! \
 videoconvert ! queue name=q2 ! x264enc name=encoder ! mux.  decoder. \
 ! queue name=q3 ! audioconvert ! queue name=q4 ! avenc_aac ! mux. 

我真的很感谢这方面的帮助。

1 个答案:

答案 0 :(得分:0)

经过大量调试,我发现管道存在问题。非常感谢@FlorianZwoch要求我转到voaacenc编码器。

在Mac的gst-plugins-bad中默认未安装

voaacenc。我因此不得不使用

brew reinstall gst-plugins-bad --with-libvo-aacenc

以下管道与我的应用程序配合良好。

gst-launch-1.0 --gst-debug=3 mp4mux name=mux ! \
 filesink location=xxxx.mp4 souphttpsrc location=<hls url> ! decodebin name=decode  ! \
 videoconvert ! videorate ! video/x-raw, framerate=50/1 ! queue ! x264enc ! mux. decode. ! \
 audioconvert ! voaacenc ! mux.

在我的HLS流视频段中,有些具有50FPS,有些具有59.97FPS。因此,我使用的视频速率默认设置为50。这可能需要根据您的细分进行更改

对于那些想要相同的C ++代码的人,请签出我的github页面