GB28181语音对讲对接华为IVS平台遇到的坑和解决办法

1
开发环境:Android Studio ;测试环境:IVS客户端(版本号在这里插入图片描述),IVS登录账号
2
开发进度:已经完成功能
GB28181语音对讲对接华为IVS平台遇到的坑和解决办法_第1张图片
未完成功能:
GB28181语音对讲对接华为IVS平台遇到的坑和解决办法_第2张图片
3
现在遇到的阻力:
手机客户端没有接收到平台下发的语音数据包
4
定位问题方法如下代码侧输入如下信息(服务器IP 端口号 服务器ID 主设备ID 镜头ID(注意语音 中间是137))
GB28181语音对讲对接华为IVS平台遇到的坑和解决办法_第3张图片

在IVS客户端的操作如下
1)设备上线如下
GB28181语音对讲对接华为IVS平台遇到的坑和解决办法_第4张图片
2)请求视频流如下所示
GB28181语音对讲对接华为IVS平台遇到的坑和解决办法_第5张图片
3)点击如下按钮实现旁路语音对讲
GB28181语音对讲对接华为IVS平台遇到的坑和解决办法_第6张图片
捕获信令流程如下所示
在这里插入图片描述

媒体请求中的媒体描述信息(主要是本地端口和IP)
GB28181语音对讲对接华为IVS平台遇到的坑和解决办法_第7张图片

平台返回200 OK后sdp中的媒体描述信息(主要是媒体流端口)
GB28181语音对讲对接华为IVS平台遇到的坑和解决办法_第8张图片
过滤媒体流端口得到如下的媒体穿越包
GB28181语音对讲对接华为IVS平台遇到的坑和解决办法_第9张图片

问题:没有正常接收到平台下发的媒体流

代码侧:语音接收方法,开辟一个socket(UDP)端口,绑定本地端口作为服务端,
bzero((char *) &serveraddrrece, sizeof(serveraddrrece));
serveraddrrece.sin_family = AF_INET;
serveraddrrece.sin_addr.s_addr=htonl(INADDR_ANY);
serveraddrrece.sin_port = htons(11233);
serverlenreece = sizeof(serveraddrrece);
LOGE(“OOOOOOOOOOOOOOOOO = %d”, serveraddrrece.sin_port)
// 2. 绑定
int ret = ::bind(sock_rece, (struct sockaddr *)&serveraddrrece, serverlenreece);

通过该端口发送穿越包给平台
bzero((char *) &serveraddrrecetest, sizeof(serveraddrrecetest));
serveraddrrecetest.sin_family = AF_INET;
serveraddrrecetest.sin_addr.s_addr=inet_addr(“122.224.65.194”);
serveraddrrecetest.sin_port = htons(MediaSerPort);
int serverlen = sizeof(serveraddrrecetest);

n = sendto(sock_rece, buf, strlen(buf), 0, (const sockaddr *) &serveraddrrecetest, serverlen);

循环接收平台发送给该端口的语音数据

while (gb28181SenderReceice->isReceRuning)
{
/接受数据的大小设置为int类型/
int ReceDataLegth = 0;
LOGE(“Receport = %d, ReceIP = %ld”,gb28181SenderReceice->serveraddrrece.sin_port, gb28181SenderReceice->serveraddrrece.sin_addr)
struct sockaddr_in peer;
socklen_t len = sizeof(peer);
ReceDataLegth = recvfrom(sock_rece, szRtpPacket, ulPacketLen, 0, (struct sockaddr*) &peer, (socklen_t*)&len);
if(-1 == ReceDataLegth) 代码侧验证:能够接收到平台返回来的穿越包

你可能感兴趣的:(GB28181语音对讲对接华为IVS平台遇到的坑和解决办法)