动态替换播放gstreamer管道中的元素
dynamically replacing elements in a playing gstreamer pipeline
我正在寻找正确的技术(如果有的话),用于动态替换正在运行的gstreamer管道中的元素。我有一个基于gstreamer的c++应用程序,它创建的管道看起来是这样的(使用gst启动语法):
souphttpsrc location="http://localhost/local.ts"!mpegtsdemx name=d!队列!mpeg2dec!xImagesink d!队列;a52dec!pulsesink
在播放过程中(即GstrongTATE_PLAYING是管道状态,用户正在愉快地观看视频),我需要从管道中删除souphttpsrc,并创建一个新的souphttpsrc,甚至一个新新的neonhttpsource,然后立即将其添加回管道中,并在执行此操作之前播放的相同时间位置继续播放相同的uri源流。用户可能会看到一个小延迟,这很好。
我们几乎没有弄清楚如何删除和替换源,我们需要更多的了解。以下是我们迄今为止最好的尝试:
gst_element_unlink(source, demuxer);
gst_element_set_state(source, GST_STATE_NULL);
gst_bin_remove(GST_BIN(pipeline), source);
source = gst_element_factory_make("souphttpsrc", "src");
g_object_set(G_OBJECT(source), "location", url, NULL);
gst_bin_add(GST_BIN(pipeline), source);
gst_element_link(source, demuxer);
gst_element_sync_state_with_parent(source);
这并不完美,因为源从一开始就在播放,而管道的其余部分正在等待正确的时间戳缓冲区(我认为),因为几秒钟后,播放就会恢复。我试着用多种方式寻找来源,但都没有成功。
我需要知道做这件事的正确方法。如果我们想动态替换解码器或其他元素,了解一种通用技术(如果存在的话)会很好。
感谢
我认为这可能是您想要的:http://cgit.freedesktop.org/gstreamer/gstreamer/tree/docs/design/part-block.txt
(从第115行开始)
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- IPC使用多个管道和分支进程来运行Python程序
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 我想访问std::unique_ptr中的一个特定元素
- gStreamer 将元素添加到通过 gst_parse_launch 创建的管道中
- 动态替换播放gstreamer管道中的元素