📄 rtcp.h
字号:
/*------------------------------------------------------------------------- * rtcp.h - RTCP_LENGTH_BYTE *------------------------------------------------------------------------- */#ifndef RTCP_H#define RTCP_H#include <rtplibcommon.h>#include <rtp.h>/* RTCP constants */#define RTCP_MAXRBLOCKS 31#define RTCP_MAXREASONLEN 255#define RTCP_HEADERSZ 4#define RTCP_BWFRAC .05#define RTCP_MAXPACKETSZ 1024#define RTCP_RRMAXRBLOCKS 2697 /* Maximum number of report blocks we'll send in 1 CYCLE */ /* Equal to maximum number that will fit in 1 UDP/IP packet *//* Types of RTCP messages */#define RTCP_SR 200#define RTCP_RR 201#define RTCP_SDES 202#define RTCP_BYE 203#define RTCP_APP 204/* Types of RTCP SDES items */#define RTCP_ITEM_NULL 0#define RTCP_ITEM_CNAME 1#define RTCP_ITEM_NAME 2#define RTCP_ITEM_EMAIL 3#define RTCP_ITEM_PHONE 4#define RTCP_ITEM_LOC 5#define RTCP_ITEM_TOOL 6#define RTCP_ITEM_NOTE 7#define RTCP_ITEM_PRIV 8/* Macros for RTP structure */#define RTCP_LENGTH_BYTE(prtcp) ((prtcp->rtcp_length + 1) * 4) /* assumes appropriate byte order */struct rtcp {#if __BYTE_ORDER == __LITTLE_ENDIAN || defined(_LITTLE_ENDIAN) unsigned int rtcp_count:5; /* object count */ unsigned int rtcp_pad:1; /* padding flag */ unsigned int rtcp_ver:2; /* version */#elif __BYTE_ORDER == __BIG_ENDIAN || defined(_BIG_ENDIAN) unsigned int rtcp_ver:2; /* version */ unsigned int rtcp_pad:1; /* padding flag */ unsigned int rtcp_count:5; /* object count */#endif unsigned char rtcp_type; /* Message type */ unsigned short rtcp_length; /* Message length */ char rtcp_data[1]; /* Message data */};/* Struct for receiver report block */struct rblock { unsigned int rb_ssrc; /* SSRC to which this rr refers */ unsigned int rb_fraclost:8; /* fraction lost */ int rb_cumlost:24; /* cumulative packets lost */ unsigned int rb_hiseq; /* Extended highest seq recvd */ unsigned int rb_jitter; /* Jitter measure */ unsigned int rb_lastsrts; /* Middle 32 of last SR NTP */ unsigned int rb_delay; /* Delay since lsr */};/* Struct for receiver report message */struct rr { unsigned int rr_ssrc; /* SSRC of sender */ char rr_rb[1]; /* Pointer to 1st report block */};/* Struct for sender report message */struct sr { unsigned int sr_ssrc; /* SSRC of sender */ unsigned int sr_intts; /* NTP Timestamp (high 32 bits) */ unsigned int sr_fracts; /* NTP Timestamp (lo 32 bits) */ unsigned int sr_rtpts; /* RTP media timestamp */ unsigned int sr_packets; /* Sender's sent packet count */ unsigned int sr_octets; /* Sender's sent octet count */ char sr_rblock[1]; /* First reception report */};/* Struct for source description message `chunk' */struct sdchunk { unsigned int sdc_ssrc; /* SSRC to which chunk refers */ char sdc_data[1]; /* Beginning of SDES items */};/* Struct for source description chunk item */struct sditem { unsigned char sdi_type; /* Type of SDES item */ unsigned char sdi_len; /* Length of item data */ char sdi_data[1]; /* SDES item data */};/* Struct for reason in RTCP bye message */struct byereason { unsigned char bye_length; /* Length of reason text */ char bye_reason[1]; /* Reason for leaving. */};/* Struct for RTCP application-specific message */struct app { unsigned int app_ssrc; /* SSRC of sender */ char app_name[4]; /* Name specififying app */ char app_data[1]; /* Application-specific data */};/* API Calls */int rtcpsendbye(struct session *, char *);int rtcpsend(struct session *, struct rtcp *, int);int rtcpheader(struct rtcp *, int, unsigned char, int);double rtcpcycle(struct session *);double rtcpinitinterval(struct session *);/* Internal Calls */struct sdchunk *rtcpprocesschunk(struct session *, struct sdchunk *);void rtcpn2h(struct rtcp *);void rtcph2n(struct rtcp *);double rtcpinterval(int, int, double, int, int, int *, int);bool rtcpcycleupdate(struct session *, struct stream *, struct rblock *);struct sdchunk *rtcpconsumechunk(struct sdchunk *);bool rtcpcycleupdate(struct session *, struct stream *, struct rblock *);int rtcprecv(struct session *);int rtcpcnameadd(struct session *, struct stream *);int rtcpcnamerem(struct session *, struct stream *);int rtcpprocess(struct session *, struct rtcp *);int rtcpsr(struct session *, struct rtcp *);int rtcprr(struct session *, struct rtcp *);int rtcpsdes(struct session *, struct rtcp *);int rtcpbye(struct session *, struct rtcp *);int rtcpapp(struct session *, struct rtcp *);void rtcpcyclethreadfcn(struct session *);void rtcprecvthreadfcn(struct session *);#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -