天天看點

海康大華等安防錄影機采用通用RTSP協定流轉RTMP推送至Web無插件播放展示的流程方法

行業現狀

中國網際網路化的程序已經越來越快了,各個行業都在進行着網際網路化的改造,流媒體、音視訊,作為跑在網際網路上最大量級的資料類型,其從編碼方式到傳輸協定到終端相容都成為各家标準搶占的高點,RTMP、HLS(m3u8)、WEBRTC、AV1等等,網際網路帶來的使用習慣已經沖擊了非常非常多的傳統行業,就包括非常穩重的電力行業、高速交通行業,都逐漸在往網際網路、物聯網架構進行靠攏,視訊技術在這些行業也逐漸開始發生變化,視訊資料作為大資料可視化的重要部分,一定是要出現在可視化系統中的。

海康大華等安防錄影機采用通用RTSP協定流轉RTMP推送至Web無插件播放展示的流程方法

在傳統流媒體視訊監控行業、以視訊為核心的物聯網行業、以視訊為特色的各行各業,都在一方面想進行老裝置的網際網路化改造,另一方面想在新裝置的接入時都能夠以傳統安防的成本和網際網路的架構方式來建構新的視訊、流媒體、安防系統;

其實以上兩種訴求是不沖突的,大概自2010年前後,幾乎所有的安防錄影機都已經開始支援RTSP協定了,即使是網絡錄影機IPCamera、網絡硬碟錄像機NVR之前的模拟錄影機、硬碟錄像機DVR,也都逐漸可以通過“IPC接入NVR”、“DVR固件更新”的方式,将非标的裝置都轉換成為支援标準RTSP/RTP協定的網絡裝置。以海康錄影機為例,海康的數字、模拟、IPC、DVR、NVR都可以向上進行相容接入,也就是再老的裝置,都可以通過向下相容的方式,由最新的裝置将老裝置進行接入并标準化、數字化的輸出;

海康大華等安防錄影機采用通用RTSP協定流轉RTMP推送至Web無插件播放展示的流程方法

我們大緻分析一下安防裝置網際網路化的流程

  • 裝置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是可以完成的,但是最終都返工了,用了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等網絡播放器,可以形成一套完整的視訊直播、錄播解決方案,滿足使用者在各種行業場景的流媒體業務需求。

功能特點

  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

海康大華等安防錄影機采用通用RTSP協定流轉RTMP推送至Web無插件播放展示的流程方法

繼續閱讀