海康大华等安防摄像机采用通用RTSP协议流转RTMP推送至Web无插件播放展示的流程方法
行業現狀
中國互聯網化的進程已經越來越快了,各個行業都在進行著互聯網化的改造,流媒體、音視頻,作為跑在互聯網上最大量級的數據類型,其從編碼方式到傳輸協議到終端兼容都成為各家標準搶占的高點,RTMP、HLS(m3u8)、WEBRTC、AV1等等,互聯網帶來的使用習慣已經沖擊了非常非常多的傳統行業,就包括非常穩重的電力行業、高速交通行業,都逐步在往互聯網、物聯網架構進行靠攏,視頻技術在這些行業也逐步開始發生變化,視頻數據作為大數據可視化的重要部分,一定是要出現在可視化系統中的。
在傳統流媒體視頻監控行業、以視頻為核心的物聯網行業、以視頻為特色的各行各業,都在一方面想進行老設備的互聯網化改造,另一方面想在新設備的接入時都能夠以傳統安防的成本和互聯網的架構方式來構建新的視頻、流媒體、安防系統;
其實以上兩種訴求是不矛盾的,大概自2010年前后,幾乎所有的安防攝像機都已經開始支持RTSP協議了,即使是網絡攝像機IPCamera、網絡硬盤錄像機NVR之前的模擬攝像機、硬盤錄像機DVR,也都逐步可以通過“IPC接入NVR”、“DVR固件升級”的方式,將非標的設備都轉換成為支持標準RTSP/RTP協議的網絡設備。以海康攝像機為例,??档臄底?、模擬、IPC、DVR、NVR都可以向上進行兼容接入,也就是再老的設備,都可以通過向下兼容的方式,由最新的設備將老設備進行接入并標準化、數字化的輸出;
我們大致分析一下安防設備互聯網化的流程
- 設備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地址規則了,那么對于市面上的大部分攝像機那都基本上是??荡笕A的天下了,尤其是???。這里就對我所接觸的各家設備的RTSP地址做一個匯總:
海康DS系列設備:《最新海康攝像機、NVR、流媒體服務器、回放取流RTSP地址規則說明
》
??灯渌显O備:《海康、大華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是可以完成的,但是最終都返工了,用了EasyRTSPLive、EasyRTMPLive、EasyNVR這樣的中間件型服務或者流媒體網關服務。為什么呢?
用ffmpeg只能做到一個基本的DEMO演示的作用,在容錯機制以及應對不同網絡情況時,會有諸多的問題,例如,ffmpeg不能重連,只能靠手動控制其重新連接,或者采用程序反復調用連接,另一方面,存在兼容的問題,而且資源消耗非常大,在某些ffmpeg拉流轉推流的場景下,ffmpeg對資源的消耗非常大;
還有一個是ffmpeg拉轉推延時不可控,對于用戶來說,屬于一個黑盒狀態,出了問題啥情況都不知道;
為了解決以上描述的這些問題,我們分別開發了EasyRTSPLive、EasyRTMPLive ,區別在于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等網絡播放器,可以形成一套完整的視頻直播、錄播解決方案,滿足用戶在各種行業場景的流媒體業務需求。
功能特點
全終端的視頻播放
從以上的流程來看,我們采用的是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
總結
以上是生活随笔為你收集整理的海康大华等安防摄像机采用通用RTSP协议流转RTMP推送至Web无插件播放展示的流程方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 定位算法(激光)
- 下一篇: 点击给导航条加背景颜色