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