当前位置: 首页 > news >正文

GB28181学习(十四)——语音广播与语音对讲

语音对讲

定义

在这里插入图片描述

  • 用户端向设备通过视音频点播请求音频数据;
  • 用户端接收音频数据并通过特定的播放设备(如音响)播放;
  • 用户端向设备发送广播请求;
  • 设备解析广播成功后通过INVITE方法向用户请求音频数据;
  • 用户通过音频采集设备获取音频数据;
  • 用户将采集的音频数据发送至设备;

可以总结为:音频数据的双向传输。

抓包

  1. 发送INVITE请求( mysipsdk—>设备)
INVITE sip:xxx@192.168.0.111:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.107:5060;rport;branch=xxx
Max-Forwards: 70
From: sip:xxx@192.168.0.107;tag=xxx
To: sip:xxx@192.168.0.111
Contact: <sip:xxx@192.168.0.107:5060>
Call-ID: xxx
CSeq: 18467 INVITE
Allow: SUBSCRIBE, NOTIFY, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: 
Subject: xxx:xx,xxx:xx
Content-Type: application/sdp
Content-Length:   169v=0
o=xxx 0 0 IN IP4 192.168.0.107
<!--请求媒体流的操作类型:Talk-->
s=Talk
c=IN IP4 192.168.0.107
t=0 0
<!--媒体类型:音频(audio) 传输端口:38000 传输方式:UDP 负载类型:8(PCMA)-->
m=audio 38000 RTP/AVP 8
a=sendrecv
<!--负载类型:8(PCMA) 时钟频率:8000-->
a=rtpmap:8 PCMA/8000
<!--"f=v/编码格式/分辨率/帧率/码率/码率大小a/编码格式/码率大小/采样率"-->
f=v/a/1/8/1
y=0100000001
  1. 接收设备响应(设备—>mysipsdk)
SIP/2.0 200 OK
Call-ID: xxx
Contact: <sip:xxx@192.168.0.111:5060>
Content-Length: 270
Content-Type: application/sdp
CSeq: 18467 INVITE
From: <sip:xxx@192.168.0.107>;tag=xxx
To: <sip:xxx@192.168.0.111>;tag=xxx
User-Agent: SIP UAS V.2016.xxxx
Via: SIP/2.0/UDP 192.168.0.107:5060;rport=5060;branch=xxxv=0
o=xxx 0 0 IN IP4 192.168.0.111
s=Talk
i=VCam Talk Session
c=IN IP4 192.168.0.111
t=0 0
m=audio 9712 RTP/AVP 8
a=recvonly
a=rtpmap:8 PCMA/8000/1
m=audio 9712 RTP/AVP 8
a=sendonly
a=rtpmap:8 PCMA/8000/1
y=0100000001
f=v/0/0/0/0/0a/0/0/0
  1. 发送ACK到设备(mysipsdk—>设备)
ACK sip:xxx@192.168.0.111:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.107:5060;rport;branch=xxx
Max-Forwards: 70
From: sip:xxx@192.168.0.107;tag=xxx
To: sip:xxx@192.168.0.111;tag=xxx
Call-ID: xxx
CSeq: 18467 ACK
Content-Length:  0
  1. 接收音频数据(设备—>mysipsdk)

在这里插入图片描述

代码

  • 组装sdp
static std::string CreateSDPForAudio(const GB28181MediaContext& mediaContext)
{char str[500] = { 0 };pj_ansi_snprintf(str, 500,"v=0\n""o=%s 0 0 IN IP4 %s\n""s=Talk\n""c=IN IP4 %s\n""t=0 0\n""m=audio %d RTP/AVP 8\n""a=sendrecv\n""a=rtpmap:8 PCMA/8000\n""f=v/a/1/8/1\n""y=0100000001\n",mediaContext.GetDeviceId().c_str(),mediaContext.GetRecvAddress().c_str(),mediaContext.GetRecvAddress().c_str(),mediaContext.GetRecvPort());return str;
}
  • 音频数据接收与视频数据接收类似,根据sdp协商确定接收的音频格式;

语音广播

要求

在这里插入图片描述

流程

在这里插入图片描述

抓包

  1. 发送广播通知(mysipsdk—>设备)
MESSAGE sip:xxx@192.168.0.111:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.107:5060;rport;branch=xxx
Max-Forwards: 70
From: <sip:xxx@192.168.0.107>;tag=xxx
To: <sip:xxx@xx>
Contact: <sip:xxx@192.168.0.107:5060>
Call-ID: xxx
CSeq: 18467 MESSAGE
Content-Type: Application/MANSCDP+xml
Content-Length:   186<?xml version="1.0" encoding="UTF-8"?>
<Notify>
<CmdType>Broadcast</CmdType>
<SN>130</SN>
<!--语音输入设备的设备编码-->
<SourceID>xxx</SourceID>
<!--语音输出设备的设备编码-->
<TargetID>xxx</TargetID>
</Notify>
  1. 广播通知响应(设备—>mysipsdk)
SIP/2.0 200 OK
Call-ID: xxx
Content-Length: 0
CSeq: 18467 MESSAGE
From: <sip:xxx@192.168.0.107>;tag=xxx
To: <sip:xxx@xxx>;tag=xxx
User-Agent: SIP UAS V.2016.xxxx
Via: SIP/2.0/UDP 192.168.0.107:5060;rport=5060;branch=xxx
  1. 广播通知结果(设备—>mysipsdk)
