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

📄 elementarystream.h

📁 Elementary Stream Guide
💻 H
字号:
/* YUNTAI KYONGAdvanced Internet Serviceterm project*/#ifndef _ELEMENTARY_STREAM_H_#define _ELEMENTARY_STREAM_H_#include <winsock2.h>#include "fileStream.h"#include "socket.h"/* MPEG start and end codes */#define START_CODE_PREFIX		0x000001#define EXTENSION_START_CODE	0x000001b5#define GROUP_START_CODE		0x000001b8#define SEQUENCE_HEADER_CODE	0x000001b3//#define SEQUENCE_END_CODE		0x00000001b7#define SEQUENCE_END_CODE		0x000001b7#define USER_DATA_START_CODE	0x000001b2#define PICTURE_START_CODE		0x00000100#define SLICE_START_CODE_BEGIN	0x00000101#define SLICE_START_CODE_END	0x000001AF#define TRUE 1#define FALSE 0/* Picture type codes */#define I_FRAME 1#define P_FRAME 2#define B_FRAME 3#define D_FRAME 4#define MAX_BLOCKS 1024#define INITIAL_DATA 10240typedef struct _VIDEO_SPECIFIC_HEADER{	/* byte 0,1 */	unsigned int TR:10;			/* Temporal+Reference */	unsigned int T:1;			/* Specific Header Extension */	unsigned int MBZ:5;			/* unused, Must be set zero */	       	/* byte 2,3 */	unsigned int FFC:3;			/* forward_f_code			*/	unsigned int FFV:1;			/* full_pel_forward_vector	*/	unsigned int BFC:3;			/* backward_f_code			*/	unsigned int FBV:1;			/* full_pel_backward_vector */			    unsigned int P:3;			/* Picture-Type				*/	unsigned int E:1;			/* End-of-Slice				*/	unsigned int B:1;			/* Beginning of slice		*/	unsigned int S:1;			/* Sequence_header_present  */	unsigned int N:1;			/* New Picture Header		*/	unsigned int AN:1;			/* Active N Bit				*/	      	} VIDEO_SPECIFIC_HEADER;typedef struct _MPEG2_VIDEO_SPECIFIC_HEADER_EXTENSION{	/* byte 0,1 */	unsigned int backward_vertical_f_code:4;		/* f_[1,1]	*/	unsigned int backward_horizontal_f_code:4;		/* f_[1,0]	*/	unsigned int forward_vertical_f_code:4;			/* f_[0,1]	*/	unsigned int forward_horizontal_f_code:4;		/* f_[0,0]	*/		unsigned int E:1;								/* Extensions present */	unsigned int X:1;								/* Unused	*/			/* byte 2,3 */	unsigned int D:1;								/* composite_display_flag   */	unsigned int G:1;								/* progressive frame   */	unsigned int H:1;								/* chroma_420_type   */	unsigned int R:1;								/* repeat_first_field   */	unsigned int A:1;								/* alternate scan   */	unsigned int V:1;								/* intra_vlc_format   */	unsigned int Q:1;								/* q_scale type   */	unsigned int C:1;								/* concealment_motion_vectors   */	unsigned int P:1;								/* frame_predicted_frame_dct   */	unsigned int T:1;								/* top_field_first  */	unsigned int PS:2;								/* picture_structure  */	unsigned int DC:2;								/* Intra_DC_precision  */} MPEG2_VIDEO_SPECIFIC_HEADER_EXTENSION;/* structures for holding 'sequence_header' information */typedef struct{	unsigned int horizontal_size_value;			//	12	unsigned int vertical_size_value;			//  12	unsigned int aspect_ratio_infomation;		//	4	unsigned int frame_rate_value;				//	4	unsigned int bit_rate_value;				//	18	unsigned int marker_bit;					//	1	unsigned int vbv_buffer_size_value;			//  10	unsigned int constrained_parameters_flag;	//  1		unsigned int load_intra_quantiser_matrix;	//  1	unsigned char intra_quantiser_matrix[64];			unsigned int load_non_intra_quantiser_matrix;	// 1	unsigned char non_intra_quantiser_matrix[64];		unsigned int ext_data_size, user_data_size, sequence_header_size;	unsigned char ext_data[1024], user_data[1024];} sequence_header;typedef struct{	unsigned int temporal_reference;			// 10	unsigned int picture_config_type;			// 3	unsigned int vbv_delay;						// 16	unsigned int full_pel_forward_vector;		// 1	unsigned int forward_f_code;				// 3	unsigned int full_pel_backward_vector;		// 1	unsigned int backward_f_code;				// 3	unsigned int extra_bit_picture;				// 1	unsigned int extra_information_picture;		// 8	unsigned int picture_header_size;} picture_header;typedef struct{	unsigned int extension_ID;				// 4	unsigned int f_code00;					// 4	unsigned int f_code01;					// 4	unsigned int f_code10;					// 4	unsigned int f_code11;					// 4	unsigned int intra_dc_precision;		// 2	unsigned int picture_structure;			// 2	unsigned int top_field_first;			// 1	unsigned int frame_pred_and_frame_dct;	// 1	unsigned int cpmcealment_motion_vectors;// 1	unsigned int q_scale_type;				// 1	unsigned int intra_vic_format;			// 1	unsigned int alternate_scan;			// 1	unsigned int repeat_first_field;		// 1		unsigned int chroma_420_type;			// 1	unsigned int progressive_frame;			// 1	unsigned int composite_display_flag;	// 1		unsigned int v_axis;					// 1		unsigned int field_sequence;			// 3	unsigned int sub_carrier;				// 1	unsigned int burst_amplitude;			// 7	unsigned int sub_carrier_phase;			// 8} extension_header;typedef struct{	unsigned int time_code;	unsigned int closed_gop;	unsigned int broken_link;			unsigned int gop_ext_data_size;	unsigned char gop_ext_data[1024];		unsigned int gop_user_data_size;	unsigned char gop_user_data[1024];	unsigned int gop_size;} gop_header;#define CLOSED_GOP 1#define BROKEN_LINK 2#define MAX_PICTURES 128/* class definition */#define RTP_VERSION 2#define MPV_PAYLOAD 32typedef unsigned char u_char;typedef struct _RTP_HEADER{	/* byte 0 */	u_char csrc_len:4;		/* expect 0 */	u_char extension:1;		/* expect 1, see RTP_OP below */	u_char padding:1;		/* expect 0 */	u_char version:2;		/* expect 2 */	/* byte 1 */	u_char payload:7;		/* RTP_PAYLOAD_RTSP */	u_char marker:1;		/* expect 1 */	/* bytes 2, 3 */	unsigned short seq_no;				/* bytes 4-7 */	unsigned  long timestamp;			/* bytes 8-11 */    unsigned long ssrc;			/* stream number is used here. */} RTP_HEADER;typedef struct _RTP_PACKET{  RTP_HEADER *RTP_header;  unsigned char *payload;         /* payload portion of RTP packet */} RTP_PACKET;class elementaryStream{	public:	elementaryStream(fileStream *fs, CSocket *sock,unsigned long,unsigned short);			int next_start_code(void);	int find_next_start_code(void);		int get_one_slice(unsigned char *payload, int bytesToGo);		int get_sequence_header(unsigned char *payload, int bytesToGo);	int get_picture_header(unsigned char *payload, int bytesToGo);	int get_gop_header( unsigned char *payload, int bytesToGo);	int get_extension(unsigned char *payload, int bytesToGo);		int get_user_data(unsigned char *payload, int bytesToGo);	int get_slices(unsigned char *payload, int bytesToGo);	void print_sequence_header(void);	void print_gop(void);	//void print_picture(int temporal_reference);	void print_picture_header();	void getVideoSpecficeHeader( unsigned char*,int,int,int,int,int);	void getMPEG2ExtensionHeader( unsigned char* );	int sendRTPpacket(unsigned char*,int,int,int);					private:	fileStream *fs;	CSocket *sock;	unsigned short m_seq_num;	unsigned long m_time_stamp;	unsigned long m_stream_num;	unsigned int m_slice_start_code;	sequence_header sequence_h;	gop_header		gop_i;	picture_header	picture_h;	extension_header extension_h;	public:	int m_pic_type;	int hold;};#endif /* _ELEMENTARY_STREAM_H_ */

⌨️ 快捷键说明

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