⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hust_rtcp.h

📁 实现基于ip2022的MPEG2 TS的IP组播接收
💻 H
字号:
/*------------------------------------------------------------------------- * rtcp.h - RTCP_LENGTH_BYTE  *------------------------------------------------------------------------- */#ifndef RTCP_H#define RTCP_H#include "hust_rtplibcommon.h"#include "hust_rtp.h"/* RTCP constants */#define RTCP_MAXRBLOCKS        31#define RTCP_MAXREASONLEN      255#define RTCP_HEADERSZ          6#define RTCP_SRSZ	       24#define RTCP_RRSZ	       4#define ITEMHEADERSZ	       2#define APPSZ		       8#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)  u8_t  rtcp_count:5;	/* object count			*/  u8_t	rtcp_pad:1;	/* padding flag			*/  u8_t	rtcp_ver:2;	/* version			*/#elif __BYTE_ORDER == __BIG_ENDIAN || defined(_BIG_ENDIAN)  u8_t	rtcp_ver:2;	/* version			*/  u8_t	rtcp_pad:1;	/* padding flag			*/  u8_t  rtcp_count:5;	/* object count			*/#endif  u8_t	rtcp_type;	/* Message type			*/  u16_t rtcp_length;	/* Message length		*/  char*		rtcp_data;	/* Message data			*/  };/* Struct for receiver report block */struct rblock {  unsigned long int	rb_ssrc;	/* SSRC to which this rr refers	*/  unsigned char		rb_fraclost:8;	/* fraction lost		*/  unsigned long int 	rb_cumlost:24;	/* cumulative packets lost	*/  unsigned long int	rb_hiseq;	/* Extended highest seq recvd	*/  unsigned long int	rb_jitter;	/* Jitter measure		*/  unsigned long int	rb_lastsrts;	/* Middle 32 of last SR NTP	*/  unsigned long int	rb_delay;	/* Delay since lsr		*/};/* Struct for receiver report message */struct rr {  unsigned long int	rr_ssrc;	/* SSRC of sender		*/  char*			rr_rb;	/* Pointer to 1st report block	*/};/* Struct for sender report message */struct sr {  unsigned long int	sr_ssrc;	/* SSRC of sender		*/    unsigned long int	sr_intts;	/* NTP Timestamp (high 32 bits)	*/  unsigned long int	sr_fracts;	/* NTP Timestamp (lo 32 bits)	*/  unsigned long int	sr_rtpts;	/* RTP media timestamp		*/  unsigned long int	sr_packets;	/* Sender's sent packet count	*/  unsigned long int	sr_octets;	/* Sender's sent octet count	*/  char*			sr_rblock;	/* First reception report	*/};/* Struct for source description message `chunk' */struct sdchunk {  unsigned long int	sdc_ssrc;	/* SSRC to which chunk refers	*/  char*		        sdc_data;	/* 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;	/* SDES item data		*/};/* Struct for reason in RTCP bye message */struct byereason {  unsigned short bye_length;	/* Length of reason text	*/  char*		 bye_reason;	/* Reason for leaving.		*/};/* Struct for RTCP application-specific message */struct app {  unsigned long int	app_ssrc;	/* SSRC of sender		*/  char		app_name[4];	/* Name specififying app	*/  char*		app_data;	/* Application-specific data	*/};/* API Calls */////int rtcpsendbye(struct session *, char *);int rtcpsendbye(struct session *, char *);int rtcpsend(struct session *, struct rtcp *, int );int rtcpheader(struct rtcp *, int, unsigned char, u32_t);double rtcpcycle(struct session *);double rtcpinitinterval(struct session *);/* Internal Calls */void rtcpprocesschunk(struct session *,  struct netbuf *);///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 *);void rtcpconsumechunk(struct netbuf *);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 *, struct netbuf *);int rtcpsr(struct session *, struct rtcp *, struct netbuf *);int rtcprr(struct session *, struct rtcp *, struct netbuf *);int rtcpsdes(struct session *, struct rtcp *, struct netbuf *);int rtcpbye(struct session *, struct rtcp *, struct netbuf *);int rtcpapp(struct session *, struct rtcp *, struct netbuf *);///void rtcpcyclethreadfcn(struct session *);///void rtcprecvthreadfcn(struct session *);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -