5

国标GB28181协议客户端开发(一)整体流程和技术选型 - haibindev

 1 year ago
source link: https://www.cnblogs.com/haibindev/p/17479692.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

国标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设备端整体架构

254714-20230614111355093-1624383542.jpg
  • 网络层:负责设备的网络连接和通信。

  • 管理控制层:处理设备的控制指令、管理请求、录像存储和检索。

  • 媒体层:负责音视频编解码和媒体文件的解析。

GB28181设备端的运作流程

254714-20230614111403829-424622202.jpg
  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是最合适的方案。


254714-20230131094734718-248738754.jpg

合作请加WX:hbstream或企鹅:229375788。(转载请注明作者和出处)

合作请加作者hbstream(http://haibindev.cnblogs.com),转载请注明作者和出处



About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK