Gstreamer管道语法
我使用gstreamer管道将mp4文件编码为不同的比特率。我使用来自gst流媒体服务器的代码构建了管道。管道似乎不起作用。我无法理解这里的管道语法来调试它Gstreamer管道语法,gstreamer,Gstreamer,我使用gstreamer管道将mp4文件编码为不同的比特率。我使用来自gst流媒体服务器的代码构建了管道。管道似乎不起作用。我无法理解这里的管道语法来调试它 gst-launch-1.0 filesrc location=video_test.mp4 name=src ! \ decodebin name=dec queue name=vqueue ! \ videosegmentclip name=vclip ! \ videoconvert ! \ video/x-raw,
gst-launch-1.0 filesrc location=video_test.mp4 name=src ! \
decodebin name=dec queue name=vqueue ! \
videosegmentclip name=vclip ! \
videoconvert ! \
video/x-raw, format=I420 ! \
videocrop top=0 bottom=0 left=0 right=0 ! \
queue ! \
tee name=vtee queue name=aqueue max-size-time=5000000000 max-size-bytes=0 max-size- buffers=0 ! \
audiosegmentclip name=aclip ! \
audioconvert ! \
audio/x-raw, channels=2 ! \
audioresample ! \
audio/x-raw, rate=48000 ! \
voaacenc bitrate=128000 ! \
queue ! \
tee name=atee vtee. ! \
queue ! \
videoscale add-borders=false ! \
video/x-raw,pixel-aspect-ratio=1/1,width=1280,height=720 ! \
x264enc name=venc0 bitrate=2372 tune=zerolatency ! \
queue ! \
mp4mux name=mux0 ! \
watchdog timeout=5000 ! \
filesink name=sink0 location=out0.mp4 atee. ! \
queue ! \
mux0. \
上面是完整的管道。对我来说,最困难的部分是理解下面的内容
decodebin name=dec queue name=vqueue
没有!在上面的行中,不应该有一个!在decodebin和队列之间
tee name=vtee queue name=aqueue... ! audiosegmentclip
在上面的一行中,有一个名为vtee(videotee)但链接到audiosegmentclip的T形三通。这是怎么回事
tee name=atee vtee. ! queue
在上面的一行中,有一个名为atee的T形三通,紧接着是vtee。这是什么意思?元素后面有一个句号(.)的意义是什么
任何解释gstreamer管道语法的链接都将非常有用。您想要的一般概念可以在该管道中找到。其主要区别在于:
decodebin
有许多水槽垫可连接到不同的媒体类型gst-launch-1.0 filesrc location=test.mp4 name=src!decodebin name=dec\
队列名称=vqueue!videosegmentclip name=vclip!视频转换\
视频/x-raw,格式=I420!视频裁剪顶部=0底部=0左=0右=0\
videoscale添加边框=错误\
视频/x-raw,像素纵横比=1/1,宽度=1280,高度=720\
x264enc名称=venc0比特率=2372调谐=零延迟!队列多路复用器。十二月\
audiosegmentclip name=aclip!音频转换!音频/x-raw,通道=2\
音频重采样!音频/x-raw,速率=48000!voaacenc比特率=128000!\
队列mp4mux name=mux!看门狗超时=5000\
filesink name=sink0 location=out0.mp4
我也在努力学习语法。gst-launch-1.0手册页上说: 管道由元素和链接组成。元素可以放入 不同种类的箱子。可以在中指定元素、链接和容器 管道 任何顺序的描述 我一想到这个就糊涂了!(链接)类似于bash管道,元素类似于生成和接收数据的bash命令,因此必须有一个与之关联的命令列表!。在gstreamer中,情况并非如此。管道描述是按任意顺序排列的元素、链接和容器的列表。这是我的语法尝试(不包括箱子和帽子)。请注意,
*
表示变量数量,/
表示备选方案之一
pipeline = pipeline_item*
pipeline_item = element / link
element = NAME property*
property = NAME=VALUE
link = ! / pad ! pad
pad = ELEMENT_NAME. / ELEMENT_NAME.padnames
padnames = NAME / NAME,padnames
或者,用英语总结一下:
- 名称是一个元素
- NAME=VALUE是一个属性
- 名字。或NAME.PAD是一个PAD(注意两种形式后面的.)
- !!是一个链接,可以像这样使用:
- 元素1!元素2
- element1 name=e1 element2 name=e2 e1!e2
- element1 name=e1 element2 name=e2 e1.src!e2.水槽
decodebin name=dec!队列名称=vqueue
和发球台发球台名称=vtee!queue name=aqueue…
这给了我一个不同的错误GST\u管道语法。y:616:GST\u parse\u perform\u link:无法将aqueue链接到ACLI,这很有意义,因为您正在尝试向其发送视频剪辑…谢谢Trent。我是gstreamer的新手。我的目标是分割音频和视频流,然后用特定比特率对其进行编码,然后对其进行多路复用。我如何修改这个管道来达到这个目的。所以,从文件中读取,将音频和视频移动到特定的比特率,然后再次将它们多路复用在一起,对吗?谢谢特伦特。管道正在运行。当我需要MPEG-TS流时,如何使用MPEGTSUM元素代替mp4mux使其工作。我可以使用mp4,但当我使用(x264enc上的key int max属性)分割mp4文件时,我的片段无法播放。但是,当我在MPEG-TS文件上进行分段时,这些文件是可以播放的。您可能只需交换元素并添加所需的属性就可以了。我不相信会有任何失败的上限谈判