首页 > 其他分享 >国标GB28181协议客户端开发(一)整体流程和技术选型

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

时间:2023-06-14 11:22:04浏览次数:56  
标签:协议 SIP 视频 GB28181 选型 RTP 客户端 设备

国标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),转载请注明作者和出处


标签:协议,SIP,视频,GB28181,选型,RTP,客户端,设备
From: https://www.cnblogs.com/haibindev/p/17479692.html

相关文章

  • U816.0客户端登录提示管道尚未连接
    问题:用友U816.0提示管道尚未连接服务器开放了1152046309023804522807214417452714319端口,测试不能登录客户isd到期,不能更新msc结尾的补丁网站上面给的解决方式:用友U813.0客户端登录提示管道连接错误怎么回事?您好,具体完整提示是什么是管道连接错误还是管道尚......
  • 使用C#的WebService实现客户端软件的更新
    由于项目原因,要实施的客户离作者太远,考虑提供软件的在线升级功能.我们如何实现呢!先讲下思路.思路:先实现WEB端的开发,主要考虑使用WEBService技术,提供远程服务的调用函数,返回一个文件的字节内容,然后写一个升级程序客户端,分发给客户使用的机器中,(可以随客户的软件一起安装).......
  • zookeeper服务端与客户端开启sasl
    一、zookeeper配置1、conf/zk_server_jaas.conf##DIGEST-MD5authenticationServer{org.apache.zookeeper.server.auth.DigestLoginModulerequireduser_super="adminsecret"#用户为super,密码为adminsecretuser_bob="bobsecret";};C......
  • SonarQube之采购选型参考
    SonarQube是DevOps实践中主流的一款质量内建工具,过插件机制,Sonar可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工......
  • IOT数据库选型——NOSQL,MemSQL,cassandra,Riak或者OpenTSDB,InfluxDB
    补充:Basho公司开源了它的时序数据库产品RiakTS1.3代码在githubriak的riak-ts分支上!RiakKV产品构建于Riak内核之上,提供了一种高弹性、高可用的键值数据库。RiakKV产品当前正在持续改进中,专注于数据正确性、预防数据损失和破坏等特性。RiakTS产品源于RiakKV数据库,是一种为时序......
  • JavaScript学习笔记:客户端编程之异常处理
    未被捕获的异常在程序中,往往会出现异常。虽然主动捕获这些异常是保证程序健壮的必要做法,但是难免会漏掉一些。对于未被捕获的异常,浏览器会在控制台显示一条错误信息,该信息包含异常信息和其在代码中出现的位置。window.onerrorWindow对象有一个onerror属性,将其指定为一个函数,可......
  • oracle 12c+允许低版本oracle 客户端连接配置
    oracle12c及以上版本,默认不允许低版本oracle客户端连接,如11g客户端,经网络搜索可通过设置Oracle服务端允许低版本访问在oracle服务端的“%ORACLE_HOME%/network/admin/sqlnet.ora”配置文件最后追加如下配置内容,意思为最低版本的Oracle客户端访问:SQLNET.ALLOWED_LOGON_VERSION_S......
  • 【转】分布式定时任务调度系统技术选型
    我们先思考下面几个业务场景的解决方案:支付系统每天凌晨1点跑批,进行一天清算,每月1号进行上个月清算电商整点抢购,商品价格8点整开始优惠12306购票系统,超过30分钟没有成功支付订单的,进行回收处理商品成功发货后,需要向客户发送短信提醒类似的业务场景非常多,我们怎么解决?......
  • 如何使用 Blazor 保存设置到客户端?
    话不多说,直接上代码添加服务类,完整代码比较长,放到文章最后publicinterfaceICookie{publicTaskRemoveValue(stringkey);publicTaskSetValue(stringkey,stringvalue,int?days=null);publicTask<string>GetValue(stringkey,stringdef="......
  • git服务器端安装并和客户端git连接
    接下来我们将以Centos为例搭建Git服务器。1、安装Git$yuminstallcurl-develexpat-develgettext-developenssl-develzlib-develperl-devel$yuminstallgit接下来我们创建一个git用户组和用户,用来运行git服务:$groupaddgit$useraddgit-ggit2、创建证......