onvif 语音对讲

前言

在视频监控应用场景中,有很多场景需要采集查看监控的人的语音发送到监控摄像头的音响上去以实现对被监控对象的语音控制。
ONVIF Core Specification Core_2.00文档中章节12.3 Back Channel Connection对此进行了详细的描述。
ONVIF语音对讲的实现完全基于RTSP协议,流程中没有用到ONVIF协议。

RTSP Require-Tag

RTSP 标准[RFC 2326]可以通过添加额外的头进行扩展,引入Requiretag 用于处理特殊的功能扩展(参考 [RFC
2326], 1.5 Extending Rtsp and 12.32 Require).
Require头用来判定是否支持某个特性,如果要求server理解支持某个特性并正确处理请求,需要对server的每个请求都携带这个Require头。
server如果支持backchannel这个特性,需要理解该特性所对应的tag:

  • www.onvif.org/ver20/backchannel

如果client想要建立一个包含backchannelRTSP连接,在这一系列请求(SUBSCRIBE,SETUP,PLAY,PAUSE,TEARDWON)中需要包含这个Require www.onvif.org/ver20/backchannel头。

DESCRIBE

Client - Server发送DESCRIBE协议的时候添加前文说过的Require-tag,这时如果Server不支持语音对讲则会回复551 Option not supported,示例如下:

Client – Server: DESCRIBE rtsp://192.168.0.1 RTSP/1.0
CSeq: 1
User-Agent: ONVIF Rtsp client
Accept: application/sdp
Require: www.onvif.org/ver20/backchannel #!! Require-tag
Server – Client: RTSP/1.0 551 Option not supported
CSeq: 1
Unsupported: www.onvif.org/ver20/backchannel

如果支持语音对讲的话,则会回复200 OK并携带sdp信息:

RTSP/1.0 200 OK
CSeq: 1
Content-Type: application/sdp
Content-Length: xxx
v=0
o= 2890842807 IN IP4 192.168.0.1
s=RTSP Session with audiobackchannel
m=video 0 RTP/AVP 26
a=control:rtsp://192.168.0.1/video
a=recvonly
m=audio 0 RTP/AVP 0
a=control:rtsp://192.168.0.1/audio
a=recvonly
m=audio 0 RTP/AVP 0
a=control:rtsp://192.168.0.1/audioback
a=rtpmap:0 PCMU/8000
a=sendonly

上面的sdp列出了三个流及其控制URL: 视频流:rtsp://192.168.0.1/video,音频流:rtsp://192.168.0.1/audio,以及我们的主角对讲流rtsp://192.168.0.1/audioback,注意对讲流的属性a=sendonly与其他流的a=recvonly不同。

SETUP

接下来我们就可以SETUP这些session:

Client – Server: SETUP rtsp://192.168.0.1/video RTSP/1.0
CSeq: 2
Transport: RTP/AVP;unicast;client_port=4588-4589
Server – Client: RTSP/1.0 200 OK
CSeq: 2
Session: 123124;timeout=60
Transport:RTP/AVP;unicast;client_port=4588-4589;
server_port=6256-6257
Client – Server: SETUP rtsp://192.168.0.1/audio RTSP/1.0
CSeq: 3
Session: 123124
Transport: RTP/AVP;unicast;client_port=4578-4579
Server – Client: RTSP/1.0 200 OK
CSeq: 3
Session: 123124;timeout=60
Transport:RTP/AVP;unicast;client_port=4578-4579;
server_port=6276-6277
Client – Server: SETUP rtsp://192.168.0.1/audioback RTSP/1.0
CSeq: 4
Session: 123124
Transport: RTP/AVP;unicast;client_port=6296-6297
Require: www.onvif.org/ver20/backchannel
Server – Client: RTSP/1.0 200 OK
CSeq: 4
Session: 123124;timeout=60
Transport:RTP/AVP;unicast;client_port=6296-6297;
server_port=2346-2347

上面setup了三次,分别建立了视频流,音频流以及位于最后的音频对讲流的连接。

PLAY

由于rtsp有集合控制的功能,仅需要发送一条PLAY或者PAUSE就可以同时控制多个音频流和视频流。所以下面我们发送一条PLAY请求即可:

Client – Server: PLAY rtsp://192.168.0.1 RTSP/1.0
CSeq: 5
Session: 123124
Require: www.onvif.org/ver20/backchannel
Server – Client: RTSP/1.0 200 OK
CSeq: 5
Session: 123124;timeout=60

在收到PLAY请求的200 OK的回复之后,客户端就可以Server发送音频数据包了,Client不应该在收到回复之前就开始发送数据包。
上面例子中的Require: www.onvif.org/ver20/backchannel头指明了这个特殊的解释对于PLAY命令是必须的。PLAY命令同时开始了ClientNVT获取音频流和视频流以及从Client发送到Server的对讲流。

TEARDOWN

通过发送TEARDOWN请求来关闭这个包含三个流的session:

Client – NVT: TEARDOWN rtsp://192.168.0.1 RTSP/1.0
CSeq: 6
Session: 123124
Require: www.onvif.org/ver20/backchannel
NVT – Client: RTSP/1.0 200 OK
CSeq: 6
Session: 123124

Multicast Streaming

如果客户端要发送语音广播给多个摄像头,那么它需要使用SETUP请求中的transport参数来告诉Server多播地址和端口

