前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于GB/T 28181 标准的监控摄像头视频接入技术

基于GB/T 28181 标准的监控摄像头视频接入技术

原创
作者头像
谢盼
修改2019-01-16 12:11:16
21.2K3
修改2019-01-16 12:11:16
举报
文章被收录于专栏:视频AI

在安防AI领域,遍布城市或建筑内各个角落的摄像头是最边缘的设备,是一切AI处理和应用的数据源头。随着应用范围和场景的扩充,应用中摄像头的数量越来越大,对监控摄像头设备进行集中且有效的管控成为刚需。GB/T 28181标准作为公共安全视频监控联网系统的国家标准,受到海康、大华、英飞拓等国内大部分厂家的支持,协议覆盖摄像头、NVR、管理平台等设备。对GB/T 28181 标准的支持将会扩大各种基于视频处理智慧系统的应用范围,在实际项目中有推广和实用价值。本文提供一个通过GB/T 28181标准获取摄像头视频的演示样例,并通过样例展开所涉及到的其他内容,若因水平或对标准的认知有限导致内容有误,请指出。点击查看标准完整文本: 公共安全视频监控联网系统信息传输、交换、控制技术要求。


一. 摄像头端的配置

要使用28181标准接入摄像头,需要在摄像头端完成协议相关内容的配置,抛开传输安全,28181使用SIP协议作为信令应用层协议,使用RTP协议作为媒体传输协议。

海康摄像头28181接入方式配置画面
海康摄像头28181接入方式配置画面
大华摄像头28181接入方式配置画面
大华摄像头28181接入方式配置画面

可以看到,需要配置的字段基本相同,概括下:SIP协议需要的本地SIP用户名、密码和端口,SPI服务器的用户名、密码、IP和端口,SIP保活的周期,服务器ID。如果对这些内容不太了解,大家可以大致看一下SIP协议文本:RFC3261。RFC3261详细规定了SIP各种事务的流程,大家并没有看到媒体传输相关的协议,因为这部分协议在SIP消息SDP段携带,在服务器和客户端之间进行商议,SDP协议的具体内容参看:RFC2327


二. 视频接入流程

视频接入基本可以拆分为4个过程:1.客户端(摄像头)通过REGISTER方法相服务器注册,这个过程会验证账户和密码信息,可能会多一个消息来回(401 unauthorized和带密码信息的register);2.注册完成后,客户端向服务器发送MESSAGE进行保活和其他信息交流,消息体为XML格式,一般有Catalog和Keepalive等类型;3.服务器端收到请求后向客户端发起会话要求,标准的INVITE流程;4.客户端或者服务器端发起BYE消息结束会话。为方便大家对协议有一个直观的了解,我把一次通信过程中的网络包抓取下来,大家可以通过包分析工具查看。

SIP视频接入相关流程
SIP视频接入相关流程

三. 视频接入Demo实现

SIP协议在IP电话、空管ED136/137/138/139等VOIP相关领域应用广泛,其中有asterisk/FreeSwitch等开源的服务器实现,也有jsip,osip等SIP协议解析层面的开源实现。这些开源实现完整而全面,改造做demo的话工作量大门槛高,本文在实现的时候使用了https://github.com/1lann/go-sip 实现的简单框架,该框架还很不完整,但是已经实现了基本的收发SIP消息的封装,这对我们实现Demo来说已经足够,感谢开源作者。

在SIP视频接入流程中,服务器需要应答的几种消息有:REGISTER/MESSAGE/200OK,需要主动发出的消息有INVITE。因此,修改example_server.go中的主要涉及的点有:1.消息处理循环中,新增MESSAGE消息回200OK;2.服务启动的时候监听媒体接收端口;3.在摄像头完成注册后,主动发出INVITE以完成会话流程,让摄像头持续发来视频数据。下面分别介绍这3点实现。对接NVR的流程基本一致。

1.处理REGISTER消息

server/auth.go中HandleRegister()函数用于接收和处理注册消息,在这个逻辑里,有比较多的校验,最主要的是checkAuthorization()函数中的密码校验。为使得客户端(摄像头)能够顺利通过校验,在server/accounts.go中,新增摄像头配置页面中设置的帐号与密码。(也可以更直接的将鉴权过程直接避开,来者不拒)

新增客户端帐号密码
新增客户端帐号密码

2.处理Message消息

Message消息的应答比较固定,直接应答200OK消息,因为我们为获取视频,可以忽略其他设备控制或状态信息。

MESSAGE消息处理
MESSAGE消息处理

3.处理接收到的200OK消息

200OK消息不需要应答,直接打印出消息体供调试即可。

200OK消息处理
200OK消息处理

4.准备好接收摄像头发来的视频数据

主动给终端发送INVITE请求后,迅速完成会话建立过程,为避免纠结于到底在什么地方开始启动视频数据接收,我们在程序启动时开始。摄像头使用RTP进行媒体数据的传输,因此在收到的UDP报文中,直接删除12字节的RTP头部,这里是偷懒的行为,正确的话需要解析RTP头部看是否携带了拓展头部,如果携带一并删除。(在端口收到视频数据后,也可以直接使用VLC播放)

监听6000这个媒体端口,6000在INVITE中告知摄像头
监听6000这个媒体端口,6000在INVITE中告知摄像头

5.向摄像头发起会话,开始视频传输

demo的实现比较简单直接,不使用任何无用的库,直接拼凑出SIP报文文本,然后通过UDP连接发送到摄像头。作为一个routine运行,在指定摄像头连上来之后,向摄像头发出报文,开始会话过程。

发给摄像头的INVITE消息(关注sdp_string)
发给摄像头的INVITE消息(关注sdp_string)

6.终止程序,查看收到的视频

使用VLC或者FFPLAY都可以直接播放。

使用VLC播放ps.dat
使用VLC播放ps.dat

四.Demo转应用要解决的问题

1. 稳定而健全的SIP事件状态机,这需要深入了解和实现协议,另外还需要提供统一的配置和管理中心;

2. 对复杂拓扑网络结构的支持,信令和媒体需要能够跨网络传输;

3. 安全传输的问题,信令和媒体加密;

4. 对28181协议中状态和控制相关信令的支持;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. 摄像头端的配置
  • 二. 视频接入流程
  • 三. 视频接入Demo实现
    • 1.处理REGISTER消息
      • 2.处理Message消息
        • 3.处理接收到的200OK消息
          • 4.准备好接收摄像头发来的视频数据
            • 5.向摄像头发起会话,开始视频传输
              • 6.终止程序,查看收到的视频
              • 四.Demo转应用要解决的问题
              相关产品与服务
              媒体处理
              媒体处理(Media Processing Service,MPS)是一种云端音视频处理服务。基于腾讯多年音视频领域的深耕,为您提供极致的编码能力,大幅节约存储及带宽成本、实现全平台播放,同时提供视频截图、音视频增强、内容理解、内容审核等能力,满足您在各种场景下对视频的处理需求。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档