动态更改 gstreamer 管道上的 udpsrc
Dynamically change udpsrc on gstreamer pipeline
参考http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-dynamic-pipelines.html,我尝试更改gstreamer 管道上的udpsrc。
但是出了点问题,更改 udp 源后管道状态无法更改为 PLAYING。
以下是修改udpsrc的顺序。
原始管道箱包括...
udpsrc - 队列 - tsdemux - 队列 - 解析器 - 视频解码器 - 队列视频接收器
- 首先,屏蔽udpsrc的src pad
- 将 eos 事件发送到队列(在 udpsrc 旁边)
- 等到从总线收到eos消息。
- 将 udpsrc 的状态设置为 NULL,并从管道 bin 中删除 udpsrc。(unlink)
- 使用新的源 uri 创建新的 udpsrc。
- link 排队
- 将状态更改为“正在播放”。
这个顺序有错吗?
提前致谢。
在这种情况下,您不需要通过管道发送 EOS。这具有发出流结束信号的效果,虽然在大多数情况下可以从中恢复,但在这种情况下不需要。
动态更改管道时通过元素发送 EOS 的场景适用于同时具有 sink 和 src pad 的元素,以便排出可能卡在其中的任何数据。
参考http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-dynamic-pipelines.html,我尝试更改gstreamer 管道上的udpsrc。 但是出了点问题,更改 udp 源后管道状态无法更改为 PLAYING。
以下是修改udpsrc的顺序。 原始管道箱包括...
udpsrc - 队列 - tsdemux - 队列 - 解析器 - 视频解码器 - 队列视频接收器
- 首先,屏蔽udpsrc的src pad
- 将 eos 事件发送到队列(在 udpsrc 旁边)
- 等到从总线收到eos消息。
- 将 udpsrc 的状态设置为 NULL,并从管道 bin 中删除 udpsrc。(unlink)
- 使用新的源 uri 创建新的 udpsrc。
- link 排队
- 将状态更改为“正在播放”。
这个顺序有错吗? 提前致谢。
在这种情况下,您不需要通过管道发送 EOS。这具有发出流结束信号的效果,虽然在大多数情况下可以从中恢复,但在这种情况下不需要。
动态更改管道时通过元素发送 EOS 的场景适用于同时具有 sink 和 src pad 的元素,以便排出可能卡在其中的任何数据。