採集rtsp流攝像頭到瀏覽器實時播放方案

本文旨在實現使用攝像頭採集視頻,而且能夠在網頁實時顯示,主要參考的兩篇博文爲: 
1.  視頻實時顯示的三種方案  
2.  使用WebSockets進行HTML5視頻直播  
咱們使用博文1介紹的第三種方案,將攝像頭採集到的視頻流使用ffmpeg進行編碼,而且將其推送給遠程服務器,在遠程服務器使用stream-server.js處理視頻流而且在網頁上顯示出來。因爲原博文介紹詳盡,本處再也不贅述。 
注意 : 
1. 客戶端電腦中須要預先安裝ffmpeg,安裝方案谷歌便可。 

2. 博文1中第三種方案安裝nodejs過程當中sudo apt-get install node-legacy 應該改成sudo apt-get install nodejs-legacy。javascript

最近在作一個流媒體的項目,項目中須要採集攝像頭的視頻流到網頁界面實時播放,通常ip攝像頭的流格式都是rtsp的,雖然能夠經過vlc實時播放,可是不如瀏覽器觀看給用戶的體驗簡單。html

根據查找的資料和實際的實踐,目前發現的切實可行的方案有如下幾種(由於項目是採用java開發,所以下面的代碼也主要使用java實現):html5

  1. 使用xuggle庫直接解碼rtsp流,將解碼的一幀幀圖片發送給瀏覽器,使用html5的video播放mjpeg格式,即圖片的不斷刷新;

  2. 使用xuggle庫直接解碼rtsp流,解碼結果直接發送給rtmp服務器,而後瀏覽器使用flash直接播放rtmp的視頻流;java

  3. ffmpeg直接解碼rtsp流,將解碼結果使用http發送到nodejs服務器,nodejs服務器使用websocket發送給客戶端,客戶端使用canvas實時繪製圖像;node

下面詳細介紹這幾種方案。linux

FFmpeg和Xuggle的簡介

FFmpeg是一個自由軟件,能夠運行音頻和視頻多種格式的錄影、轉換、流功能,包含了libavcodec——這是一個用於多個項目中音頻和視頻的解碼器庫,以及libavformat——一個音頻與視頻格式轉換庫。
FFmpeg的安裝請參考:ubuntu上安裝ffmpeggit

xuggle官網是一個開源的資源庫,可以讓開發者更好的去對視頻和音頻文件進行解碼、編碼、以及錄製等功能。xuggle是對ffmepg的封裝,是一套基於ffmpeg的開發庫。 使用很是方便。 在java中使用時,請在eclipse中導入其jar包。 xuggle-5.4-jar包下載github

方案一的具體實現

xuggle讀取rtsp攝像頭的代碼以下:
import包以下:web

其中:streamLocation是須要讀取的rtsp地址npm

上面這段代碼實現了rtsp的持續讀取,那麼讀取到的數據怎麼獲取,很簡單,實現如下的幀回調函數onVideoPicture便可。

以上的images是使用guava庫的Cache創建的代碼以下:

使用html5 video標籤+javax.ws.rs實現的網頁顯示代碼以下:

以上代碼參考自github上stormcv項目,項目地址爲:https://github.com/sensorstorm/StormCV, 感謝原做者。

至此,打開網頁 http://localhost:8558/streaming/tiles 便可查看到實時視頻。

方案二的具體實現

xuggle庫轉rtsp爲rtmp

rtsp的reader:

rtmp服務器的搭建方法請參考這裏。

rtmp的writer:

相關文章
相關標籤/搜索