在 gstreamer 中从 HLS 生成 MP4

Generating MP4 from HLS in gstreamer

我正在尝试从带有不连续标签的 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 编码器。

默认情况下,voaacenc 未安装在 mac 的 gst-plugins-bad 中。我所以我不得不使用

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 页面