[轉] web無插件播放RTSP攝像機方案,拒絕插件,擁抱H5!


需求

問題:有沒有flash播放RTSP的播放器?H5能不能支持RTSP播放? 
答案:沒見過,以后估計也不會有; 
問題:可以自己做瀏覽器插件播放RTSP嗎? 
答案:可以的,chrome做ppapi插件,IE用ocx插件;

但是,兼容性太差了,開發成本過高。在PC web兼容性上面,目前最好的方案是flash或者H5,但是H5在IE比較低版本上面會存在不支持的問題,還是需要前端兼容切換成flash模式;在手機 web/微信兼容上面,毫無疑問,H5是唯一選擇;

方案

那么問題來了,如何能夠實現需求中的兩點:

  • PC上輸出兼容性較強的flash需要的rtmp或者hls流或者http-flv流;
  • 手機上輸出H5標准的HLS(m3u8+ts)流;

其實目前市面上大部分的CDN方案已經提示了我們如何解決上述的問題了,那就是采用rtmp推流到rtmp流媒體服務器,同步輸出:rtmp/hls/http-flv多種碼流,再通過前端的兼容適配,就能完美地達到想要的方案,總結來說,需要通過幾個步驟:

  1. RTSP拉流;
  2. 音視頻轉碼(H.264 + AAC);
  3. RTMP推流;
  4. RTMP流媒體服務器;
  5. 前端兼容取流播放;

實現方法

1. RTSP拉流

目前市面上能非常兼容地拉取各個廠家的RTSP流的方案總結來說有兩種:

  • live555
  • ffmpeg

兩種都能比較不錯地請求獲取到各個廠家的攝像機碼流,但從可操作的靈活角度上來說,live555更勝一籌,比如:我們遇到雄邁的某款攝像機需要在RTSP拉流的過程中,向攝像機定期發送OPTIONS保活報文,而我們遇到的某款海康的NVR在RTP over tcp取流的過程中,一旦發送RTSP的任何報文,就會出現服務器端主動reset,種種此類,如果基於ffmpeg的拉流確實是可以兼容大部分的攝像機IPC、NVR,但是遇到特殊種類的就比較難進行改造和兼容了;

沒有絕對,根據需求,也許您就只需要接入某兩款特定類型的攝像機呢,怎么適合現場需求怎么來;

2. 音視頻轉碼(H.264 + AAC)

由於目前RTMP、HLS的協議標准,包括前端的支持上,還停留在H.264+AAC的組合上,所以,我們需要將各種視頻格式:H.265、MJPEG、MPEG4,各種音頻格式:G.711A/U、G.726,都統一轉碼成H.264和AAC,說到轉碼,那肯定是ffmpeg first;

目前市面上的大部分攝像機都是默認或者設定為輸出H.264視頻流,但音頻流轉碼就肯定是需要兼容的,目前來說安防標准中大部分的音頻格式都還是G.711和G.726居多,那就可以用faac、EasyAACEncoder(Based on faac)進行音頻轉碼了!

3. RTMP推流

RTMP推流毋庸置疑,目前最流行的還是librtmp了,當然直接用ffmpeg也直接集成了rtmp推流的功能,而且在時間戳調優方面,幫助我們省了很多事情;

關於時間戳調優上,我們在開發EasyRTMP上花費了很多時間,由於各個IPC廠家出來的時間戳不一定是非常標准的(這里就要贊一下海康,批評一下雄邁了,請問雄邁的開發,你們搞出來的時間戳都是什么玩意兒?),所以就需要RTMP推流端對時間戳進行一次均勻化,不然就會出現HLS經常會快放、慢放、卡頓緩沖加載的現象,這一點上EasyRTMP參考的ffmpeg的-re命令的方案,對時間戳進行了優化,保證均勻播放;

4. RTMP流媒體服務器

這里說到的RTMP服務器有幾個輸出條件:

  • rtmp
  • hls
  • http-flv(可選)

這種類型的開源流媒體服務器目前可以推薦的有國產的srs、著名的nginx-rtmp、當然還有我們開發的商業化的EasyDSS(EasyDSS是EasyDarwin團隊開發的一款商用流媒體服務器,詳情見:www.easydss.com),除了nginx-rtmp不能輸出http-flv功能(當然也不會影響整體需求的實現),都能非常好地滿足用戶的需求;

5. 前端兼容取流播放

前端兼容當然就是一套非常閃亮而且先進的前端框架,能響應式地接受各種不同平台終端的請求,為PC web、手機 web、微信分配從rtmp流媒體服務器獲取rtmp、hls、http-flv等直播流;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM