如何使用mp4v2解析mp4文件,抽取音视频数据帧【源码】【mp4】【NVR】

前言:

    mp4文件目前已经成为了流媒体音视频行业的通用标准文件格式,它是基于mov格式基础上演变来的,特别适合多平台播放,录制一次,多个平台都可使用。但是,由于mp4格式相对比较复杂,直到mp4v2这个开源工程的出现,解决了这个问题。

    通常,我们在使用mp4文件时,会遇到两个问题:如何从已有的mp4文件中抽取音视频数据帧;如何将音视频数据帧录制成mp4文件,并保持音视频同步。

    首先,我们需要对mp4v2开源库进行编译,源码下载地址如下:

    CSDN:https://download.csdn.net/download/haoyitech/10290353

    mp4v2的开源库提供多种平台的编译,我们要在windows下做演示,选择vs2010编译,vs2010的编译工程又提供多个编译输出,为了避免动态链接库带来的麻烦,我们选择静态lib的方式,调试版:Debug static(MTD),发行版:Release static(MT)。静态lib库的好处是,不用考虑dll加载路径。

    mp4v2\build32\bin\Debug Static (MTd)\libmp4v2D.lib
    mp4v2\build32\bin\Release Static (MT)\libmp4v2.lib

源码下载:

    CSDN:https://download.csdn.net/download/haoyitech/10291430

源码说明:

    开发工具:下载后,请用 VS2010 打开。

    总体思路:准备好标准mp4文件(H264+AAC),使用mp4v2提供的标准API,解析出音视频格式信息,视频需要获取关键的PPS和SPS,音频需要获取采样率、声道、扩展信息等等。

测试需要的mp4文件  => sample_libmp4v2\bin\sample.mp4
mp4v2需要的头文件  => sample_libmp4v2\libmp4v2
mp4v2静态调试库    => sample_libmp4v2\libmp4v2\libmp4v2D.lib
mp4v2静态发行库    => sample_libmp4v2\libmp4v2\libmp4v2.lib
浩一科技代码辅助库 => sample_libmp4v2\common

    注意:在vs2010工程配置当中,需要在预处理定义中加入 MP4V2_EXPORTS,否则,会在编译中出现链接失败的问题。

关键代码:(详见Csample_libmp4v2Dlg)

1、mp4v2提供的调试回调演示:
void myMP4LogCallback( MP4LogLevel loglevel, const char* fmt, va_list ap)
{
	// 组合传递过来的格式...
	CString	strDebug;
	strDebug.FormatV(fmt, ap);
	if( (strDebug.ReverseFind('\r') < 0) && (strDebug.ReverseFind('\n') < 0) ) {
		strDebug.Append("\r\n");
	}
	// 进行格式转换,并打印出来...
	string strANSI = CUtilTool::UTF8_ANSI(strDebug);
	TRACE(strANSI.c_str());
}

// 解析mp4文件...
void Csample_libmp4v2Dlg::OnBnClickedButtonParse()
{
	// 设置MP4调试级别 => 最高最详细级别...
	MP4LogLevel theLevel = MP4LogGetLevel();
	MP4LogSetLevel(MP4_LOG_VERBOSE4);
	MP4SetLogCallback(myMP4LogCallback);
	// 打开MP4文件...
	CString strMP4File;
	MP4FileHandle hMP4Handle = MP4_INVALID_FILE_HANDLE;
	strMP4File.Format("%s\\sample.mp4", CUtilTool::GetExePath((HINSTANCE)NULL).c_str());
	string strUTF8 = CUtilTool::ANSI_UTF8(strMP4File);
	hMP4Handle = MP4Read( strUTF8.c_str() );
	MP4Close(hMP4Handle);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值