2012-03-16 60 views
8

我正在尋找一種方法來監視流上的活動,以便我可以確定是否有任何流通過流或不流。如果有,我將開始使用rtmpdump進行錄製。監視RTMP流,記錄是否可用

我想通過運行一個每60秒檢查一次流的cron任務來工作。如果它確定流正在通過,請調用rtmpdump開始記錄它。如果沒有,則在60秒內不做任何事情並再次檢查。

由於rtmpdump只是一種錯誤,當沒有流數據時,它似乎並不是一個好主意,試圖用它來監控一個流,但也許我錯了。

如果我是以個案爲基礎手動進行此操作,那很容易,但如果可用,我會自動記錄流的任務。

有沒有人遇到過這樣做?也許我可以在命令行(linux)中使用其他一些工具?如果它有幫助,我正在使用Ruby/Rails編寫此代碼

+0

這是一種通過Red5媒體服務器進行信號檢測的方式。另外我認爲你也可以在VLC過程中設置監聽器。我無法提供詳細信息,因爲我從來沒有這樣做過,但我在兩套文檔中都看到了與此相關的內容。希望有所幫助 – Alex 2012-03-17 21:39:28

回答

1

也許我誤解了你,但爲什麼不直接放在它周圍? 如果有一個流,我認爲rtmpdump不會退出,但只要有一個流記錄。如果沒有小溪,它就會退出,我們會睡一會兒再試一次。

rtmpdump似乎有一個 - 超時標誌,所以嘗試設置,以降低重試的速度,可能很好有一個睡眠雖然。

把這個在record.sh,CMOD A + x和運行它

while true; do 
    rtmpdump ... 
    sleep 60 
done 
2

您可以發送數據流的信息與此命令到stdout:

rtmpdump -v -m6 -B6 -r "rtmp://#{URL}" -o /tmp/test.flv &> /tmp/rtmpdump.info; cat /tmp/rtmpdump.info 

這將嘗試只錄制6秒的視頻並顯示結果。如果流正在運行,將輸出類似:

INFO: Connected... 
Starting Live Stream 
For duration: 6.000 sec 
INFO: Metadata: 
INFO: trackinfo: 
INFO: timescale    50000.00 
INFO: length    19686000.00 
INFO: language    eng 
INFO: sampledescription: 
INFO: sampletype   avc1 
INFO: timescale    48000.00 
INFO: length    18900992.00 
INFO: language    eng 
INFO: sampledescription: 
INFO: sampletype   mp4a 
INFO: audiochannels   2.00 
INFO: audiosamplerate  48000.00 
INFO: videoframerate  25.00 
INFO: aacaot    2.00 
INFO: avclevel    31.00 
INFO: avcprofile   77.00 
INFO: audiocodecid   mp4a 
INFO: videocodecid   avc1 
INFO: width     1047.00 
INFO: height    576.00 
INFO: frameWidth   720.00 
INFO: frameHeight   576.00 
INFO: displayWidth   1047.00 
INFO: displayHeight   576.00 
INFO: framerate    25.00 
INFO: moovposition   32.00 
INFO: duration    393.77 
2033.613 kB/6.02 sec (1.5%) 
Download may be incomplete (downloaded about 1.50%), try resuming 

如果流不運行/失敗,將輸出類似:

RTMPDump v2.4 
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL 
Connecting ... 
INFO: Connected... 
ERROR: Closing connection: NetStream.Play.Failed 

下面是用取自公共RTMP流的工作示例VLCStreamTester

require 'open3' 

rtmp_url = "stream.streetclip.tv:1935/live/high-stream" 
command  = "rtmpdump -v -m6 -B6 -r \"rtmp://#{rtmp_url}\" -o /tmp/test.flv &> /tmp/rtmpdump.info; cat /tmp/rtmpdump.info" 

Open3.popen3(command) do |i, o, e, t| 
    puts o.read 
end 

從這裏紅寶石您可以輕鬆地檢查一個流是否處於活動狀態(讀爲關鍵字的輸出),然後決定用記錄或不通常的rtmpdump命令。在此之後,您可以構建更多邏輯並通過一組URL來循環,而不是一個URL,從而獲得所需的自動化。