最近再对RTCP信令处理方法进行优化。但发现规范中RTCP的头部区域很多按BIT赋值的规定。
如规范rfc4585(RTP/AVPF)中 rtcp的头部格式如下。
对于这样的格式如何快速对于RTCP的头部进行赋值呢?
具体如下,可以使用bit赋值的方式。下面上干货,具体局方见代码。
#include <stdlib.h>
#include <stdio.h>
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
struct RTCPFBHeader
{
#ifdef RTP_BIG_ENDIAN
uint8_t version:2;
uint8_t padding:1;
uint8_t fmt:5;
#else // little endian
uint8_t fmt:5;
uint8_t padding:1;
uint8_t version:2;
#endif // RTP_BIG_ENDIAN
uint8_t packettype;
uint16_t length;
};
int main()
{
char rtcpdata[]={0x83,0xcd,0x00,0x04,0x0e,0x5e,0xb3,0xe1,0x00,0x00,0x00,0x00,0x99,0x4a,0x2a,0x67};
RTCPFBHeader *rtcphd = (RTCPFBHeader*)rtcpdata;
RTCPFBHeader sheader = *rtcphd;
printf("sheader.fmt=%d\n",sheader.fmt);
return 1;
}
通过按位赋值的方式可以快速赋值,起到事倍功半的作用。