1. 程式人生 > >【視訊開發】EasyIPCamera通過RTSP協議接入海康、大華等攝像機,摒棄私有SDK接入弊端

【視訊開發】EasyIPCamera通過RTSP協議接入海康、大華等攝像機,摒棄私有SDK接入弊端

近期工作中需要開發一套視訊監控系統,實現WEB端、手機APP端預覽區域網內的道路監控攝像機,我負責一些後臺服務的開發工作。

      由於之前專案中的程式都是採用私有協議、各攝像機廠商的SDK進行視訊監控系統開發,這種技術方案更適合C/S架構的系統,應用於此次專案存在先天性不足,即手機APP端無法載入攝像機廠商的播放庫,無法滿足專案需求。另外原有的技術方案,導致WEB端的播放控制元件非常臃腫,且瀏覽器相容性不佳。

      鑑於以上原因,我開始尋求一套新的技術方案,在同事的推薦下發現了EasyDarwin開源專案。EasyDarwin讓我心裡一陣激動,原來國內有這麼棒的流媒體開源專案。不但有對各子專案詳細的說明、圖紙,程式碼編寫也非常規範,而且維護較好,更新率非常高。所以決定好好學習一下。

      我選擇由EasyIPCamera_RTSP入手。官方介紹此工程以其他IPC硬體(海康、大華、雄邁)提供的RTSP流作為EasyIPCamera的資料來源,對外提供RTSPServer功能。即這個程式可以作為一個簡單的RTSP服務、並且提供流媒體轉發的功能,與我的實際需求較為相近。為了能夠編譯執行程式,我首先升級安裝了VS2010環境(由於公司要求之前一直使用VS2008)。

      這個專案的編譯還是非常簡單的,一次性編譯通過。生成的EasyIPCamera_RTSP.exe執行依賴libEasyIPCamera.dll和libEasyRTSPClient.dll兩個動態庫。前者我理解為一個RTSP和流媒體轉發的服務,後者應當起到RTSP客戶端的作用,這兩個庫的原始碼,沒有在GitHub中找到。

      EasyIPCamera_RTSP程式中,主要分以下幾步實現:

      1)首先通過原始碼寫死的方式,初始化了兩個通道物件,代表兩個前端IPC的rtsp串資訊。這裡我將通道物件改為4個,並在初始化通道物件時,將專案中的海康、大華、宇視等品牌的攝像機資訊填入。

      2)然後程式啟用RTSP客戶端,用於向前端IPC取流。

      3)啟動RTSP和流媒體轉發的服務,偵聽埠為8554,以回撥形式偵聽客戶端請求。當有通道視訊請求時,根據通道資訊初始化對應的RTSP客戶端,並將取出的視訊流轉發至請求客戶端使用。

      重新編譯後執行,通過VLC播放器測試效果(開啟網路串流,輸入URL rtsp://IP:8554/1,此處的通道號由1開始)。經驗證海康、大華、宇視的攝像機(均為道路監控、高清球型攝像機)均能夠正常地預覽。期間遇到了一個小問題,即大華攝像機預覽失敗,經Babosa協助,更新了libEasyRTSPClient.dll庫後成功解決。貌似是因為rtsp串中對大華裝置授權識別未成功,導致IPC無法正常響應碼流格式等資訊。

       如上,使用EasyIPCamera可以非常簡單地實現對前端攝像機RTSP取流。

       下圖是預覽海康攝像機的截圖: