EasyRTMP結合海康HCNetSDK獲取海康攝像機H.264實時流並轉化成為RTMP直播推流(附源碼)


最近一家深耕於南方電網的科技公司同事找到我們,咨詢關於調用海康HCNetSDK取流,並進行互聯網轉化的方案,經過反復的溝通以及自身在EasyDSSEasyNVR
方面的經驗,我們推薦了海康HCNetSDK+EasyRTMP推流到RTMP流媒體服務器,再由RTMP流媒體服務器同步輸出RTMP/HTTP-FLV/HLS的方案。

一般情況下我們在對接一款設備,進行流處理和流轉的大概流程分為:

  • 第一步:設備對接協議的選擇

無論是以RTSP、Onvif協議從設備取流,還是國標GB/T28181向設備取流,都是根據設備所支持的協議,通過協議過程獲取到設備回調的音視頻數據,例如這里要說的海康HCNetSDK;

在取流協議的選擇上,就看自身的應用需求,比如您的設備只有海康的,那么您完全可以用海康的SDK來取流,但是如果您的設備是各種廠家都有,而且不固定,建議采用的是RTSP這種國際標准的取流方式。

海康HCNetSDK是一套完全可以兼容海康幾乎全部的IPC、DVR、NVR、NVS的客戶端SDK,當現實場景中會不定存在很多款的設備型號,而且輸出協議不一樣,那么,海康的設備選擇HCNetSDK是一個極佳的選擇,因為海康已經將所有底層的兼容工作在HCNetSDK中完成了;

那么,以RTSP取流為例,我們在開源或者商用領域有很多可選的,比如ffmpeg、live555和EasyRTSPClient(https://github.com/EasyDSS/easyRTSPClient);

  • 第二步:數據處理與分析

從第一步取到音視頻流后,我們需要將流統一Demux為ES流進行進一步的處理,例如海康SDK輸出的大部分流為PS流,我們需要將PS解析成ES的音視頻數據,再基於ES的音頻、視頻數據進行例如:快照、視頻信息、轉碼、視頻分析等多種操作。這里關於海康PS流的Demux操作以及相關的代碼,我們會在下一篇博客中專門進行討論。

  • 第三步:推流與分發

在第二步進行了初步的數據處理后,我們需要將ES音視頻數據通過librtmp、ffmpeg 或者 EasyRTMP(https://github.com/EasyDSS/EasyRTMP)推送到nginx-rtmp 或者 EasyDSS 流媒體服務器進行高性能分發和存儲,並提供一系列的對外管理接口;

  • 第四步:接口化處理

完成了以上3步,只能算是跑通了整個數據流程,我們還需要對整個流程進行控制,例如,當有客戶端請求觀看的時候,我們才啟動取流、轉碼、推流、分發的過程,當用戶停止觀看或者一段時間內超時未進行服務端保活,服務端即停止整個流轉的過程。

同時,我們需要將對某個設備的取流、取錄像的過程均以接口的形式對外輸出(參考EasyNVR的實現),這樣一套底層可以提供給多個現場,多種項目使用。
EasyNVR無插件直播
為了幫助用戶能夠更好、更快地進行海康設備RTMP推流功能的開發,我們調試了一套示例代碼:https://github.com/EasyDSS/EasyRTMP/tree/master/EasyRTMP_HIK ,功能流程非常簡單,通過調用海康的HCNetSDK取流,再經過PS的Demux處理,轉換成為ES流,再經由EasyRTMP推流到RTMP流媒體服務器或者CDN,實現安防互聯網直播。

本文涉及的相關資源:
live555:www.live555.com
ffmpeg:http://www.ffmpeg.org/
HCNetSDK:https://www.hikvision.com/cn/download_61.html
EasyDSS:www.easydss.com
EasyRTMP:https://github.com/EasyDSS/EasyRTMP
示例代碼:https://github.com/EasyDSS/EasyRTMP/tree/master/EasyRTMP_HIK


免責聲明!

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



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