Client – Server: SETUP rtsp://192.168.0.1/audioback RTSP/1.0
CSeq: 4
Session: 123124
Transport:RTP/AVP;multicast;destination=224.2.1.1;port=60
000-60001;ttl=128
Require: www.onvif.org/ver20/backchannel
Server – Client: RTSP/1.0 200 OK
CSeq: 4
Session: 123124;timeout=60
Transport:RTP/AVP;multicast;destination=224.2.1.1;port=60
000-60001;ttl=128;mode=”PLAY”

参考

ONVIF Core Specification Core_2.00

onvif 语音对讲相关推荐

  1. EasyDarwin开源流媒体云平台之语音对讲功能设计与实现

    本文由EasyDarwin开源团队成员Alex贡献:http://blog.csdn.net/cai6811376/article/details/52006958 EasyDarwin云平台一直在稳 ...

  2. C#RTSP通信2:RTSP语音广播+语音对讲(WinForm版本)

    C#RTSP通信2:RTSP语音广播+语音对讲(WinForm版本) C#RTSP通信1:C#高性能RTSP播放器(使用FFmepg封装自定义控件,使用简单) C#RTSP通信2:RTSP语音广播+语 ...

  3. 基于pjsip实现p2p语音对讲

    目的 为实现跨网络的语音对讲,使位于NAT后的两个设备进行p2p的语音通讯,此处选用pjsip开源项目来实现. 未解决的问题:对称型的NAT无法实现p2p打洞,pjsip采用turn服务进行转发,不能 ...

  4. 局域网自建对讲服务器,Windows 局域网语音对讲

    [实例简介] Windows下局域网语音对讲程序 ,亲测可行. [实例截图] [核心代码] new_ └── new_ ├── 发送 │   ├── Debug │   │   ├── Sound_s ...

  5. GB28181语音对讲/摄像头公网对讲指挥

    目录 概述 GB28181公网对讲特别说明 GB28181语音对讲原理​ 公网摄像头语音对讲解决方案 LiveMedia介绍 LiveMedia GB28181平台搭建 概述 摄像头语音对讲是在201 ...

  6. 安卓GB28181设备语音广播和语音对讲(Android GB28181 语音广播和语音对讲)实现

    安卓GB28181语音广播和语音对讲是一个非常重要的功能,很多场景都需要.语音对讲需要安卓有接收语音广播的功能.安卓还需要采集音频,并和视频一起打包到PS传给服务器,采集音频传服务器实现较容易.关键还 ...

  7. 安卓GB28181跨网段语音对讲

    GB28181语音对讲实际使用中遇到的主要问题是跨网段后rtp udp包不能穿透,针对这个问题有两套解决方案. 方案一,安卓端语音发送走实时视音频点播通道,把编码后的语音数据封装到PS包中,和视频帧一 ...

  8. GB28181系列笔记-语音对讲功能

    GB28181系列笔记-注册与保活 GB28181系列笔记-设备目录查询 GB28181系列笔记-实时流请求 GB28181系列笔记-历史流查询与请求 GB28181系列笔记-语音对讲功能 GB281 ...

  9. GB28181公网语音对讲

    GB28181公网语音对讲 语音对讲概述 公网对讲说明 语音对讲原理 公网语音对讲方案 视源GBS平台介绍 视源GBS核心功能 语音对讲概述 摄像头语音对讲是在2014版本提出来的,我这里详细写一遍国 ...

最新文章

  1. 破解前端面试系列(3):如何搞定纸上代码环节?
  2. struts2关键配置及函数总结,
  3. C++教程之lambda表达式一
  4. QT5 C++编写B类IP地址计算第一个可用IP地址、最后一个可用IP地址、网络号、广播地址、子网数、主机数
  5. 计算并联电阻的阻值(信息学奥赛一本通-T1015)
  6. (33)VHDL实现异步复位D触发器
  7. Mysql主从占用大量cpu_Mysql占用过高CPU时的优化手段
  8. winform最小化后隐藏到右下角,单击或双击后恢复
  9. SQL Server性能常用语句
  10. Flex Builder 中视图状态
  11. python控制电机转动_使用python,通过串口ROS直接控制电机驱动器(6)
  12. 深入理解机器学习(一)——二分类模型评价指标详解(上)
  13. [汇编]汇编学习笔记(6):MASM32编译器编译链接16位汇编
  14. 基于BERT实现简单的情感分类任务
  15. 安卓手机怎么投屏台式计算机WIN7,手机怎么投屏到win7电脑
  16. Java笔记01——JAVA基础部分
  17. 微信公众号推广分享二维码,关联扫码关注的客户
  18. 2021年焊工(初级)最新解析及焊工(初级)找解析
  19. 软件开发生命周期中的设计阶段_软件过程模型|如何进行团队式的软件开发?...
  20. 云虚拟主机连接mysql_云虚拟主机数据库使用

热门文章

  1. Fail to load response data :No content available for preflight request 加载响应数据失败:请求没有可用内容
  2. App推广:七个常用渠道
  3. 强力推荐十款在线操作系统
  4. visio2021专业版安装包下载及教程 《流程图工具》
  5. 黑莓能否挑iphone下马,制造电信神话?
  6. JVM类加载机制-面试
  7. 正则表达式:c#正则表达式判断,不包含中文
  8. Opencv中鼠标作为画笔
  9. ModelSim free
  10. 授之以鱼不如授之以渔