typedef struct _RTP_header {
/* byte 0 */
#if (BYTE_ORDER == LITTLE_ENDIAN)
unsigned char csrc_len:4; /* expect 0 */
unsigned char extension:1; /* expect 1, see RTP_OP below */
unsigned char padding:1; /* expect 0 */
unsigned char version:2; /* expect 2 */
#elif (BYTE_ORDER == BIG_ENDIAN)
unsigned char version:2;
unsigned char padding:1;
unsigned char extension:1;
unsigned char csrc_len:4;
#else
#error Neither big nor little
#endif
/* byte 1 */
#if (BYTE_ORDER == LITTLE_ENDIAN)
unsigned char payload:7; /* RTP_PAYLOAD_RTSP */
unsigned char marker:1; /* expect 1 */
#elif (BYTE_ORDER == BIG_ENDIAN)
unsigned char marker:1;
unsigned char payload:7;
#endif
/* bytes 2, 3 */
unsigned short seq_no;
/* bytes 4-7 */
unsigned int timestamp;
/* bytes 8-11 */
unsigned int ssrc; /* stream number is used here. */
} RTP_header;
以上结构定义中,出现了很多unsigned char csrc_len:4; 类似的定义,这些定义中有一个冒号,后面跟一个数字,冒号在这里是充当位域定义器,是说明该字段在一个字节中占多少bit,其单位是bit。如此理解,上面的结构就很容易理解了。