上周处理RTCP消息中发现项目小伙伴处理TMMBR消息中遇到了问题。主要是小伙伴不晓得对于MxTBR中的Exp、Mantissa以及OverHead怎么赋值。
因为这三个对象的赋值都没有按照完整字节赋值,存在跨字节情况及只取部分BIT位情况。
我分析了下RFC5104规范,发现该规范对于三个对象的赋值描述的很清楚。Exp占高位6BIT,Mantissa占17BIT,OverHead占9 BIT。
原因及算法了解后,进入到非常轻松的编码环节。
struct tmmbndata
{
unsigned int overhead;
unsigned int mantissa;
unsigned char exp;
unsigned long tmmbn;
};
struct tmmbndata tmb;
tmb.overhead=0;
tmb.mantissa=16000;
tmb.exp=2;
tmb.tmmbn = (unsigned int)(tmb.exp << 26) + (unsigned int)(tmb.mantissa << 9) + (tmb.overhead & 511);
按位<<,根据规范规定定义好移动的BIT即可。
标签:TMMBN,int,unsigned,tmb,按位,exp,MxTBR,赋值 From: https://blog.51cto.com/u_15942605/6017165