【发布时间】:2015-10-29 09:08:09
【问题描述】:
我在 GStreamer 中有一个如下结构的管道:
rtspsrc -> rtph264depay -> 解析器 -> tee
-> 队列 -> (bin - MP4 文件)
-> 队列 -> (bin - RTP/UDP)
我希望能够在总线中断时删除(或添加)指定的分支。
我正在关注 gstreamer guide,第 19.4 节
当管道第一次开始播放时,一切都很好,一切都按照它应该的方式播放。我的问题是,当我添加一个分支时,它的元素不会进入 PLAYING 状态。除了保持在 READY 的最后一个元素外,它们一直到 PAUSED。我已经尝试将队列保持在 tee 上,并从队列中取消 bin 的链接。
当我尝试将队列放入 bin 并从 tee 链接/取消链接时,即使在阻塞分支并发送 EOS 之后,我仍无法移除 bin。
我应该如何进行这种动态分支操作?
编辑:设置 async=false 允许分支中的元素进入 PLAYING 但 bin [queue -> imxvpudec -> imxipuvideotransform -> videorate -> capsfilter -> imxvpuenc_h264 -> rtph264pay -> udpsink] 不会链接到发球台。尝试链接到使用 gst_element_get_compatible_pad() 检索到的焊盘会返回 GST_PAD_LINK_NOFORMAT。
【问题讨论】:
-
欢迎来到 SO。我不明白你的问题,尤其是在考虑你设置的标签时。
-
这种管道在很多地方都可能出错。添加新分支时,您是否明确将状态设置为“正在播放”?您能否粘贴管道的完整详细信息,包括您的 mux 和 parse 元素以及 bin 元素上的属性?
-
“不播放”位是固定的,这只是为所有接收器设置 async=false 的问题。我使用 h264parse 作为解析器,使用 mpegtsmux 作为多路复用器。但是,现在我只想考虑 udpsink 分支,当有一个 fakesink 代替文件分支时也会出现问题。我还在 udpsink 分支中使用 imxvpudec 和 imxvpuenc_h264 进行解码/编码。我现在面临的问题是,在链接 udpsink 分支时: queue -> imxvpudec -> imxipuvideotransform -> videorate -> capsfilter -> imxvpuenc_h264 -> rtph264pay -> udpsink ,没有发送数据
标签: gstreamer