最近再对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; }
通过按位赋值的方式可以快速赋值,起到事倍功半的作用。