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

📄 rtsp_func.h

📁 RTSP状态机
💻 H
字号:
#define RTSP_BUFFERSIZE 4096
#define MAX_DESCR_LENGTH 4096
#define RTP_DEFAULT_PORT 5004
#define RTCP_BUFFERSIZE	1024

/************************* RTP ******************************/
typedef struct _RTCP_stats {
	unsigned int RR_received;
	unsigned int SR_received;
	unsigned long dest_SSRC;
	unsigned int pkt_count;
	unsigned int octet_count;
	int pkt_lost;
	unsigned char fract_lost;
	unsigned int highest_seq_no;
	unsigned int jitter;
	unsigned int last_SR;
	unsigned int delay_since_last_SR;
} RTCP_stats;


typedef struct _RTP_transport {
	enum {
		RTP_no_transport=0,
		RTP_rtp_avp,
		RTP_rtp_avp_tcp
	} type;
	tsocket rtp_fd;
	tsocket rtcp_fd_out;
	tsocket rtcp_fd_in;
	union {
		struct {
			struct sockaddr rtp_peer;
			struct sockaddr rtcp_in_peer;
			struct sockaddr rtcp_out_peer;
			port_pair cli_ports;
			port_pair ser_ports;
			unsigned char is_multicast;
		} udp;
		struct {
			port_pair interleaved;
		} tcp;
		// other trasports here
	} u;
} RTP_transport;

typedef struct _RTP_session {
	RTP_transport transport;
	unsigned char rtcp_inbuffer[RTCP_BUFFERSIZE];
	int rtcp_insize;
	unsigned char rtcp_outbuffer[RTCP_BUFFERSIZE];
	uint32 rtcp_outsize;

	double mprev_tx_time;
	unsigned int PreviousCount;
	short MinimumReached;
	short MaximumReached;
	// Back references
	int sched_id;
	unsigned int start_seq;
	
	unsigned int start_rtptime;    	
	
	unsigned char pause;
	//this var is in media_entry structure
	unsigned char started;

	unsigned int seq;
	unsigned int ssrc;

	char sd_filename[255];
	media_entry *current_media;
	SD_descr *sd_descr;
	
	//Consumer has transferred itself here
	OMSConsumer *cons;
	RTCP_stats rtcp_stats[2]; //client e server
	struct _RTP_session *next;
	unsigned char is_multicast_dad;/*if is it an multicast son it cannot do TEARDOWN etc...*/
} RTP_session;

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;

/************************* RTSP ******************************/
typedef struct _RTSP_session {
	int cur_state;    	
	int session_id;
	RTP_session *rtp_session;
	struct _RTSP_session *next;
} RTSP_session;

typedef struct _RTSP_buffer {
	tsocket fd;
	unsigned int port;
		// Buffers    	
		char in_buffer[RTSP_BUFFERSIZE];
		unsigned int in_size;
		char out_buffer[RTSP_BUFFERSIZE+MAX_DESCR_LENGTH];
		int out_size;		
		// Run-Time
		unsigned int rtsp_cseq;
		char descr[MAX_DESCR_LENGTH];		// La descrizione
		RTSP_session *session_list;
		struct _RTSP_buffer *next;
} RTSP_buffer;

⌨️ 快捷键说明

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