#pragma once /* attempt to determine byte order */ #include #include #include #ifndef __BYTE_ORDER # ifdef __APPLE__ # define __BYTE_ORDER __DARWIN_BYTE_ORDER # define __LITTLE_ENDIAN __DARWIN_LITTLE_ENDIAN # define __BIG_ENDIAN __DARWIN_BIG_ENDIAN # else # error "__BYTE_ORDER should be defined by someone" # endif #endif /* according to rtp_proxy.c RFC 3550 */ struct rtp_hdr { #if __BYTE_ORDER == __LITTLE_ENDIAN uint8_t csrc_count:4, extension:1, padding:1, version:2; uint8_t payload_type:7, marker:1; #elif __BYTE_ORDER == __BIG_ENDIAN uint8_t version:2, padding:1, extension:1, csrc_count:4; uint8_t marker:1, payload_type:7; #endif uint16_t sequence; uint32_t timestamp; uint32_t ssrc; uint8_t data[0]; } __attribute__((packed));