appemit支持chrome edge等瀏覽器使用VLC 播放rtsp rtmp 解決方案
項目需要實時播放攝像頭rtsp視頻流,瀏覽器不能直接播放,只有通過插件或者轉碼來實現這個需求。
要實現這個目的,可以採用的方案非常得多,
轉碼
html5 + websocket_rtsp_proxy 轉碼,實現視頻流直播,免費版本兩年未更新。
ffmpeg + ngnix + video,rtsp轉rtmp播放, 經過測試延時普遍在1-3秒
ffmpeg + video,rtsp轉hls播放,延遲略長(2-6秒),這種方式的理論最小延時爲一個ts文件的時長 ,一般爲2-3個ts文件的時長
VLC插件播放 ,可以直接播放RTSP,基於NPAPI,不被最新的 Chrome 和 Firefox 支持
WebRTC,轉碼,RTSP 轉換爲 WebRTC 流,供 web 端顯示
因此,AppEmit提供的本地客戶端的瀏覽器播放RTSP的方案是:
1 使用webkit內核支持VLC的NPAPI,原有的js代碼直接使用,幾乎沒有延遲
2 使用vlc的libvlc的API播放,支持多開,幾乎沒有延遲
3 使用vlc轉碼爲ogg ,瀏覽器video標籤直接播放,延遲約1秒
4 rtsp轉換爲WebRTC播放,瀏覽器直接播放,延遲800ms
appemit支持chrome等瀏覽器使用VLC 播放rtsp rtmp
方法1 使用NPAPI播放vlc的網頁插件
HTML5的可以支持RTMP 但是無法播放RTSP,flash也止步於RTMP,最後同事推薦了個開源的好東東 VLC ,請教谷歌大神之後,這貨果然可以用來讓各瀏覽器(IE activex方式,谷歌、FF)實現播放RTSP視頻流,那真是極好的~~ 廢話不多說了附上參考文檔和案例,大家自己看吧。
視頻是用的海康網絡攝像頭(支持RTSP,標準H.264 RTP封裝的設備),可以通過 rtsp://admin:[email protected]:81/h264/ch1/main/av_stream 對攝像頭進行讀取RSTP流。在谷歌瀏覽器下實現web顯示實時監控畫面步驟:
1. 下載vlc - http://www.videolan.org/vlc/ 開源的好東西,並安裝(本人測試系統爲WIN8.1 64bit 下載32bit的就可以,XP也沒問題);
2. 安裝,並勾選Mozila支持;
3. 實時播放代碼如下
代碼中的具體參數含義,大家可以移步這裏:
https://wiki.videolan.org/Documentation:WebPlugin/
說明文檔很詳細,可以使用js進行各種操作,修改視頻地址、建立播放列表、暫停、播放、音量控制等。
但是最新版本的chrome firefox已經不支持NPAPI。
Appemit可以解決此問題,支持最新版本的chrome 360 IE edge firefox QQ 等瀏覽器打開vlc插件,播放rtsp rtmp.
使用 webkit 網頁的 vlc 插件直接打開 Rtsp 流,可以使用 npvlc.dll 即 NPAPI 技術 或者 axvlc.dll 見案例 demo\htmlDemo\rtsp.html, {"emit":"open","Obj":"media","AppType":1,"pos":1,"AppId":1, -45- "par":{ "mrl":"rtsp://wowzaec2demo.st reamlock.net/vod/mp4:BigBuckBunny_115k.mov","htmlStr":null,"kernel":2},"pa r0":{"fullscreen":true,"volume":70,"autoplay":true,"controls":true }}
方法2 使用libvlc的插件直接播放
Appemit支持多開,截圖等功能
支持多開, 見案例 demo\htmlDemo\rtsp.html
{"emit":"open","Obj":"libvlc","AppType":1,"pos":1,"AppId":1,"par":{ "mrl":"rtsp://wowzaec2demo.st reamlock.net/vod/mp4:BigBuckBunny_115k.mov","localFile":0},"par0":{"fullscreen":1,"volume":70, "autoplay":1,"controls":0 }}
方法3 使用vlc轉碼爲ogg ,瀏覽器video標籤直接播放,延遲約1秒
使用 Vlc 提供服務,轉化編碼,有延遲,適用精度要求不高的場所,這樣只是使用了後臺服 務而沒有插件。 見案例 demo\htmlDemo\rtsp_ogg.html
舉例:將 mp4 轉化爲 rtsp(如果有 rtsp 直接使用),再將 rtsp 轉化爲 ogg,在 html5 的播放 器播放
{"emit":"open","Obj":"media","AppType":1,"AppId":"AppId_lvcSvr1","AppShow":0,"p ar":{"gui":0,"cmds":["-vvv \"file:///${dir_Cur}/demo/htmlDemo/file/h1.mp4\" --loop --sout \"#transcode{vcodec=h264,acodec=mpga,ab=128,channels=2,samplerate=44100}:rtp{sdp=r tsp://:8554/vlc}\" ","-vvv \"rtsp://:8554/vlc\" --loop :sout=#transcode{vcodec=theo,vb=800,acodec=vorb,ab=128,channels=2,samplera te=44100}:http{mux=ogg,dst=:8080/stream} :sout-all :sout-keep\" "]}}
方法4 rtsp轉換爲WebRTC播放,瀏覽器直接播放,延遲800ms
只能開播放一個 RTSP,能切換。 將 RTSP 轉爲 webRTC,,適用延遲精度要求較高的場所,這樣只是使用了 webRTC 後臺服務 而沒有瀏覽器插件。 見案例 demo\htmlDemo\rtsp2WebRTC.html
Var ReqPar= {"emit":"open","Obj":"rtsp2webRTC","AppShow":0,"AppFollow":0,"AppRuntime":1,"par": {"webRTC_cfg":webRTC_cfg,"pid":pid,"webRTC_dos":0,"AuthKey":pidAuthKey},"par0":{"f orce":1}}; AE_OpenApp(ReqPar );
程序下載
程序名稱 AppEmit.exe
Github https://github.com/appemit/appemit
Email聯繫 appemit(at)appemit.com