基于OSip协议栈的GB28181视频平台--jrtp传输过程中作为接收方不发送rtcp包问题处理

在一次项目对接过程中,我方做为上级平台,对方作为下级平台,注册、取流、云台控制都没有问题,但是过1分钟后对方就会主动把视频流关闭,和对方沟通数次后确定问题在rtcp数据包上,因为我们没有及时把rtcp包发给对方导致对方以为上级平台故障,从而主动关闭视频流。

那么通过jrtp库怎么发送rtcp包呢?

通过查阅jrtplib官方资料,只要编译时增加"RTP_SUPPORT_SENDAPP"参数,编译出来的库文件就会自动发送rtcp数据包。按照官方介绍和案例程序修改完后发现作为发送方会发送rtcp包,但是作为接收方不会发送,最终根据对源代码的跟踪发现问题出现在AddDestination函数上,根据常规理解,作为发送方时我们需要调用AddDestination,目的是告诉jrtplib对方是谁,把数据发送在哪里就可以了。但实际情况是当jrtplib本身做为接收方时也需要调用AddDestination,这样程序才能知道把rtcp数据发送到哪里。

最终添加完AddDestination后,根据抓包文件可以看出正常发送rtcp数据了。对接成功。示例代码如下:

cpp 复制代码
void RtpRecvSession::addMediaSource(std::string mediaSourceIp, unsigned short mediaSourcePort)
{
    uint32_t destip = inet_addr(mediaSourceIp.c_str());
    if (destip == INADDR_NONE)
    {
        LOG_OUT(LOG_LEVEL_INFO,  "Bad IP address specified");
        return;
    }

    destip = ntohl(destip);
    jrtplib::RTPIPv4Address addr(destip, mediaSourcePort);

    AddDestination(addr);
}

对于jrtplib发送rtcp数据的总结如下:

1、编译时增加"RTP_SUPPORT_SENDAPP"参数;

2、代码中增加AddDestination函数调用;

相关推荐
莫回首�2 小时前
ubuntu 20.04 多网卡配置,遇到问题总结
linux·网络·ubuntu
星辰徐哥5 小时前
5G的行业应用:工业互联网、车联网、智慧医疗中的网络支撑
网络·5g·php
头疼的程序员6 小时前
计算机网络:自顶向下方法(第七版)第八章 学习分享(三)
网络·学习·计算机网络
@insist1236 小时前
网络工程师-核心考点:网络管理体系与 SNMP 协议全解析
网络·智能路由器·网络工程师·软考·软件水平考试
我科绝伦(Huanhuan Zhou)7 小时前
分享一个网络智能运维系统
运维·网络
codeejun7 小时前
每日一Go-44、Go网络栈深度拆解--从 TCP 到 HTTP 的资源复用艺术
网络·tcp/ip·golang
北京耐用通信7 小时前
无缝衔接·高效传输——耐达讯自动化CC-Link IE转Modbus TCP核心解决方案
网络·人工智能·物联网·网络协议·自动化·信息与通信
亚空间仓鼠7 小时前
OpenEuler系统常用服务(五)
linux·运维·服务器·网络
聊点儿技术7 小时前
CDN调度失准导致跨省流量浪费?在GSLB层用IP归属地查询实现精准就近接入
网络·ip·ip归属地查询·ip地址查询·ip离线库·cdn调度