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

轉載自:嚴健康的我的博客 http://www.yanjiankang.cn/javascript

本文連接地址: http://www.yanjiankang.cn/rtsp_camera_to_web_browser/html


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

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

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

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

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

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

FFmpeg和Xuggle的簡介

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

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

方案一的具體實現

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

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

上面這段代碼實現了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:

相關文章
相關標籤/搜索