通过C/C++结构体解析RTP/RTCP的包头的方法(2)

注意,RTCP的包比较小,通常会将多个RTCP包,通过1个UDP包进行发送,那么就需要对多个RTCP包进行拆解,拆解的方法是通过length,获取不同包的首地址。

多个包的组成为:

通过C/C++结构体解析RTP/RTCP的包头的方法

C/C++解析的方法为:

bool RTPProcessor::checkRtcp(PacketBuffer* packet)
{
 bool ret =false;
 const int rtcpCount=5;
 int i=0;
 RTCP_Header* pHeader[rtcpCount];
 int length[rtcpCount]={0};
 int ssrc[rtcpCount]={0};
 int offset=0;
 for (i=0;i<rtcpCount;i++)
 {
  if (i > 0)
  {
   offset+=4*(length[i-1]+1);
  }
  if (offset >= packet->dataSize)
  {
   break;
  }
  pHeader[i] =  (RTCP_Header*)(packet->data+offset);
  length[i] = ntohs(pHeader[i]->length);
  ssrc[i] = ntohl(pHeader[i]->ssrc);

}
 return ret;
}

其中offset为每个包的偏移地址,rtcpCount=5为每个UDP包,预计不超过5个RTCP包。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b4419ad6675cbbc83e3637993483f58e.html