## 一、前言说明
按照国标的文档,语音对讲这块,并没有强制要求支持公网对讲,所以当初设备厂家做的都是支持的udp对讲,而且按照国标协议要求,对讲是先发一个语音对讲广播到设备,设备收到后,主动发起对讲到服务端,和视频点播是反着来的,这样的话数据的传输模式只能设备控制,默认一般都是udp,也就是设备端打开udp端口,服务端主动往这个端口发送数据。这个机制在局域网没有问题的,但是在公网上,就存在严重的缺陷了,服务端的IP是固定的,设备端不是固定的,而且服务端也无法正常连到设备端,除非对讲的sdp中约定tcp主动模式,也就是服务端这边监听端口,设备端主动连接,然后在这个连接上发送语音数据,所以新的海康的设备,在28181设置的地方,有个TCP广播的开关,开启后,就表示采用tcp方式传输语音对讲数据。
大华的设备目前为止没有看到类似的机制,而是采用拓展的sip协议,和类似视频点播的模式一样,sdp中对应play关键字改成talk,这样的话语音对讲的方式也是和视频点播一样,就可以由服务端任意控制何种方式了,也就肯定支持公网对讲了,也不知道后续国标文档会不会也改成这个方法,不然目前都是没有统一,这就很难办。
**语音对讲大致流程:**
- 1,发送语音广播Broadcast指令到设备。
- 2,设备发送invite点播指令,里面带的sdp数据指定了何种方式哪个端口。
- 3,服务端绑定或打开对应的端口,打开成功后,组织sdp数据通过sip指令发给设备。
- 4,设备应答ack指令,服务端打开麦克风采集数据。
- 5,数据默认是pcm格式的,转成pcma格式,rtp打包发出去。
**特别说明:**
1. 打开通道视频,在视频控件悬浮条上单击语音对讲按钮开始对讲,再次单击关闭对讲,同一时刻只允许一个通道处于对讲状态。
2. 先发送语音广播通知,通过MESSAGE指令,xml数据对应cmdtype=Broadcast,信息带上SourceID和TargetID。
3. 设备端收到语音广播通知后,会主动发起INVITE点播请求到服务端,请求中带了sdp信息。
4. 服务端解析sdp信息,应答点播请求,同样带上自己这边的sdp信息。
5. 服务端绑定端口,根据sdp内容选择是被动接收还是主动发起连接到设备端。
6. 设备端应答ack,开启语音对讲,服务端采集语音pcm数据,转成pcma,再通过rtp打包发给对应设备端口。
7. 默认设备支持的是局域网对讲,如果要公网对讲,需要支持tcp主动模式,也就是设备主动连接服务端,然后服务端对对应的连接发送语音数据。
8. 测试发现海康大华的设备,音频播放那边要设置成g711a,才能正常播放语音。查阅了下资料,好像如果要支持28181语音对讲,必须设置成这个,其他28181平台也是这个规范。
9. 海康的语音对讲默认是udp模式,如果要支持广域网对讲,也就是让设备端主动连接服务端,让后语音通信,必须要新版的设备才支持,后台28181设置的地方有个启用tcp广播,这个开关必须开启。
10. 大华的语音对讲如果要支持公网,必须采用非国标的sip交互,详情见 https://zhuanlan.zhihu.com/p/649434585 。
## 二、效果图
## 三、相关地址
1. 国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)
2. 国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)
3. 个人作品:[https://blog.csdn.net/feiyangqingyun/article/details/97565652](https://blog.csdn.net/feiyangqingyun/article/details/97565652)
4. 文件地址:[https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g](https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g) 提取码:01jf 文件名:bin_video_gb28181。
## 四、功能特点
1. 支持设备注册、注销、心跳、校时、注册认证、注销认证等。
2. 设备上线后可以手动获取设备状态、设备信息、配置信息、预置位信息等。
3. 设备上线后自动获取设备通道信息,包括中文通道名称。识别到通道上线离线变化,会重新获取该设备的所有通道信息。
4. 支持视频点播,可以分别点播主码流和子码流,内置rtp解包线程,解包后发给视频播放组件解码播放。
5. 每个设备每个通道支持点播多个视频,通过ssrc区分,支持共用端口和不同端口收流。
6. 支持对某个设备下面所有通道、某个通道、某个通道对应的某个流分别关闭。
7. 支持录像文件查询和回放,回放控制支持暂停播放、继续播放、倍速播放、切换播放进度。
8. 支持录像文件下载,支持倍速比如8倍速下载,可同时多线程批量下载。
9. 回放和下载同时支持IPC和NVR,比如摄像头自带的SD存储卡录像文件回放,NVR上的硬盘录像文件回放。
10. 支持云台控制,向上、向下、向左、向右、左上、右上、左下、右下方位移动,镜头放大缩小,光圈放大缩小,镜头聚焦放焦。
11. 支持预置位信息的查询、调用、添加、修改、删除等操作。
12. 自动目录订阅功能,通道上线下线都