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

📄 mp4.cpp

📁 完整的RTP RTSP代码库
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	return rc;}extern "C" bool MP4EncAndCopySample(	MP4FileHandle srcFile,	MP4TrackId srcTrackId, 	MP4SampleId srcSampleId,        encryptFunc_t encfcnp,        u_int32_t encfcnparam1,	MP4FileHandle dstFile,	MP4TrackId dstTrackId,	MP4Duration dstSampleDuration){	bool rc;	u_int8_t* pBytes = NULL; 	u_int32_t numBytes = 0;	u_int8_t* encSampleData = NULL;	u_int32_t encSampleLength = 0;	MP4Duration sampleDuration;	MP4Duration renderingOffset;	bool isSyncSample;	// Note: we leave it up to the caller to ensure that the	// source and destination tracks are compatible.	// i.e. copying audio samples into a video track 	// is unlikely to do anything useful	rc = MP4ReadSample(		srcFile,		srcTrackId,		srcSampleId,		&pBytes,		&numBytes,		NULL,		&sampleDuration,		&renderingOffset,		&isSyncSample);	if (!rc) {		return false;	}	if (dstFile == MP4_INVALID_FILE_HANDLE) {		dstFile = srcFile;	}	if (dstTrackId == MP4_INVALID_TRACK_ID) {		dstTrackId = srcTrackId;	}	if (dstSampleDuration != MP4_INVALID_DURATION) {		sampleDuration = dstSampleDuration;	}        //if (ismacrypEncryptSampleAddHeader(ismaCryptSId, numBytes, pBytes,        //                        &encSampleLength, &encSampleData) != 0) {        if (encfcnp(encfcnparam1, numBytes, pBytes,				&encSampleLength, &encSampleData) != 0) {		fprintf(stderr,			"Can't encrypt the sample and add its header %u\n",			srcSampleId);	}		rc = MP4WriteSample(		dstFile,                dstTrackId,                encSampleData,                encSampleLength,                sampleDuration,                renderingOffset,                isSyncSample);			free(pBytes);	if (encSampleData != NULL) {	          free(encSampleData);        }		return rc;}extern "C" bool MP4ReferenceSample(	MP4FileHandle srcFile,	MP4TrackId srcTrackId, 	MP4SampleId srcSampleId,	MP4FileHandle dstFile,	MP4TrackId dstTrackId,	MP4Duration dstSampleDuration){	// LATER Not yet implemented	return false;}extern "C" u_int32_t MP4GetSampleSize(	MP4FileHandle hFile,	MP4TrackId trackId, 	MP4SampleId sampleId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetSampleSize(				trackId, sampleId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return 0;}extern "C" u_int32_t MP4GetTrackMaxSampleSize(	MP4FileHandle hFile,	MP4TrackId trackId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetTrackMaxSampleSize(trackId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return 0;}extern "C" MP4SampleId MP4GetSampleIdFromTime(	MP4FileHandle hFile,	MP4TrackId trackId, 	MP4Timestamp when, 	bool wantSyncSample){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetSampleIdFromTime(				trackId, when, wantSyncSample);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return MP4_INVALID_SAMPLE_ID;}extern "C" MP4Timestamp MP4GetSampleTime(	MP4FileHandle hFile,	MP4TrackId trackId, 	MP4SampleId sampleId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetSampleTime(				trackId, sampleId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return MP4_INVALID_TIMESTAMP;}extern "C" MP4Duration MP4GetSampleDuration(	MP4FileHandle hFile,	MP4TrackId trackId, 	MP4SampleId sampleId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetSampleDuration(				trackId, sampleId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return MP4_INVALID_DURATION;}extern "C" MP4Duration MP4GetSampleRenderingOffset(	MP4FileHandle hFile,	MP4TrackId trackId, 	MP4SampleId sampleId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetSampleRenderingOffset(				trackId, sampleId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return MP4_INVALID_DURATION;}extern "C" bool MP4SetSampleRenderingOffset(	MP4FileHandle hFile,	MP4TrackId trackId, 	MP4SampleId sampleId,	MP4Duration renderingOffset){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->SetSampleRenderingOffset(				trackId, sampleId, renderingOffset);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return false;}extern "C" int8_t MP4GetSampleSync(	MP4FileHandle hFile,	MP4TrackId trackId, 	MP4SampleId sampleId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetSampleSync(				trackId, sampleId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return -1;}extern "C" u_int64_t MP4ConvertFromMovieDuration(	MP4FileHandle hFile,	MP4Duration duration,	u_int32_t timeScale){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->ConvertFromMovieDuration(				duration, timeScale);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return (u_int64_t)MP4_INVALID_DURATION;}extern "C" u_int64_t MP4ConvertFromTrackTimestamp(	MP4FileHandle hFile,	MP4TrackId trackId, 	MP4Timestamp timeStamp,	u_int32_t timeScale){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->ConvertFromTrackTimestamp(				trackId, timeStamp, timeScale);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return (u_int64_t)MP4_INVALID_TIMESTAMP;}extern "C" MP4Timestamp MP4ConvertToTrackTimestamp(	MP4FileHandle hFile,	MP4TrackId trackId, 	u_int64_t timeStamp,	u_int32_t timeScale){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->ConvertToTrackTimestamp(				trackId, timeStamp, timeScale);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return MP4_INVALID_TIMESTAMP;}extern "C" u_int64_t MP4ConvertFromTrackDuration(	MP4FileHandle hFile,	MP4TrackId trackId, 	MP4Duration duration,	u_int32_t timeScale){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->ConvertFromTrackDuration(				trackId, duration, timeScale);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return (u_int64_t)MP4_INVALID_DURATION;}extern "C" MP4Duration MP4ConvertToTrackDuration(	MP4FileHandle hFile,	MP4TrackId trackId, 	u_int64_t duration,	u_int32_t timeScale){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->ConvertToTrackDuration(				trackId, duration, timeScale);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return MP4_INVALID_DURATION;}extern "C" bool MP4GetHintTrackRtpPayload(	MP4FileHandle hFile,	MP4TrackId hintTrackId,	char** ppPayloadName,	u_int8_t* pPayloadNumber,	u_int16_t* pMaxPayloadSize,	char **ppEncodingParams){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->GetHintTrackRtpPayload(				hintTrackId, ppPayloadName, pPayloadNumber, pMaxPayloadSize,				ppEncodingParams);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return false;}extern "C" bool MP4SetHintTrackRtpPayload(	MP4FileHandle hFile,	MP4TrackId hintTrackId,	const char* pPayloadName,	u_int8_t* pPayloadNumber,	u_int16_t maxPayloadSize,	const char *encode_params,	bool include_rtp_map,	bool include_mpeg4_esid){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->SetHintTrackRtpPayload(				hintTrackId, pPayloadName, pPayloadNumber, maxPayloadSize, encode_params,				include_rtp_map, include_mpeg4_esid);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return false;}extern "C" const char* MP4GetSessionSdp(	MP4FileHandle hFile){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetSessionSdp();		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return NULL;}extern "C" bool MP4SetSessionSdp(	MP4FileHandle hFile,	const char* sdpString){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->SetSessionSdp(sdpString);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return false;}extern "C" bool MP4AppendSessionSdp(	MP4FileHandle hFile,	const char* sdpString){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->AppendSessionSdp(sdpString);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return false;}extern "C" const char* MP4GetHintTrackSdp(	MP4FileHandle hFile,	MP4TrackId hintTrackId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetHintTrackSdp(hintTrackId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return NULL;}extern "C" bool MP4SetHintTrackSdp(	MP4FileHandle hFile,	MP4TrackId hintTrackId,	const char* sdpString){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->SetHintTrackSdp(hintTrackId, sdpString);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return false;}extern "C" bool MP4AppendHintTrackSdp(	MP4FileHandle hFile,	MP4TrackId hintTrackId,	const char* sdpString){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->AppendHintTrackSdp(hintTrackId, sdpString);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return false;}extern "C" MP4TrackId MP4GetHintTrackReferenceTrackId(	MP4FileHandle hFile,	MP4TrackId hintTrackId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->				GetHintTrackReferenceTrackId(hintTrackId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return MP4_INVALID_TRACK_ID;}extern "C" bool MP4ReadRtpHint(	MP4FileHandle hFile,	MP4TrackId hintTrackId,	MP4SampleId hintSampleId,	u_int16_t* pNumPackets){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->ReadRtpHint(				hintTrackId, hintSampleId, pNumPackets);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return false;}extern "C" u_int16_t MP4GetRtpHintNumberOfPackets(	MP4FileHandle hFile,	MP4TrackId hintTrackId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetRtpHintNumberOfPackets(hintTrackId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return 0;}extern "C" int8_t MP4GetRtpPacketBFrame(	MP4FileHandle hFile,	MP4TrackId hintTrackId,	u_int16_t packetIndex){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->				GetRtpPacketBFrame(hintTrackId, packetIndex);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return -1;}extern "C" int32_t MP4GetRtpPacketTransmitOffset(	MP4FileHandle hFile,	MP4TrackId hintTrackId,	u_int16_t packetIndex){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->				GetRtpPacketTransmitOffset(hintTrackId, packetIndex);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return 0;}extern "C" bool MP4ReadRtpPacket(	MP4FileHandle hFile,	MP4TrackId hintTrackId,	u_int16_t packetIndex,	u_int8_t** ppBytes, 	u_int32_t* pNumBytes,	u_int32_t ssrc,	bool includeHeader,	bool includePayload){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			((MP4File*)hFile)->ReadRtpPacket(				hintTrackId, packetIndex, 				ppBytes, pNumBytes, 				ssrc, includeHeader, includePayload);			return true;		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return false;}extern "C" MP4Timestamp MP4GetRtpTimestampStart(	MP4FileHandle hFile,	MP4TrackId hintTrackId){	if (MP4_IS_VALID_FILE_HANDLE(hFile)) {		try {			return ((MP4File*)hFile)->GetRtpTimestampStart(hintTrackId);		}		catch (MP4Error* e) {			PRINT_ERROR(e);			delete e;		}	}	return MP4_INVALID_TIMESTAMP;}ext

⌨️ 快捷键说明

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