我正在尝试从具有不连续标签的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.

我对此非常感谢。

最佳答案

经过大量调试后,我发现管道存在问题。非常感谢@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页面

08-05 20:36