簡體   English   中英

動態替換正在播放的gstreamer管道中的元素

[英]dynamically replacing elements in a playing gstreamer pipeline

我正在尋找用於動態替換正在運行的gstreamer管道中的元素的正確技術(如果存在)。 我有一個基於gstreamer的c ++應用程序,它創建的管道如下所示(使用gst-launch語法):

souphttpsrc location =“ http://localhost/local.ts”! mpegtsdemux name = d! 排隊! mpeg2dec! xvimagesink d。 排隊! a52dec! pulsesink

在播放的中間階段(即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行開始)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM