如何在python中将async=false添加到Gstreamer splitmuxsink元素Audio/video/H264组合

2024-10-01 00:14:12 发布

您现在位置:Python中文网/ 问答频道 /正文

Gstreamer 1.8.2安装在使用C920的嵌入式设备上。Debian linux。我有一个很好的Gstreamer管道,它使用了新的splitmuxsink,几乎可以正常工作。 我有splitmuxsink很好地处理了一个“基本管道”。在

第一个管道工作并写入一个长文件mp4、音频和视频,同时将一个预览jpeg流传递给一个单独处理的appsink。希望这对任何人都有用。在

    self.pipeline=Gst.parse_launch('uvch264src auto-start=true iframe-period=1000 name=src1 src1.vfsrc ! queue  ! appsink drop=true name=asink max-buffers=2 emit-signals=true sync=false src1.vidsrc ! video/x-h264,width=1280,height=720,framerate=30/1,stream-format=byte-stream ! queue ! h264parse ! muxout.video_0   alsasrc do-timestamp=true device="plughw:CARD=C920,DEV=0" ! audio/x-raw,format=S16LE,rate=32000,depth=16,channels=1 ! queue ! voaacenc ! queue ! aacparse ! muxout.audio_0 mp4mux name=muxout ! filesink sync=false location=%s' % location1)

但是当我将filesink转换为“splitmuxsink”时,它只创建预览,而不启动流的文件录制端。我不知道如何(在Python中以编程方式)设置splitmuxsink的属性来复制我在filesink插件上所做的sync=false。我是要附加到splitmuxsink上的pad,还是设置sink=xxx标签,然后让静态pad或element调整“child”元素的属性?我相信这个问题是导致管道文件分割部分失败的原因。我要找的东西是: How to resume playing after paused using gstreamer? 根据这个答案:gstreamer pipeline with VADER element stalls on PAUSE when used with a tee

Pipeline v2(运行appsink端,但SplitMuxLink保持暂停状态)

^{pr2}$

如您所见,pipeline v2没有显式引用sync=false,因为splitmuxsink没有该属性。所以这一边在暂停后就不会启动了。在

我确信这只是一个小小的调整,以创建正确的标签并在

    self.muxp = self.pipeline.get_by_name('muxout')

将子元素设置为async false,但我看不到它-muxout元素(我的splitmuxsink的标签)没有async属性。在


Tags: 文件nameselffalsetrue属性管道pipeline
2条回答

我认为问题之一可能是mp4mux的SINK pad格式。splitmuxsink在默认配置中由mp4muxfilesink组成。在您的管道中,使用stream format=byte stream参数生成H264,但是mp4mux只需要stream format=avc。在

在与开发团队通信后,我被告知split muxsink中有一个bug,开发人员在1.8.3中对其进行了更正。对1.8.3的更新解决了这个问题。在

相关问题 更多 >