海康大華等安防攝像機採用通用RTSP協議流轉RTMP推送至Web無插件播放展示的流程方法

行業現狀

中國互聯網化的進程已經越來越快了,各個行業都在進行着互聯網化的改造,流媒體、音視頻,作爲跑在互聯網上最大量級的數據類型,其從編碼方式到傳輸協議到終端兼容都成爲各家標準搶佔的高點,RTMP、HLS(m3u8)、WEBRTC、AV1等等,互聯網帶來的使用習慣已經衝擊了非常非常多的傳統行業,就包括非常穩重的電力行業、高速交通行業,都逐步在往互聯網、物聯網架構進行靠攏,視頻技術在這些行業也逐步開始發生變化,視頻數據作爲大數據可視化的重要部分,一定是要出現在可視化系統中的。
視頻大數據可視化
在傳統流媒體視頻監控行業、以視頻爲核心的物聯網行業、以視頻爲特色的各行各業,都在一方面想進行老設備的互聯網化改造,另一方面想在新設備的接入時都能夠以傳統安防的成本和互聯網的架構方式來構建新的視頻、流媒體、安防系統;

其實以上兩種訴求是不矛盾的,大概自2010年前後,幾乎所有的安防攝像機都已經開始支持RTSP協議了,即使是網絡攝像機IPCamera、網絡硬盤錄像機NVR之前的模擬攝像機、硬盤錄像機DVR,也都逐步可以通過“IPC接入NVR”、“DVR固件升級”的方式,將非標的設備都轉換成爲支持標準RTSP/RTP協議的網絡設備。以海康攝像機爲例,海康的數字、模擬、IPC、DVR、NVR都可以向上進行兼容接入,也就是再老的設備,都可以通過向下兼容的方式,由最新的設備將老設備進行接入並標準化、數字化的輸出;
EasyNVR安防互聯網化

我們大致分析一下安防設備互聯網化的流程
  • 設備RTSP地址的獲取;
  • RTSP協議拉流;
  • RTSP轉RTMP數據的處理;
  • RTMP推流;
  • 流媒體轉碼與協議同步輸出;
  • 全終端的視頻播放;
  • 靈活的配置與調度;

設備RTSP地址的獲取

在每一款設備的RTSP協議輸出方式上,區別就各種各樣了,有的是一個系列產品會有一個地址格式,有的是沒有格式,直接IP+Port對了就可以,有的只支持UDP協議(例如很多移動終端設備或者mifi設備),最靠譜的還屬於大廠(海康、大華)了,格式基本確定,而且流輸出比較穩定;

下面我就對怎麼獲取到一款設備的RTSP地址說一下自己的經驗:

  • 判斷攝像機IP Camera、網絡硬盤錄像機NVR是否支持RTSP協議,有一個非常基礎的參考,就是在設備的後臺配置中,查找是否有關於RTSP端口的配置,如果設備有RTSP端口的配置,那基本上該設備是支持RTSP協議的

  • 對於較爲近期生產的大部分的視頻設備:網絡攝像機、網絡硬盤錄像機NVR基本都支持Onvif協議,RTSP地址通過Onvif發現就可以了,Onvif的發現工具大家可以到 www.easynvr.com 下載Onvif工具,通過Onvif探測就能夠獲取到RTSP地址;

  • 對於沒有Onvif輔助的設備,判斷了設備支持RTSP協議後,就是找具體RTSP地址規則了,那麼對於市面上的大部分攝像機那都基本上是海康大華的天下了,尤其是海康。這裏就對我所接觸的各家設備的RTSP地址做一個彙總:

海康DS系列設備:《最新海康攝像機、NVR、流媒體服務器、回放取流RTSP地址規則說明

