使用GB28181播放公网摄像头(JAVA版本)-1

需求描述

目前项目中,公网有大量的IPC摄像头以及NVR,品牌基本上是HIK和UNV,对于这类设备,需求如下

  1. 需要获取设备的状态,播放视频、未来可能还有保存视频的需求。
  2. 业务系统播放视频,无需OCX插件,支持移动端播放。

厂商的方案

对于需求,厂商有一些方案,举例如下:

  1. 海康有萤石云,使用了下,感觉做的不错,就是免费只能2个通道,收费方案包括接入设备数量以及流量的要求的付费。试用了下感觉不错,除了收费其他都挺好。

  2. 服务端设备的方案,如海康有8700,UNV也有类似的VMS平台,原理大概是让摄像头请求平台,然后摄像头在公网打洞,告诉平台自己打洞的地址端口,平台去拉流的方案。

  3. 直连摄像头,rtsp拉流,这种方案比较适合局域网内。

这里要说一句,我觉得为啥这几个大的厂商,不能再摄像头内部集成rtmp推流的方案吗?是涉及到协议有版权还是啥,不然也没这么多麻烦事情了

民间方案

民间有一些收费的方案,如LIVEGBS之类的,价格大概100路1W块钱,绑定硬件设备,使用的应该是GB28181的国标方案,研究了下协议,觉得方案是可行的。确定了方向。

我的方案

确定了方向后,参考了网上大量的资料,最后决定按下图进行

请求
推流
摄像头或NVR
信令服务
收流转码服务
流媒体服务器
  1. 信令服务部分主要是GB28181协议定义的内容,比较简单,未来这里规划增加给业务系统调用的接口。
  2. 收流转码服务需要启动一个UDP端口,接受摄像头的RTP推流,获取其中的h264rawdata, 然后转码推送给流媒体服务器 ,这一步耗费了我大量的时间
  3. 流媒体服务器使用开源的,如NGINX-RTMP

信令服务 GB28181协议

协议网上能下载到,主要通过摄像头或NVR配置GB28181平台的方式,摄像头主动上送请求,服务端下发指令,摄像头推流的方式。

本身协议内容很多,还分好多级,看起来有点晕,本质上我们只需要完成注册,keeplive,invite play ,bye几个指令就行,还有一些扩展的控制云台,播放录像的有精力再说吧。这个还是比较简单的,无非是指令的对接,网上有几个开源的项目,参考一下很快能搞定。
注意下有个小坑

  1. IPC和NVR的invite 指令,由于NVR有多个视频通道,所以NVR的invite指令一定需要有subject,内容是视频通道的ID和内容编号,这个内容编号我一直没理解是什么意思,网上有部分说还有头部request-line也需要设置为视频编通道编号(如下),我这边用UNV的NVR测试不需要,HIK暂时没有测试。
 Request-Line: INVITE sip:34020000001180000002@3402000000 SIP/2.0
  1. BYE指令,一定要和invite指令时的callid和tag保持一致,否则摄像头返回没有对应的事物

信令服务部分总的来说比较简单,耗费我大量时间的在收流,处理,转码上,下面再说。

未完待续…

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值