亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? quicktime.c

?? 完整的RTP RTSP代碼庫
?? C
?? 第 1 頁 / 共 3 頁
字號:
#include "quicktime.h"int quicktime_make_streamable(char *in_path, char *out_path){	quicktime_t file, *old_file, new_file;	int moov_exists = 0, mdat_exists = 0, result, atoms = 1;	long mdat_start, mdat_size;	quicktime_atom_t leaf_atom;	long moov_length;		quicktime_init(&file);/* find the moov atom in the old file */		if(!(file.stream = fopen(in_path, "rb")))	{		perror("quicktime_make_streamable");		return 1;	}	fseek(file.stream, 0, SEEK_END);	file.total_length = ftell(file.stream);	fseek(file.stream, 0, SEEK_SET);/* get the locations of moov and mdat atoms */	do	{/*printf("%x\n", quicktime_position(&file)); */		result = quicktime_atom_read_header(&file, &leaf_atom);		if(!result)		{			if(quicktime_atom_is(&leaf_atom, "moov"))			{				moov_exists = atoms;				moov_length = leaf_atom.size;			}			else			if(quicktime_atom_is(&leaf_atom, "mdat"))			{				mdat_start = quicktime_position(&file) - HEADER_LENGTH;				mdat_size = leaf_atom.size;				mdat_exists = atoms;			}			quicktime_atom_skip(&file, &leaf_atom);			atoms++;		}	}while(!result && quicktime_position(&file) < file.total_length);	fclose(file.stream);	if(!moov_exists)	{		printf("quicktime_make_streamable: no moov atom\n");		return 1;	}	if(!mdat_exists)	{		printf("quicktime_make_streamable: no mdat atom\n");		return 1;	}/* copy the old file to the new file */	if(moov_exists && mdat_exists)	{/* moov wasn't the first atom */		if(moov_exists > 1)		{			char *buffer;			long buf_size = 1000000;			result = 0;/* read the header proper */			if(!(old_file = quicktime_open(in_path, 1, 0, 0)))			{				return 1;			}			quicktime_shift_offsets(&(old_file->moov), moov_length);/* open the output file */			if(!(new_file.stream = fopen(out_path, "wb")))			{				perror("quicktime_make_streamable");				result =  1;			}			else			{/* set up some flags */				new_file.wr = 1;				new_file.rd = 0;				quicktime_write_moov(&new_file, &(old_file->moov));				quicktime_set_position(old_file, mdat_start);				if(!(buffer = calloc(1, buf_size)))				{					result = 1;					printf("quicktime_make_streamable: out of memory\n");				}				else				{					while(quicktime_position(old_file) < mdat_start + mdat_size && !result)					{						if(quicktime_position(old_file) + buf_size > mdat_start + mdat_size)							buf_size = mdat_start + mdat_size - quicktime_position(old_file);						if(!quicktime_read_data(old_file, buffer, buf_size)) result = 1;						if(!result)						{							if(!quicktime_write_data(&new_file, buffer, buf_size)) result = 1;						}					}					free(buffer);				}				fclose(new_file.stream);			}			quicktime_close(old_file);		}		else		{			printf("quicktime_make_streamable: header already at 0 offset\n");			return 0;		}	}		return 0;}int quicktime_set_time_scale(quicktime_t *file, int time_scale){	file->moov.mvhd.time_scale = time_scale;}int quicktime_set_copyright(quicktime_t *file, char *string){	quicktime_set_udta_string(&(file->moov.udta.copyright), &(file->moov.udta.copyright_len), string);}int quicktime_set_name(quicktime_t *file, char *string){	quicktime_set_udta_string(&(file->moov.udta.name), &(file->moov.udta.name_len), string);}int quicktime_set_info(quicktime_t *file, char *string){	quicktime_set_udta_string(&(file->moov.udta.info), &(file->moov.udta.info_len), string);}int quicktime_get_time_scale(quicktime_t *file){	return file->moov.mvhd.time_scale;}char* quicktime_get_copyright(quicktime_t *file){	return file->moov.udta.copyright;}char* quicktime_get_name(quicktime_t *file){	return file->moov.udta.name;}char* quicktime_get_info(quicktime_t *file){	return file->moov.udta.info;}int quicktime_get_iod_audio_profile_level(quicktime_t *file){	return file->moov.iods.audioProfileId;}int quicktime_set_iod_audio_profile_level(quicktime_t *file, int id){	quicktime_iods_set_audio_profile(&file->moov.iods, id);}int quicktime_get_iod_video_profile_level(quicktime_t *file){	return file->moov.iods.videoProfileId;}int quicktime_set_iod_video_profile_level(quicktime_t *file, int id){	quicktime_iods_set_video_profile(&file->moov.iods, id);}int quicktime_video_tracks(quicktime_t *file){	int i, result = 0;	for(i = 0; i < file->moov.total_tracks; i++)	{		if(file->moov.trak[i]->mdia.minf.is_video) result++;	}	return result;}int quicktime_audio_tracks(quicktime_t *file){	int i, result = 0;	quicktime_minf_t *minf;	for(i = 0; i < file->moov.total_tracks; i++)	{		minf = &(file->moov.trak[i]->mdia.minf);		if(minf->is_audio)			result++;	}	return result;}int quicktime_set_audio(quicktime_t *file, 						int channels,						long sample_rate,						int bits,						int sample_size,						int time_scale,						int sample_duration,							char *compressor){	int i, j;	quicktime_trak_t *trak;	/* delete any existing tracks */	for(i = 0; i < file->total_atracks; i++) {		for (j = 0; j < file->atracks[i].totalHintTracks; j++) {			quicktime_delete_trak(&(file->moov), 				file->atracks[i].hintTracks[j]);			free(file->atracks[i].hintTracks[j]);			file->atracks[i].hintTracks[j] = NULL;			file->total_hint_tracks--;		}		quicktime_delete_audio_map(&(file->atracks[i]));		quicktime_delete_trak(&(file->moov), file->atracks[i].track);	}	free(file->atracks);	file->atracks = NULL;		file->total_atracks = 0;	if(channels) {		/* Fake the bits parameter for some formats. */		if(quicktime_match_32(compressor, QUICKTIME_ULAW) ||			quicktime_match_32(compressor, QUICKTIME_IMA4)) bits = 16;		file->atracks = (quicktime_audio_map_t*)			calloc(1, sizeof(quicktime_audio_map_t));		trak = quicktime_add_track(&(file->moov));		quicktime_trak_init_audio(file, trak, channels, sample_rate, bits, 			sample_size, time_scale, sample_duration, compressor);		quicktime_init_audio_map(&(file->atracks[0]), trak);		file->atracks[file->total_atracks].track = trak;		file->atracks[file->total_atracks].channels = channels;		file->atracks[file->total_atracks].current_position = 0;		file->atracks[file->total_atracks].current_chunk = 1;		file->total_atracks++;	}	return 1;   /* Return the number of tracks created */}int quicktime_set_video(quicktime_t *file, 						int tracks, 						int frame_w, 						int frame_h,						float frame_rate,						int time_scale,						char *compressor){	int i, j;	quicktime_trak_t *trak;	/* delete any existing tracks */	for(i = 0; i < file->total_vtracks; i++) {		for (j = 0; j < file->vtracks[i].totalHintTracks; j++) {			quicktime_delete_trak(&(file->moov), 				file->vtracks[i].hintTracks[j]);			file->vtracks[i].hintTracks[j] = NULL;			file->total_hint_tracks--;		}		quicktime_delete_video_map(&(file->vtracks[i]));		quicktime_delete_trak(&(file->moov), file->vtracks[i].track);	}	free(file->vtracks);	file->vtracks = NULL;		file->total_vtracks = 0;	if (tracks > 0) {		file->total_vtracks = tracks;		file->vtracks = (quicktime_video_map_t*)calloc(1, sizeof(quicktime_video_map_t) * file->total_vtracks);		for(i = 0; i < tracks; i++)		{			trak = quicktime_add_track(&(file->moov));			quicktime_trak_init_video(file, trak, frame_w, frame_h, frame_rate,				time_scale, compressor);			quicktime_init_video_map(&(file->vtracks[i]), trak);		}	}	return 0;}int quicktime_set_audio_hint(quicktime_t *file, int audioTrack,							char *payloadName, u_int* pPayloadNumber, 							int maxPktSize){	quicktime_audio_map_t* pMap = NULL;	quicktime_trak_t* hintTrak = NULL;	int timeScale;	float frameRate;	int sampleDuration;	char rtpMapBuf[128];	char sdpBuf[256];	/* check our arguments */	if (file == NULL) {		return -1;	}	if (audioTrack < 0 || audioTrack > file->total_atracks) {		return -1;	}	if (payloadName == NULL) {		return -1;	}	pMap = &file->atracks[audioTrack];	timeScale = quicktime_audio_time_scale(file, audioTrack);	if (timeScale == 0) {		return -1;	}	sampleDuration = file->atracks[audioTrack].track->mdia.minf.stbl.stts.table[0].sample_duration;		/* add the hint track */	hintTrak = quicktime_add_track(&(file->moov));	if (*pPayloadNumber == 0) {		(*pPayloadNumber) = 96 + file->total_hint_tracks++;	}	/* initialize it to reference the audio track */	quicktime_trak_init_hint(file, hintTrak, pMap->track, 		maxPktSize, timeScale, sampleDuration);	/* set the payload info */	hintTrak->hint_udta.hinf.payt.payloadNumber = *pPayloadNumber;	sprintf(rtpMapBuf, "%s/%u", payloadName, timeScale);	strcpy(hintTrak->hint_udta.hinf.payt.rtpMapString, rtpMapBuf);	/* set the SDP media section */	sprintf(sdpBuf, 		"m=audio 0 RTP/AVP %u\015\012a=rtpmap:%u %s\015\012a=control:trackID=%u\015\012", 		*pPayloadNumber, *pPayloadNumber, rtpMapBuf, hintTrak->tkhd.track_id);	quicktime_sdp_set(&(hintTrak->hint_udta.hnti.sdp), sdpBuf);	pMap->hintTracks[pMap->totalHintTracks] = hintTrak;	pMap->hintPositions[pMap->totalHintTracks] = 0;	pMap->totalHintTracks++;	return (pMap->totalHintTracks - 1);}int quicktime_set_video_hint(quicktime_t *file, int videoTrack, 						char *payloadName, u_int* pPayloadNumber, 						int maxPktSize){	quicktime_video_map_t* pMap = NULL;	quicktime_trak_t* hintTrak = NULL;	float frameRate;	int timeScale;	int sampleDuration;	char rtpMapBuf[128];	char sdpBuf[1024];	/* check our arguments */	if (file == NULL) {		return -1;	}	if (videoTrack < 0 || videoTrack > file->total_vtracks) {		return -1;	}	if (payloadName == NULL) {		return -1;	}	frameRate = quicktime_video_frame_rate(file, videoTrack);	if (frameRate == 0.0) {		return -1;	}	timeScale = quicktime_video_time_scale(file, videoTrack);	if (timeScale == 0) {		return -1;	}	sampleDuration = timeScale / frameRate;	if (sampleDuration == 0) {		return -1;	}	/* add the hint track */	hintTrak = quicktime_add_track(&(file->moov));	if (*pPayloadNumber == 0) {		(*pPayloadNumber) = 96 + file->total_hint_tracks++;	}	pMap = &file->vtracks[videoTrack];	/* initialize it to reference the video track */	quicktime_trak_init_hint(file, hintTrak, pMap->track, 		maxPktSize, timeScale, sampleDuration);	/* set the payload info */	hintTrak->hint_udta.hinf.payt.payloadNumber = *pPayloadNumber;	sprintf(rtpMapBuf, "%s/90000", payloadName);	strcpy(hintTrak->hint_udta.hinf.payt.rtpMapString, rtpMapBuf);	/* set the SDP media section */	sprintf(sdpBuf, 		"m=video 0 RTP/AVP %u\015\012a=rtpmap:%u %s\015\012a=control:trackID=%u\015\012", 		*pPayloadNumber, *pPayloadNumber, rtpMapBuf, hintTrak->tkhd.track_id);	quicktime_sdp_set(&(hintTrak->hint_udta.hnti.sdp), sdpBuf);	pMap->hintTracks[pMap->totalHintTracks] = hintTrak;	pMap->hintPositions[pMap->totalHintTracks] = 0;	pMap->totalHintTracks++;	return (pMap->totalHintTracks - 1);}char* quicktime_get_session_sdp(quicktime_t *file){	return file->moov.udta.hnti.rtp.string;}int quicktime_set_session_sdp(quicktime_t *file, char* sdpString){	return quicktime_rtp_set(&(file->moov.udta.hnti.rtp), sdpString);}int quicktime_add_audio_sdp(quicktime_t *file, char* sdpString, int track, int hintTrack){	quicktime_trak_t* hintTrak = 		file->atracks[track].hintTracks[hintTrack];	quicktime_sdp_append(&(hintTrak->hint_udta.hnti.sdp), sdpString);}int quicktime_add_video_sdp(quicktime_t *file, char* sdpString, int track, int hintTrack){	quicktime_trak_t* hintTrak = 		file->vtracks[track].hintTracks[hintTrack];	quicktime_sdp_append(&(hintTrak->hint_udta.hnti.sdp), sdpString);}static int quicktime_set_media_hint_max_rate(quicktime_t *file, 	int granularity, int maxBitRate, quicktime_trak_t* hintTrak){	hintTrak->hint_udta.hinf.maxr.granularity = granularity;	hintTrak->hint_udta.hinf.maxr.maxBitRate = maxBitRate;	hintTrak->mdia.minf.hmhd.maxbitrate = maxBitRate;	/* Give upper bound on MP4 max bitrate for 1 minute window */	hintTrak->mdia.minf.hmhd.slidingavgbitrate = 		maxBitRate * (60000 / granularity);	return 0;}int quicktime_set_audio_hint_max_rate(quicktime_t *file, 	int granularity, int maxBitRate, int audioTrack, int hintTrack){	quicktime_trak_t* hintTrak = 		file->atracks[audioTrack].hintTracks[hintTrack];	return quicktime_set_media_hint_max_rate(file,		granularity, maxBitRate, hintTrak);}int quicktime_set_video_hint_max_rate(quicktime_t *file, 	int granularity, int maxBitRate, int videoTrack, int hintTrack){	quicktime_trak_t* hintTrak = 		file->vtracks[videoTrack].hintTracks[hintTrack];	return quicktime_set_media_hint_max_rate(file,		granularity, maxBitRate, hintTrak);}int quicktime_set_framerate(quicktime_t *file, float framerate){	int i;	int new_time_scale, new_sample_duration;	new_time_scale = quicktime_get_timescale(framerate);	new_sample_duration = (int)((float)new_time_scale / framerate + 0.5);	for(i = 0; i < file->total_vtracks; i++)	{		file->vtracks[i].track->mdia.mdhd.time_scale = new_time_scale;		file->vtracks[i].track->mdia.minf.stbl.stts.table[0].sample_duration = new_sample_duration;	}}quicktime_trak_t* quicktime_add_track(quicktime_moov_t *moov){	quicktime_trak_t *trak;	trak = moov->trak[moov->total_tracks] = calloc(1, sizeof(quicktime_trak_t));	quicktime_trak_init(trak);	trak->tkhd.track_id = moov->mvhd.next_track_id;	moov->mvhd.next_track_id++;	moov->total_tracks++;	return trak;}/* ============================= Initialization functions */int quicktime_init(quicktime_t *file){	memset(file, 0, sizeof(quicktime_t));	quicktime_mdat_init(&(file->mdat));	quicktime_moov_init(&(file->moov));	file->cpus = 1;	return 0;}int quicktime_delete(quicktime_t *file){	int i;	if(file->total_atracks) 	{		for(i = 0; i < file->total_atracks; i++)			quicktime_delete_audio_map(&(file->atracks[i]));		free(file->atracks);	}	if(file->total_vtracks)	{		for(i = 0; i < file->total_vtracks; i++)			quicktime_delete_video_map(&(file->vtracks[i]));		free(file->vtracks);	}	file->total_atracks = 0;	file->total_vtracks = 0;	if(file->preload_size)	{		free(file->preload_buffer);		file->preload_size = 0;	}	quicktime_moov_delete(&(file->moov));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色激情天天射综合网| 一本色道久久综合狠狠躁的推荐| 国产一区二区三区黄视频| 成人av动漫在线| 欧美一区二区久久久| 亚洲精品日产精品乱码不卡| 狠狠狠色丁香婷婷综合激情| 欧美日韩一区高清| 亚洲私人黄色宅男| 成人午夜视频在线观看| 日韩欧美成人一区二区| 亚洲成av人片一区二区| 91丨九色丨尤物| 日本一区二区三区dvd视频在线| 午夜视频一区在线观看| 91免费版在线| 国产精品女主播在线观看| 91蝌蚪porny九色| 国产亚洲午夜高清国产拍精品| 免费人成在线不卡| 7777精品伊人久久久大香线蕉| 亚洲精品成人在线| 91丨porny丨国产入口| 久久亚洲一区二区三区明星换脸 | 久久精品亚洲精品国产欧美kt∨| 成人欧美一区二区三区1314| 国产91丝袜在线播放九色| 久久久久久久久97黄色工厂| 美女免费视频一区| 精品欧美乱码久久久久久| 美女网站色91| 精品少妇一区二区三区在线播放| 美女一区二区三区| 欧美va日韩va| 国产精品亚洲视频| 国产女人18毛片水真多成人如厕 | 日韩中文字幕亚洲一区二区va在线| 91麻豆swag| 亚洲男人的天堂网| 欧美在线观看一区二区| 亚洲国产精品久久久久秋霞影院| 欧美羞羞免费网站| 亚洲r级在线视频| 这里是久久伊人| 久久爱另类一区二区小说| 精品sm在线观看| 成人av网在线| 天涯成人国产亚洲精品一区av| 日韩一区二区高清| 国产一区91精品张津瑜| 国产精品久久国产精麻豆99网站 | 亚洲色图一区二区| 欧美伊人久久久久久久久影院| 午夜精品久久久| 日韩女优电影在线观看| 国产 欧美在线| 亚洲一区二区三区在线| 日韩一级二级三级精品视频| 国产福利一区二区三区视频| 亚洲欧洲综合另类在线| 欧美一区二区福利在线| 国产成人免费高清| 亚洲一二三区不卡| 精品国产一区二区三区忘忧草| 成人网在线免费视频| 亚洲国产精品精华液网站| 久久久久久久精| 欧美婷婷六月丁香综合色| 国产最新精品免费| 亚洲永久精品国产| 久久久久久久网| 欧美另类z0zxhd电影| 久久免费美女视频| 91久久线看在观草草青青| 国产精品亚洲第一区在线暖暖韩国 | 日韩欧美你懂的| 91一区一区三区| 国内精品自线一区二区三区视频| 亚洲乱码日产精品bd| 久久亚洲春色中文字幕久久久| 欧美亚洲综合在线| 成人午夜av电影| 免费不卡在线观看| 亚洲午夜久久久久久久久电影网| 日本一区二区三区dvd视频在线| 欧美疯狂做受xxxx富婆| 99久精品国产| 东方欧美亚洲色图在线| 久久丁香综合五月国产三级网站| 亚洲在线成人精品| 国产精品情趣视频| 久久这里都是精品| 日韩欧美成人激情| 欧美精品日韩综合在线| 欧美午夜一区二区三区免费大片| 成人免费毛片嘿嘿连载视频| 久久精品免费看| 日本不卡不码高清免费观看| 亚洲男人天堂av网| 亚洲女女做受ⅹxx高潮| 欧美韩国日本综合| 日本一区二区三区久久久久久久久不 | 亚洲福利电影网| 亚洲视频一区在线| 国产精品久久久久影院老司| 久久久久综合网| 精品三级av在线| 欧美一级国产精品| 欧美一区二区三区男人的天堂| 欧美三级日韩在线| 欧美日韩亚洲丝袜制服| 欧美日韩亚洲综合在线| 欧美日韩视频专区在线播放| 欧美日韩免费不卡视频一区二区三区| 91香蕉视频mp4| 94-欧美-setu| 欧美伊人久久久久久久久影院 | 亚洲视频在线一区二区| 国产精品久久三| 精品国产一区二区三区不卡| 日韩欧美中文一区二区| 91精品在线一区二区| 欧美一级黄色片| 精品欧美一区二区久久| 久久久久97国产精华液好用吗| 久久精品免视看| 国产欧美日韩一区二区三区在线观看| 国产视频一区二区在线| 国产精品国模大尺度视频| 亚洲伦理在线免费看| 午夜欧美视频在线观看| 精品一区二区三区免费视频| 国产黄色成人av| 99精品视频一区二区| 在线观看国产日韩| 日韩三级视频在线观看| 国产欧美日韩在线| 一区二区三区四区在线免费观看 | 久久久久久亚洲综合| 成人免费一区二区三区视频| 亚洲综合色噜噜狠狠| 麻豆精品一区二区综合av| 国产精品一二三| 欧美色图在线观看| 精品美女一区二区三区| 亚洲欧美日韩国产综合| 免费亚洲电影在线| 99精品一区二区三区| 日韩欧美国产系列| 中文字幕一区二区三区蜜月| 爽好久久久欧美精品| 国产高清无密码一区二区三区| 日本韩国精品在线| 久久精品亚洲麻豆av一区二区 | 日本高清成人免费播放| 日韩三级伦理片妻子的秘密按摩| 国产精品午夜免费| 日韩在线观看一区二区| 成人av在线资源网站| 日韩欧美视频一区| 一区二区三区加勒比av| 国产另类ts人妖一区二区| 欧洲一区二区三区在线| 日本一区二区三区电影| 日韩高清在线电影| 91啪在线观看| 国产免费成人在线视频| 天堂成人免费av电影一区| av动漫一区二区| 精品国产免费视频| 亚洲国产综合人成综合网站| 国产高清不卡一区二区| 日韩久久久久久| 亚洲成av人片| 91久久香蕉国产日韩欧美9色| 国产欧美综合色| 久久疯狂做爰流白浆xx| 在线成人免费视频| 亚洲国产综合在线| 91免费国产在线观看| 国产精品久久久久永久免费观看 | 精品三级在线看| 国产欧美日产一区| 日韩制服丝袜先锋影音| 在线观看一区二区视频| 国产精品高潮呻吟久久| 国产suv精品一区二区6| 欧美成人a∨高清免费观看| 视频一区在线播放| 欧美日韩精品欧美日韩精品一| 亚洲欧美日韩国产另类专区| www.亚洲色图.com| 亚洲欧美日韩精品久久久久| 成年人国产精品| 国产精品国产自产拍高清av | 亚洲国产一区二区视频| 色婷婷综合久久久久中文一区二区| 国产精品网站导航| 成人av免费在线| 亚洲久草在线视频|