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

📄 rtpmpeglib.cpp

📁 Elementary Stream Guide
💻 CPP
字号:
#include <winsock2.h>/* YUNTAI KYONGAdvanced Internet Serviceterm project*/#include "rtpMPEGLib.h"#include "elementaryStream.h"#include "fileStream.h"#define LARGE_BUFFER_SIZE 300000#define MAX_PAYLOAD_SIZE 5000#define INITIAL_TIME_STAMP 1000#define INITIAL_SEQ_NUM 50typedef struct{	fileStream *fs; 	elementaryStream *e; } argument;static argument arg;static unsigned char buffer[LARGE_BUFFER_SIZE];unsigned char payloadBuffer[MAX_PAYLOAD_SIZE];HANDLE hThread;CSocket *pCsocket;fileStream *fs; elementaryStream *e; DWORD WINAPI ThreadProc(  LPVOID lpParameter ){	fileStream *fs = ((argument*)lpParameter)->fs;	elementaryStream *e = ((argument*)lpParameter)->e;	int headerSize = 8;	int payloadSize;		/* searching starting code */	int ret;	int remainSize;	int seqHeader = 0;	int newPic = 0;	do  {		payloadSize = headerSize;				if( (ret = e->get_sequence_header(buffer,LARGE_BUFFER_SIZE)) == -2 )		{			break;		}		seqHeader = 1;				printf("sequence_header size: %d\n", ret );		memcpy( payloadBuffer+payloadSize, buffer, ret );		payloadSize += ret;		int wRet = 0;		int increment =0;		do  {			if( (ret = e->get_gop_header(buffer,LARGE_BUFFER_SIZE)) == -2 )			{				break;				}			printf("gop_header size: %d\n", ret );						memcpy( payloadBuffer+payloadSize, buffer, ret );			payloadSize += ret;								do {				if( (ret = e->get_picture_header(buffer,LARGE_BUFFER_SIZE)) == -2 )				{					printf("last bits: %d\n", fs->get_bits(4));					//error("fatal: get_picture_header()");					break;				}				newPic = 1;				printf("picture_header size: %d\n", ret );				memcpy( payloadBuffer+payloadSize, buffer, ret );				payloadSize += ret;										if( (ret = e->get_extension(buffer,LARGE_BUFFER_SIZE)) == -2 )				{					//error("fatal: get_extension()");					break;				}								printf("extension_header size: %d\n", ret );				memcpy( payloadBuffer+payloadSize, buffer, ret );				payloadSize += ret;										if( (ret = e->get_slices(buffer,LARGE_BUFFER_SIZE)) == -2 )				{					printf("end of file");					//error("fatal: get_extension()");					break;				}				printf("slices size: %d\n", ret );								remainSize = MAX_PAYLOAD_SIZE - payloadSize;				printf("payloadSize: %d, remainSize: %d\n", payloadSize, remainSize );											while( ret > remainSize )				{					memcpy( payloadBuffer+payloadSize, buffer, remainSize );					if( e->m_pic_type == I_FRAME || e->m_pic_type == P_FRAME )					{						increment = 1;					}					else					{						increment = 0;						e->hold ++;					}										e->getVideoSpecficeHeader( payloadBuffer,0,1,seqHeader,newPic,1 );										e->getMPEG2ExtensionHeader( payloadBuffer+4 );					e->sendRTPpacket(payloadBuffer, increment, 0, MAX_PAYLOAD_SIZE);										ret -= remainSize;					payloadSize = 8;					remainSize = MAX_PAYLOAD_SIZE - payloadSize;				}								if( ret + payloadSize > 0 )				{					memcpy( payloadBuffer+payloadSize, buffer, ret + payloadSize );					e->getVideoSpecficeHeader( payloadBuffer,1,0,seqHeader,newPic,1 );					e->getMPEG2ExtensionHeader( payloadBuffer+4 );					wRet  = e->sendRTPpacket(payloadBuffer, 0, 1,  ret + payloadSize);					printf("wRet: %d\n", wRet );				}				seqHeader = 0;				newPic = 0;				printf("end-of-slices...\n");			} while(fs->next_bits(32, PICTURE_START_CODE )!=-2);		} while(fs->next_bits(32, GROUP_START_CODE)!=-2);	} while(fs->next_bits(32, SEQUENCE_HEADER_CODE)!=-2);	return 1;}int play( FILE *f, unsigned long starting_time, SOCKET sock ){	DWORD threadID;	CSocket *socket;	fileStream *fs; 	elementaryStream *e; 		pCsocket	= new CSocket(sock);	fs		= new fileStream(f);	e		= new elementaryStream(fs, pCsocket,INITIAL_TIME_STAMP, INITIAL_SEQ_NUM);		arg.fs	= fs;	arg.e	= e;		if( !socket || !fs || !e )		return -1;	Sleep( starting_time );		hThread = CreateThread(NULL, 0, ThreadProc, (LPVOID)&arg, 0, &threadID);		return 1;}int stop(){	CloseHandle( hThread );	if( pCsocket )		delete pCsocket;	if( fs )		delete fs;	if( e )		delete e;	return 1;}

⌨️ 快捷键说明

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