音视频CC计数检查

在网络中收取视频数据的时候,可以通过检查 CC来判断网络中是否存在丢包问题,CC字段是在 TS头中的一个计数值,正常情况下它是从0到15的连续值(到达16后变为0)。
编码思路:首先记录第一次的 CC值,然后再收到数据包的时候和上次保存的 CC值进行对比,如果差1说明网络中没有丢包。
有以下几种情况 CC计数是可以不连续的:
1.调整字段的值为 00或者 10的时候,说明这个数据包中没有音视频数据,所以 CC不计数;
2.当前数据包中存在调整字段,并且调整字段有数据,如果调整字段设置了不连续计数标志位的话,这种情况下 CC不计数。

代码:
pThis->m_cc = (pData[3] & 0x0f); //pData是获取的 188字节的TS数据
 
if   (pThis->m_last_cc == -1)
{
     pThis->m_last_cc = pThis->m_cc;
}
else
{
     if   (0 == (pData[3] & 0x10))      // 调整字段为00或10时,连续计数值不增加
     {
         pThis->m_last_cc = -1;
     }
     else   if   (0 != (pData[3] & 0x20) && pData[4] > 0)  // 存在调整字段11,并且调整字段大于0,检查是否有不连续计数位
     {
         unsigned  int   uDiscontinuityIndicator = pData[5] & 0x80;
         if ( (pThis->m_cc != ((pThis->m_last_cc + 1) &0x0f)) && (0 == uDiscontinuityIndicator) )
         {
             log_info( " last cc is %d new cc is %d\n" , pThis->m_last_cc, pThis->m_cc);
         }
 
         pThis->m_last_cc = pThis->m_cc;
     }
     else
     {
         if (pThis->m_cc != ((pThis->m_last_cc + 1) &0x0f))
         {
             log_info( " last cc is %d new cc is %d\n" , pThis->m_last_cc, pThis->m_cc);
         }
 
         pThis->m_last_cc = pThis->m_cc;
     }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值