我最近一直在尝试这个花哨的encodebin
gstreamer 元素。简单的例子效果很好,但我对更复杂的管道有一些问题。我gst-launch-1.0 version 1.18.4
在msys上使用。我的工作流程如下:
首先,我使用 encodebin 从头开始创建一些 mp4 文件(它选择最好的编码器,在我的情况下它使用 nvidia gpu):
gst-launch-1.0.exe videotestsrc num-buffers=100 ! encodebin profile="video/quicktime,variant=iso:video/x-h264,tune=zerolatency,profile=baseline" ! filesink location="input.mp4"
这部分工作得很好,它使用硬件编码,这里一切都很好。
然后我想在这个文件中添加一些实时流,以保留时间等等。我为此目的创建的管道:
GST_DEBUG=3 gst-launch-1.0.exe concat name=c ! m.video_0 mp4mux name=m ! filesink location=out.mp4 filesrc location=input.mp4 ! parsebin ! h264parse ! c. videotestsrc num-buffers=100 ! encodebin profile="video/x-h264,tune=zerolatency,profile=baseline" ! c.
显然它对我不起作用,我得到:
/GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0:内部数据流错误。
流媒体停止,原因未协商 (-4)
有趣的是,如果我们从 mp4mux 切换到 mpegtsmux,效果会很好:
gst-launch-1.0.exe concat name=c ! mpegtsmux ! filesink location=out.mp4 filesrc location=input.mp4 ! parsebin ! h264parse ! c. videotestsrc num-buffers=100 ! encodebin profile="video/x-h264,tune=zerolatency,profile=baseline" ! c.
所以我开始想,是不是有mp4mux
垫子的东西?任何人都知道为什么它不起作用mp4mux
?