海康其他老設備:《海康、大華IpCamera RTSP地址和格式》
大華設備:《海康、大華IpCamera RTSP地址和格式》
宇視設備:《宇視攝像機RTSP地址格式規則》
雜牌設備:雜牌設備的建議是,直接採用 rtsp://ip:port/試着播放一下,然後再就是去具體廠家問了,很多小廠不把RTSP做爲主要輸出內容,所以這一塊做的也比較亂,效果一般;

  • 市面上還是會有一些不輸出RTSP協議的視頻設備,比如很多特別貴的熱成像設備(輸出的分辨率還特別低),這些設備一般情況下只能通過SDK接入,那麼我們也可以通過EasyIPCamera (https://github.com/EasyDarwin/EasyIPCamera)或者 EasyRTSPServer(https://github.com/tsingsee/EasyRTSPServer) 將這些非標設備進行RTSP標準化改造,先通過設備SDK取流到Server端,再通過EasyIPCamera或者EasyRTSPServer進行輸出;

RTSP協議拉流

目前市面上兩套相對較好的RTSP協議拉流技術框架,一個是live555,一個是ffmpeg,兩套框架各有千秋,各有一系列的成功的案例:

  • live555:非常老牌的RTSP框架,十幾年了,還在迭代與維護,作者Ross也以此爲業,進行着開源+商業的運營,大家所熟知的VLC播放器,RTSP拉流採用的就是live555;

所以說,開源+商業化纔是持久之道!

  • ffmpeg:ffmpeg就更不用說了,目前國內大部分的播放器,都用這個,RTSP模塊自寫自帶的,兼容性也非常不錯,不過要定製起來,流程就比較複雜;

我們在這一塊分別參考live555和ffmpeg打造了兩款RTSPClient工具:EasyRTSPClient和EasyStreamClient,這都是對幾十萬行級別代碼的優化輸出,站在巨人的肩膀上!

源自EasyRTSPClient Github介紹:An elegant, simple, high performance & high compatibility RTSP Client Utility,can use in RTSP Player,NVR,RTSP Relay,EasyRTSPClient can run in any platform ,such as x68/x64/Windows/Linux/Android/iOS/arm etc…,with flexible interface,EasyRTSPClient can fit almost all network IPCamera,very easy to use.簡單、穩定、高效、易用的RTSPClient工具,支持Windows、Linux、ARM、Android、iOS等幾乎所有平臺,支持RTP Over TCP/UDP,支持斷線重連,能夠接入市面上99%以上的IPC,調用簡單且成熟穩定!Github地址:https://github.com/tsingsee/EasyRTSPClient

EasyStreamClient:是一套RTSP、RTMP、HTTP等網絡協議的拉流庫,基本上只要是ffmpeg支持的,EasyStreamClient都支持,而且EasyStreamClient簡化了調用的流程,強化了輸出的結果,最重要的是支持了重連功能,非常易用!Github地址:https://github.com/tsingsee/EasyStreamClient

不能小視這兩個功能組件的重要作用,在很多應用和項目中,大量的時間都是耗在這兩個上面,每一家的設備都不一樣,對協議標準的理解各有出入、各有一定的bug,作爲直接面向一線設備的工具,大部分的兼容工作都在這兩個組件上。

RTMP推流

跟RTSPClient拉流一樣,RTMP推流同樣有兩個非常值得參考的開源項目:librtmp和ffmpeg,相比較來說,這裏的ffmpeg推流在兼容性和持續輸出上,會有一定侷限,而且定製起來也會流程相對比較繁瑣,我們目前主要的RTMP推流採用的是EasyRTMP。

EasyRTMP是一套調用簡單、功能完善、運行高效穩定的RTMP功能組件,經過多年實戰和線上運行打造,支持RTMP推送斷線重連、環形緩衝、智能丟幀、網絡事件回調,支持Windows、Linux、arm(hisiv100/hisiv200/hisiv300/hisiv400/etc…)、Android、iOS平臺,支持市面上絕大部分的RTMP流媒體服務器,包括Wowza、Red5、ngnix_rtmp、crtmpserver等主流RTMP服務器,能夠完美應用於各種行業的直播需求,手機直播、桌面直播、攝像機直播、課堂直播等等方面! Github地址:https://github.com/EasyDSS/EasyRTMP

我們幾乎全線的產品都採用的是EasyRTMP進行的流媒體音視頻標準化,EasyRTMP能夠將輸入的H.264、H.265、AAC進行非常低延時以及平滑的流轉,這個是目前我們在視頻標準化推流輸出上唯一的選擇!

RTSP轉RTMP數據的處理

在數據的流轉上,我們做了很多的工作,實際上這些工作用一個簡單的ffmpeg.exe是可以完成的,但是最終都返工了,用了EasyRTSPLiveEasyRTMPLiveEasyNVR這樣的中間件型服務或者流媒體網關服務。爲什麼呢?

用ffmpeg只能做到一個基本的DEMO演示的作用,在容錯機制以及應對不同網絡情況時,會有諸多的問題,例如,ffmpeg不能重連,只能靠手動控制其重新連接,或者採用程序反覆調用連接,另一方面,存在兼容的問題,而且資源消耗非常大,在某些ffmpeg拉流轉推流的場景下,ffmpeg對資源的消耗非常大;
還有一個是ffmpeg拉轉推延時不可控,對於用戶來說,屬於一個黑盒狀態,出了問題啥情況都不知道;

爲了解決以上描述的這些問題,我們分別開發了EasyRTSPLiveEasyRTMPLive ,區別在於EasyRTSPLive只針對於RTSP協議的RTMP轉推,而EasyRTMPLive是對於各種各樣的流媒體協議的輸入,例如RTSP、RTMP、HTTP、HLS等等等等的協議格式,都可以採用EasyRTMPLive輸入,並做RTMP標準化輸出,而且EasyRTMPLive所使用的EasyStreamClient還自帶了軟轉碼的功能,能將各種非標的音視頻格式都能轉化成爲標準的格式進行輸出;

EasyRTSPLive需要將安防輸入的各種音頻格式,例如PCMA(G.711A)、PCMU(G.711U)、G.726,進行轉碼成爲互聯網需要的AAC音頻格式,AAC音頻編碼可選擇用EasyDarwin開源的EasyAACEncoder,基於faac內核,效果非常好,而且現在很多支持浮點計算的芯片都能支持;

EasyNVR 是另一款基於EasyStreamClient和EasyRTMP的產品化程度更高的產品,這裏只做一個大概的描述,就不深入討論了:EasyNVR是一款擁有完整、自主、可控知識產權,同時又能夠具備軟硬一體功能的安防互聯網化流媒體服務器,能夠通過簡單的網絡攝像機通道配置,將傳統監控行業裏面的高清網絡攝像機IP Camera、NVR等具有RTSP、Onvif協議輸出的設備接入到EasyNVR,EasyNVR能夠將這些視頻源的音視頻數據進行拉取,轉換爲RTMP/HLS,進行全平臺終端H5直播(Web、Android、iOS),並且EasyNVR能夠將視頻源的直播數據對接到第三方CDN網絡,實現互聯網級別的直播分發。

對於技術實現的選擇:
  • EasyRTSPLive:能方便有一定視頻能力的開發者或者公司進行集成開發,而且對程序包體大小有要求,儘量要求精簡、專注於RTSP等等特點;

  • EasyRTMPLive:如果想做一款全功能、全協議的視頻編碼器,那可以採用EasyRTMPLive,支持協議全、兼容擴展方便、站在ffmpeg巨人的肩膀上;

  • 如果想低成本、快速、穩定、可靠、有效達到目標建議用EasyNVR

流媒體轉碼與協議同步輸出

一般情況下,在一些互聯網直播的場景中,我們經常只需要通過EasyRTMP將RTMP流推送到CDN或者第三方公有云即可達到視頻直播的目標,但是在很多政府型項目或者私有場景項目,需要自建流媒體服務器,我們基本上採用的就是EasyDSS高性能流媒體服務器,EasyDSS內核也基本上是整套Easy系列的流媒體服務技術中臺,對內、對外都用的是一個產品,極大地方便了各個開發者、部門、公司對流媒體技術的獲取。

EasyDSS商用流媒體服務器是一款支持視頻點播、轉碼、RTMP推流直播、RTMP/HLS直播分發、服務端錄像、錄像檢索、錄像下載、時移回放的商用流媒體服務器,採用業界優秀的流媒體框架模式設計,服務運行高效、穩定、可靠、易維護,支持RTMP直播、RTMP推送、HTTP點播、HLS直播,並支持關鍵幀緩衝,畫面秒開等多種特性,能夠接入WEB、Android、iOS、微信等全平臺客戶端,是移動互聯網時代貼近企業點播/直播需求的一款接地氣的流媒體服務器,配套OBS、EasyRTMP等直播推流工具以及EasyPlayer等網絡播放器,可以形成一套完整的視頻直播、錄播解決方案,滿足用戶在各種行業場景的流媒體業務需求。

功能特點
  1. 接收RTMP推流:EasyDSS能夠接收RTMP推流客戶端推送的RTMP音視頻流(H264+AAC),並轉發給播放客戶端;
  2. 分發RTMP流:EasyDSS提供RTMP流的高性能分發,RTMP播放客戶端可直接連接EasyDSS進行播放;
  3. 分發HLS流:EasyDSS提供同步輸出HLS流的功能,可以將推送的RTMP流進行實時HLS切片,並提供HLS流的高性能分發;
  4. 直播錄像:支持將推送的直播流進行同步錄像保存;
  5. 直播錄像檢索:支持檢索系統的直播錄像,提供錄像檢索和列表接口;
  6. 直播錄像回放點播:可以點播錄製的服務端錄像,提供HLS點播,自由seek與倍數播放功能;
  7. 錄像下載:可以對檢索到的錄像段進行下載,另存爲MP4文件;
  8. HTTP服務器:EasyDSS同時也是一款高性能的HTTP服務器,用於提供HTTP訪問,同時用於HLS流分發(具備nginx所有屬性功能);
  9. 防盜鏈:持HTTP防盜鏈技術;
  10. 主動拉取RTMP流進行轉發:EasyDSS支持對RTMP流的主動拉取,並將此RTMP流進行RTMP/HLS的轉發;
  11. 轉發RTMP流推送:支持將推送客戶端推送的RTMP流,轉發推送到其他RTMP流媒體服務器;
  12. 推流鑑權驗證:支持對推送客戶端的推送流進行推流驗證,若無權限的推流地址,則不接收客戶端推流;
  13. 推流信息統計:可以對推送流進行信息統計,包括推送時長、觀看人數、起始時間、持續時長、視頻碼率、音頻碼率、推送流量等信息;
  14. 播放鑑權:支持播放客戶端播放驗證,無權限的播放地址將無法進行播放;
  15. 播放信息統計:可以對播放客戶端的數量進行統計,並且可以統計客戶端的開始時間、播放時長、播放流量等信息;
  16. 視頻文件點播:支持點播HLS/mp4文件;
  17. 跨平臺:支持多種平臺部署運行,Windows、Linux;
  18. 二次開發:提供HTTP二次開發接口,可使用接口進行一定的二次開發;

全終端的視頻播放

從以上的流程來看,我們採用的是RTMP推流輸出的方式,但是如果說輸出只是支持RTMP,已經是不能夠滿足需求的,或者說是逐步會被淘汰的,RTMP協議慢慢已經不適合做播放協議了,更多情況下只適合做推流協議,主要幾個方面:

  • 各大瀏覽器已經明確要淘汰flash了;
  • 國內的flash播放已經逐步被商業化,很多時候播放還要運行廣告插件才行;

目前RTMP推流到EasyDSS或者CDN、公有云流媒體服務器,基本都會同步輸出RTMP、HLS(m3u8)協議,保障全平臺、全終端的可播放;EasyDSS稍微優勢一些,支持RTSP(兼容視頻分析用途)、RTMP、HLS(m3u8)、HTTP-FLV(Web低延時);

前端播放用EasyPlayer.js能夠達到全平臺全終端兼容播放而且是免費的;

靈活的配置與調度

綜上描述了很多,從設備到轉發,再到流媒體和播放,其實一整套下來東西非常多,想要做的穩定一點,都需要花費很長很長的時間;

更多流媒體音視頻資源

EasyDarwin開源流媒體服務器:www.EasyDarwin.org

EasyDSS高性能互聯網直播服務:www.EasyDSS.com

EasyNVR安防視頻可視化服務:www.EasyNVR.com

EasyNVS視頻綜合管理平臺:www.EasyNVS.com

EasyNTS雲組網:www.EasyNTS.com

EasyGBS國標GB/T28181服務器:www.EasyGBS.com

EasyRTC視頻會議解決方案:www.EasyRTC.cn

Copyright © TSINGSEE.com Team 2012-2019

青犀TSINGSEE

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章