國標GB28181協定使用者端開發(一)整體流程和技術選型

2023-06-14 12:06:19

國標GB28181協定使用者端開發(一)整體流程和技術選型

本系列文章將介紹國標GB28181協定裝置端的開發過程。本文旨在探討整體設計和技術選型方面的考慮,為開發人員提供指導和參考。文章將從裝置端開發的整體架構、信令互動流程以及關鍵技術選型等方面展開討論,幫助有需要的讀者瞭解和把握GB28181協定裝置端開發的要點,掌握開發GB28181協定裝置端所需的技術和知識,為實際專案的開發奠定基礎。

GB28181協定簡介

GB28181全稱是「公共安全視訊監控聯網系統資訊傳輸、交換、控制技術要求」,它定義了視訊監控裝置之間的聯網通訊協定,旨在實現視訊監控系統的互聯互通和統一管理。而近些年來,隨著視訊監控系統的快速發展,GB28181已經成為事實上的IPC網路攝像頭、NVR網路硬碟錄影機等各種監控裝置必有的標準協定。

  1. 基本架構:

    GB28181協定的基本架構包括裝置端和平臺端。裝置端包括視訊監控裝置,如攝像頭、錄影機等;平臺端則是視訊監控系統的管理平臺,負責裝置管理、視訊流接收和儲存等功能。

  2. 信令互動:

    GB28181協定使用基於SIP的信令互動機制(進行了擴充套件)。裝置之間通過傳送SIP信令來建立通訊對談和傳輸控制資訊。常用的SIP訊息有註冊、心跳、裝置搜尋、裝置狀態查詢、裝置控制等。

  3. 資料傳輸:

    GB28181協定使用RTP來傳輸音視訊流。視訊監控裝置通過RTP協定將實時的音視訊資料封裝成封包,並通過網路傳輸到接收端。

通過以上幾點,可以看出來,GB28181是跟SIP協定有非常大的相似性,但是兩者側重領域不同,GB28181協定是在SIP協定的基礎上針對視訊監控領域進行了客製化和擴充套件,以滿足視訊監控裝置之間的聯網通訊需求。與SIP協定相比,GB28181協定更加專注於視訊監控系統的需求,並提供了特定的功能和介面。協定所包含的主要功能有以下幾點:

  • 裝置註冊管理
  • 裝置資訊查詢、目錄查詢、狀態查詢
  • 實時預覽
  • 錄影查詢、回放和下載
  • 裝置控制(雲臺控制、布/撤防、輔助開關等)
  • 語音廣播和語音對講
  • 報警事件通知和分發
  • 校時
  • 訂閱和通知

GB28181裝置端整體架構

  • 網路層:負責裝置的網路連線和通訊。

  • 管理控制層:處理裝置的控制指令、管理請求、錄影儲存和檢索。

  • 媒體層:負責音視訊編解碼和媒體檔案的解析。

GB28181裝置端的運作流程

  1. 啟動裝置:裝置端啟動後連線網路,並初始化各個模組。

  2. 建立RTP/RTCP網路:裝置端需要在啟動後,初始化RTP/RTCP網路,用於之後與平臺之間建立媒體通道,進行音視訊流的傳輸。

  3. 註冊平臺:裝置向指定的平臺傳送Register註冊請求,包括SIP裝置ID、IP地址、SIP埠等關鍵資訊。這裡面會有一個兩次註冊的流程,用於GB28181平臺進行密碼校驗,這個以後會說。

  4. 心跳保活:裝置定時向平臺傳送心跳訊息,以保持與平臺的連線。

  5. 響應平臺管理請求:裝置接收來自平臺的管理請求,如裝置目錄查詢、狀態、資訊等操作,然後根據請求做出相應的響應。

  6. 實時預覽:裝置接收來自GB28181平臺的實時預覽請求,將實時的音視訊流,組合成RTP報文,傳送給請求方。

  7. 錄影儲存、查詢與回放:裝置進行錄影儲存,將錄影資料按時間段進行分割和儲存。在GB28181平臺傳送錄影回放請求時,裝置根據請求將對應時間段的錄影資料,組合成RTP報文,傳送給請求方進行回放。

  8. 報警處理:裝置接收報警觸發訊號,並行送報警通知給GB28181平臺。在接收到報警處理請求時,裝置可以進行相關處理,如觸發報警音訊、視訊推播等。

  9. 網路連線保持:裝置端需要保持與GB28181平臺的穩定網路連線,處理網路斷開和重連等異常情況。

  10. 關閉裝置:裝置端接收到關閉指令時,或者主動斷開時,都需要對正在進行的RTP資料鏈路,傳送相應的SIP bye報文,並進行相關資源的釋放。

這其中,關鍵的幾個步驟是註冊、心跳、裝置目錄查詢、實時預覽以及網路連線維護這幾項,只有實現這幾點,才能算是一個基本的GB28181裝置端。

技術選型

選擇合適的技術對於GB28181協定裝置端的開發至關重要。以下是一些關鍵技術的選型建議:

  • 開發語言和框架:專案開發,通常都是根據專案需求以及開發團隊的技術背景,選擇合適的開發語言和框架。根據本次專案需求,我是採用C++來實現底層程序,採用QT來做介面設計。

  • SIP協定庫:選擇一個穩定、成熟的SIP協定庫,用於處理信令互動。常見的選擇有PJSIP、JAIN-SIP、oSIP、eXosip等等,考慮到網上資料的成熟性,選擇eXosip來作為SIP基礎庫。當然,這裡面由於SIP信令都是類似於HTTP的文字協定,也可以考慮自己來實現。或者直接採用Node.js來做,由於我是C++實現整套工程,所以選擇了eXosip。

  • RTP協定庫:為了實現音視訊流的傳輸,可以選擇支援RTP/RTCP協定的底層庫有很多,例如JRTP、ortp、live555,考慮到RTP本身並不複雜,可以自己實現,這裡我採用了後者。

  • 媒體庫:由於GB28181裝置端需要提供視訊/音訊流,涉及到視訊檔讀取、解碼、編碼等多種功能,採用ffmpeg是最合適的方案。


合作請加WX:hbstream或企鵝:229375788。(轉載請註明作者和出處)

合作請加作者hbstream(http://haibindev.cnblogs.com),轉載請註明作者和出處