MESSAGE sip:xxx@192.168.0.107 SIP/2.0
Call-ID: xxx
Content-Length: 180
Content-Type: Application/MANSCDP+xml
CSeq: 2 MESSAGE
From: <sip:xxx@192.168.0.111:5060>;tag=xxx
Max-Forwards: 70
To: <sip:xxx@192.168.0.107>
User-Agent: SIP UAS V.2016.xxxx
Via: SIP/2.0/UDP 192.168.0.111:5060;rport;branch=xxx<?xml version="1.0" encoding="GB2312" standalone="yes" ?>
<Response>
<CmdType>Broadcast</CmdType>
<SN>130</SN>
<DeviceID>xxx</DeviceID>
<Result>OK</Result>
</Response>
  1. 广播通知结果响应(mysipsdk—>设备)
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.111:5060;rport=5060;received=192.168.0.111;branch=xxx
Call-ID: xxx
From: <sip:xxx@192.168.0.111>;tag=xxx
To: <sip:xxx@192.168.0.107>;tag=xxx
CSeq: 2 MESSAGE
Content-Length:  0
  1. 广播请求(设备—>mysipsdk)
INVITE sip:xxx@192.168.0.107:5060 SIP/2.0
Call-ID: xxx
Contact: <sip:xxx@192.168.0.111:5060>
Content-Length: 240
Content-Type: application/sdp
CSeq: 1 INVITE
Expires: 120
From: <sip:xxx@192.168.0.111:5060>;tag=xxx
Max-Forwards: 70
Subject: xxx:xxx,xxx:xxx
To: <sip:xxx@192.168.0.107:5060>
User-Agent: SIP UAS V.2016.xxxx
Via: SIP/2.0/UDP 192.168.0.111:5060;rport;branch=xxxv=0
o=xxx 0 0 IN IP4 192.168.0.111
s=Play
i=VCam BroadCast Session
c=IN IP4 192.168.0.111
t=0 0
m=audio 9712 RTP/AVP 8 96
a=recvonly
a=rtpmap:8 PCMA/8000/1
a=rtpmap:96 PS/90000
y=0022371912
f=v/0/0/0/0/0a/1/8/1
  1. 广播请求响应(mysipsdk—>设备)
SIP/2.0 200 OK
From: <sip:xxx@192.168.0.107:5060>;tag=xxx
To: <sip:xxx@192.168.0.111:5060>;tag=xxx
Call-ID: xxx
CSeq: 1 INVITE
User-Agent: General SIP UAS V1.0
Via: SIP/2.0/UDP 192.168.0.111:5060;rport;branch=xxx
Contact: <sip:xxx@192.168.0.107:5060>
Content-Type: application/SDP
Content-Length: 182v=0
o=xxx 0 0 IN IP4 192.168.0.107
s=Play
c=IN IP4 192.168.0.107
t=0 0
m=audio 40000 RTP/AVP 8
a=rtpmap:8 PCMA/8000
a=sendonly
y=0022371912
  1. 广播请求响应ACK(设备—>mysipsdk)
ACK sip:xxx@192.168.0.107:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.111:5060;rport;branch=xxx
From: <sip:xxx@192.168.0.111:5060>;tag=xxx
To: <sip:xxx@192.168.0.107:5060>;tag=xxx
Call-ID: xxx
CSeq: 1 ACK
Contact: <sip:xxx@192.168.0.111:5060>
Max-Forwards: 70
User-Agent: IP Camera
Content-Length: 0
  1. 关闭广播(设备—>mysipsdk)
BYE sip:xxx@xxx SIP/2.0
From: <sip:xxx@xxx>;tag=xxx
To: <sip:xxx@xxx>;tag=xxx
CSeq: 2 BYE
Call-ID: xxx
Via: SIP/2.0/UDP 192.168.0.111:5060;branch=xxx
Max-Forwards: 70
Content-Length: 0
  1. 关闭广播响应(mysipsdk—>设备)
http://www.lryc.cn/news/215736.html

相关文章:

  • Java实验一编程环境使用
  • 【数据结构】——线性表简答题模板
  • lambda和stream
  • go微信开发sdk-简单使用_已设置图床
  • Java判断文本是否有敏感词
  • 【腾讯云 HAI域探秘】基于ChatGLM和StableDiffusion的小学一年级语文教学方案创作实践与经验分享
  • flink状态不能跨算子
  • 基于transformer的解码decode目标检测框架(修改DETR源码)
  • Java SE 学习笔记(十七)—— 单元测试、反射
  • HNU-计算机网络-实验1-应用协议与数据包分析实验(Wireshark)
  • 【深度学习】快速制作图像标签数据集以及训练
  • Spring Boot Web MVC
  • 设置防火墙
  • 3.Docker的客户端指令学习与实战
  • 【微服务开篇-RestTemplate服务调用、Eureka注册中心、Nacos注册中心】
  • python if和while的区别有哪些
  • Unity计时器
  • Unity热更新介绍
  • 在虚拟机centos7中部署docker+jenkins最新稳定版
  • nodejs express vue 点餐外卖系统源码
  • 微信小程序导入js使用时候报错
  • 相机存储卡被格式化了怎么恢复?数据恢复办法分享!
  • Firefox修改缓存目录的方法
  • maven子模块无法导入jar包问题
  • ardupilot开发 --- 代码解析 篇
  • C++引用概述
  • 精准努力,提升自己的核心竞争力——中国人民大学与加拿大女王大学金融硕士
  • string【C++】
  • 【Python爬虫】selenium4新版本使用指南
  • CCF_A 计算机视觉顶会CVPR2024投稿指南以及论文模板