2015-08-14 45 views
0

做我有一個GStreamer的管道是需要從網絡攝像頭視頻,並將其分成兩個線程的GStreamer螺紋:
1)使用appsink這樣我就可以編程編輯捕獲幀
2)保存視頻文件暫停與三通

管道是這樣的:

gst-launch-1.0 v4l2src device=/dev/video0 \ 
! tee name=t ! queue ! videoconvert ! videoscale ! appsink name=sink caps="video/x-raw,format=RGB,width=800,framerate=15/1" t. \ 
! queue ! video/x-raw,width=800,framerate=15/1 ! jpegenc ! avimux ! filesink location=/tmp/output.avi 

我用這一個C++應用程序中。

我的問題是,在大多數時間我不需要兩個線程同時運行,但只有其中一個。在極少數情況下 - 都需要。
因此,我需要一些方法暫時停止或停止appsink或視頻保存 - 以節省CPU。

我現在這樣做的方式是銷燬管道,並在需要時再次使用一個線程重新創建它,但這看起來相當難看。

我一直在尋找更好的解決方案,但目前爲止沒有運氣 - 有沒有辦法做到這一點?

提前致謝!

回答

1

解決此問題的更簡單方法可能是使用valve元素。它有一個drop屬性,您可以將其設置爲true或false。把它放在發球臺上的隊列之後。

http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/gstreamer-plugins-valve.html

編輯:這是行不通的。更多的細節存在於這個職位的GStreamer的郵件列表:

http://gstreamer-devel.966125.n4.nabble.com/How-to-Stop-start-recording-using-Valve-element-td4661728.html

+0

這看起來非常有前途的,但是當我把「閥滴= TRUE!」的「隊列」中的一個之後的IT似乎停止另一個隊列以及... –

+0

嗯嗯,你是對的。我放棄了我的建議。雖然'身份下降概率= 0.99'似乎工作。很奇怪。 – mpr

+1

實際上這個線程表示只有在運行時設置drop = true時它纔會中斷。我想可能最初將它設置爲false,然後讓這兩個線程運行一段時間,然後將其中的一些動態設置爲drop = true。我明天會試試,謝謝! –