Gstreamer管道多个接收器到一个src

时间:2015-01-29 07:16:04

标签: command-line gstreamer pipeline

寻找解释如何在一个模块中复用两个输入时使用命名元素。例如,在一个mpegtsmux模型中复用音频和视频

  

gst-launch filesrc location = surround.mp4! decodebin name = dmux!排队! audioconvert! lamemp3enc dmux。 !排队! x264enc! mpegtsmux name = mux!排队! filesink location = out.ts

以上管道提供插件互连,如下所示

enter image description here

因此它显示音频无法连接到mpegtsmus。

如何修改命令行以在mpegtsmux中进行音频和视频多路复用?

谢谢!

2 个答案:

答案 0 :(得分:3)

我会尝试提出基本的想法,虽然我不是那么精通,但可能是完全错误的。

  • 管道可以包含多个子管道。如果某个元素(bin)不是以管道(!)结尾,而是以另一个元素的开头结束,则它是一个新的子管道:filesrc location=a.mp4 ! qtdemux name=demp4 {{1} }
  • 一个命名的bin(通常是一个muxer),或者它的pads demp4. ! something可以是其他子管道中的源和/或接收器:somedemux.audio_00
  • 通常,子管道以命名的bin / muxer结尾,声明为:demp4. ! queue ! decodebin ! x264enc ! mux.或由名称引用:mpegtsmux name=mux末尾的点是引用的语法。
  • 然后,可以将命名的muxer传送到另一个子管道中的接收器:mux.
  • 如果您仅使用来自某个来源的唯一音频或视频流,则无需指定mux. ! filesink location=out.ts之类的打击垫。 muxname.audio_00"来自muxname." 的合适音频/视频板的快捷方式。

示例

那就是说,我假设你的mp4文件同时包含音频和视频。在这种情况下,您需要先将其解复用为2个流,然后进行解码,重新编码,然后将它们复用。

确实,您的音频未与muxname相关联。

如果你真的需要解码流,那就是我要做的。但这并不适合我:

mpegtsmux

或让我们使用gst-launch-1.0 filesrc location=surround.mp4 ! \ qtdemux name=demp4 \ demp4. ! queue ! decodebin ! audioconvert ! lamemp3enc ! mpegtsmux name=mux \ demp4. ! queue ! decodebin ! x264enc ! mux. \ mux. ! filesink location=out.ts 对这两个流进行神奇解码:

decodebin

答案 1 :(得分:0)

它没有链接,因为您的启动线没有这样做。请注意lamemp3enc元素未在下游链接。

将您的启动线更新为:

  

gst-launch filesrc location = surround.mp4! decodebin name = dmux!排队! audioconvert! lamemp3enc! MUX。 DMUX。 !排队! x264enc! mpegtsmux name = mux!排队! filesink location = out.ts

唯一的变化是“!mux”。在lamemp3enc之后告诉它链接到mpegtsmux。

在您更新内容时,请注意您使用的gstreamer 0.10已过时且无法使用,请升级到1.x系列以获取最新的改进和错误修正。