Gstreamer管道连接两个媒体容器(视频和音频流)

时间:2016-05-23 14:05:47

标签: video concatenation gstreamer

我是gstreamer的初学者,并且正在努力与Gstreamer 1.0的管道连接,无缝连接两个MP4媒体容器,它们都带有视频和音频流。 在我看来,使用" concat"元素是最方便的方式,我能够连接视频流:

gst-launch-1.0 concat name=c ! autovideosink  filesrc location=1.mp4 ! decodebin ! videoconvert ! c.  filesrc location=2.mp4 ! decodebin ! videoconvert ! c.

或音频流:

gst-launch-1.0 concat name=c ! autoaudiosink  filesrc location=1.mp4 ! decodebin ! audioconvert ! c.  filesrc location=2.mp4 ! decodebin ! audioconvert ! c.

但到目前为止还没有运气创建一个用视频和音频连接两个容器的管道。

来自this article我意识到streamsynchronizer是必需的,所以有人可以帮助您展示样品管道吗?

1 个答案:

答案 0 :(得分:1)

好的我想出了这个,但有时alsa说流不是正常的状态..

GST_DEBUG=3 gst-launch-1.0 concat name=c2 ! videoconvert ! videorate ! autovideosink concat name=c ! audioconvert ! audiorate ! alsasink filesrc location=big.mp4 ! decodebin name=d1 ! audio/x-raw ! queue ! c. filesrc location=big2.mp4 ! decodebin name=d2 ! audio/x-raw ! queue ! c. d1. ! video/x-raw ! queue ! c2. d2. ! video/x-raw ! queue ! c2.

管道信息很少:

1,您不必使用audioconvert / videoconvert来识别来自decodebin的流类型 - 您可以安全地分别使用audio/x-rawvideo/x-raw ..解码后音频/视频始终是原始的格式。

2,使用2个concat元素,因为一个人只能处理一个流..但如果你使用两个concats你可能会担心音频/视频不同步..我希望它同步,因为它们都住在同一个管道中它有一个时钟提供器,所以理论上它应该没问题。当你需要适当的同步时,将所有内容放在一个管道中总是很重要。

3,我使用了alsasink但是你可以使用任何适合你的接收器...有时候autoaudiosink为我选择了pulseink,我不太喜欢..我喜欢使用这种音频端管道:{{1} }

4,我看到了这些错误,但是在添加队列后它就消失了......但是它们可能会出现给你我不知道..

audioconvert ! audiorate ! alsasink