gpt4 book ai didi

c++ - 动态替换正在播放的 gstreamer 管道中的元素

转载 作者:太空狗 更新时间:2023-10-29 12:35:46 29 4
gpt4 key购买 nike

我正在寻找用于动态替换正在运行的 gstreamer 管道中的元素的正确技术(如果存在的话)。我有一个基于 gstreamer 的 C++ 应用程序,它创建的管道看起来像这样(使用 gst-launch 语法):

souphttpsrc location="http://localhost/local.ts"! mpegtsdemux 名称=d!队列 ! mpeg2dec! xviimagesink d。 !队列 ! a52dec !脉冲接收器

在播放过程中(即 GST_STATE_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 行开始)

关于c++ - 动态替换正在播放的 gstreamer 管道中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12114159/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com