当前位置: 代码迷 >> 多媒体/流媒体开发 >> 关于JRTPLIB中RTCP包的有关问题
  详细解决方案

关于JRTPLIB中RTCP包的有关问题

热度:4079   发布时间:2013-02-26 00:00:00.0
关于JRTPLIB中RTCP包的问题
查资料说RTCP包的发送接收是自动的,但是我RTCP包中的信息如丢包数之类的,是要我自己写进去呢还是自动的,然后接收到RTCP包以后,我怎么提取出一个RTCP包呢,并且怎么来查看里面的信息呢,希望有高手能给我解答下,最好附上代码。谢谢,拜托啦

------解决方案--------------------------------------------------------
我和楼主分享一下我这两天的成果,楼主有什么好的方法记得指导一下啊,
RTPSessionParams有一个SetUsePollThread方法,是用于开启自动处理rtcp包的线程用的,
客户端服务器都开启就可以了

然后服务器就发送数据,客户端只负责接收就可以了

如果想分析rtcp信息服务器程序还要做一件事情,就是重载RtpSession的OnPollThreadStep()方法,用于处理rtcp信息,在这里并不能获取rtcp包(我没找到获取的方法),但可以得到收到的rr包的信息,

if (GotoFirstSource())
{
do
{
RTPSourceData *srcdat;

srcdat = GetCurrentSourceInfo();

//srcdat 可以获取到很多的信息,用来分析传输状况,可以查看手册
if(srcdat->RR_HasInfo()) //如果有收到rr包
{

srcdat->RR_GetPacketsLost()//得到最近会话丢失的包数

}

} while (GotoNextSource());
}
------解决方案--------------------------------------------------------
重载 OnRTCPCompoundPacket函数 就行了啊,

RTCPPacket *rtcppack;
pack->GotoFirstPacket();
while ((rtcppack = pack->GetNextPacket()) != 0)
{
if (rtcppack->IsKnownFormat())
{
switch (rtcppack->GetPacketType())
{
case RTCPPacket::SR:
{
RTCPSRPacket *p = (RTCPSRPacket *)rtcppack;
uint32_t senderssrc = p->GetSenderSSRC();

std::cout << " SR Info:" << std::endl;
std::cout << " NTP timestamp: " << p->GetNTPTimestamp().GetMSW() << ":" << p->GetNTPTimestamp().GetLSW() << std::endl;
std::cout << " RTP timestamp: " << p->GetRTPTimestamp() << std::endl;
std::cout << " Packet count: " << p->GetSenderPacketCount() << std::endl;
std::cout << " Octet count: " << p->GetSenderOctetCount() << std::endl;
// std::cout << " Receive time: " << p->GetReceiveTime().GetSeconds() << std::endl;

}
break;


}
}
}