2012-06-11 140 views
4

我正在研究一個需要顯示遠程桌面流式視頻的網絡應用程序。我們已經使用ffmpeg/ffserver和flowplayer實現了它,將RTSP轉換爲.flv格式,但它非常脆弱,我的研究使我使用VLC的命令行版本。RTSP流式傳輸到Web應用程序(使用VLC 2.0)

我的問題是: 是否有辦法來管轉碼RTSP(如OGG,RTP,或另一種格式)到瀏覽器中,同時避免對閃光燈的依賴?

我知道該標籤在一段時間內不支持流視頻,但我無法找到一致的文檔。有人說你可以直接在裏面輸入RTP,有人說你永遠無法通過標籤進行流式傳輸。

此外,我目前正在我的本地Apache服務器上測試所有這些。

我假設轉碼看起來會沿着線:

  • VLC -vvv RTSP://xx.xx.xx.xx:554/vga.sdp --no-sout-音頻--sout '·推薦{存取= HTTP,MUX = OGG,DST = HTTP://localhost/test_ogg.php}'

OR

  • VLC -vvv的rtsp:// XX .xx.xx.xx:554/vga.sdp --no-sout-audio --sout'#transcode {vcodec = mp4v,acodec = mpga,vb = 400}:duplicate {dst = display ,DST = {RTP MUX = TS,DST = XXX.XXX.XX.XX,端口= XXXX}}」

謝謝 - 梅森

回答

5

好了,我一直在尋找的解決方案來以CVLC 2.0.1 [Console-only VLC]的形式出現,同時也利用了ffmpeg的複用功能。

這一行代碼將RTSP流轉碼爲FLV並將其推送到指定端口的本地主機服務器。

cvlc rtsp://xxx.xxx.xxx.xxx:554/vga.sdp :sout='#transcode{vcodec=FLV1,vb=2048,fps=25,scale=1,acodec=none,deinterlace}:http{mime=video/x-flv,mux=ffmpeg{mux=flv},dst=127.0.0.1:8090/device_1.flv}' :no-sout-standard-sap :ttl=5 :sout-keep :no-audio --video --no-sout-audio 

這種方法的好處包括不具有編輯每次流變化的分辨率ffserver.conf文件,比特率,幀速率等 - 只能重啓這一行,以便它可以重新捕獲流。另外,如果數據流具有適當的規格,則不需要vb=fps=屬性;如果爲了網頁的緣故,我只需要對流進行節制,就只能使用它們。

--network-caching是我正在考慮的另一個功能,雖然在某些情況下非常有用,在我的情況下是不必要的。

的代碼的Flowplayer看起來類似:

<div style="width:1280px;height:720px;margin:10px" id="player_1"></div><script language="javascript"> 
flowplayer("player_1", {src: "/js/flowplayer-3.2.7.swf", wmode:"transparent"},{ 
clip: { 
    url: 'http://127.0.0.1:8090/device_1.flv', 
    autoPlay: true, 
    autoBuffering: true, 
    live: true, 
    bufferLength:0 
}, 
plugins: { 
    controls: { 
     all: false, 
     scrubber: true, 
     play: true, 
     fullscreen: true, 
     time: false, 
     width: '100%', 
     opacity: 0.8, 
     tooltips: { 
     buttons: true, 
     fullscreen: 'Enter fullscreen mode' 
    } 
    } 
} 
}); 

希望這有助於任何觀衆遇到類似的問題!

梅森

+0

感謝您的帖子,我是新來流媒體,因爲它是一個很大的幫助。當你使用這一行:'http {mime = video/x-flv,mux = ffmpeg {mux = flv},dst = 127.0.0.1:8090/device_1.flv}'cvlc創建服務器嗎?如果你有多個流會發生什麼? – zcaudate

+0

據我所知,這是一個單行代碼,可以在不需要服務器的情況下進行轉碼。它可能會在後臺創建一個虛擬服務器,但我沒有看到任何證據。就多個流而言,我認爲你需要在單獨的shell中爲每個流運行一個實例。 – MasonWinsauer