SkeyePlayer源码解析系列之录像写MP4

SkeyePlayer利用GPAC的MP4Box在Windows上封装MP4。本文介绍MP4创建、写入视频H264 SPS/PPS头、音频AAC头以及写入H264帧和AAC数据到MP4的过程。注意在写入过程中,正确处理SPS/PPS、音频轨道和视频轨道,确保播放兼容性。
摘要由CSDN通过智能技术生成

SkeyePlayer(Windows)中录像采用GPAC的MP4Box库来封装MP4,下面我将简单介绍MP4的封装调用流程和需要注意的点;

一、GPAC库的编译,GPAC是跨平台的库,windows和linux都能很方便多编译,再次不做过多赘述,大家可去GPAC官网或者Github上下载;

二、创建MP4

bool SkeyeMP4Writer::CreateMP4File(char*filename,int flag)
{
	SaveFile();
	m_audiostartimestamp=-1;
	m_videostartimestamp=-1;
	if(filename==NULL)
	{
		char filename2[256]={0};
		sprintf(filename2,"%d-gpac%d.mp4",time(NULL),rand());
		p_file=gf_isom_open(filename2,GF_ISOM_OPEN_WRITE,NULL);//打开文件
	}else
		p_file=gf_isom_open(filename,GF_ISOM_OPEN_WRITE,NULL);//打开文件

	if (p_file==NULL)
	{
		return false;
	}

	gf_isom_set_brand_info(p_file,GF_ISOM_BRAND_MP42,0);

	//if(flag&ZOUTFILE_FLAG_VIDEO)
	//{
	//	m_videtrackid=gf_isom_new_track(p_file,0,GF_ISOM_MEDIA_VISUAL,1000);
	//	gf_isom_set_track_enabled(p_file,m_videtrackid,1);
	//}
	//if(flag&ZOUTFILE_FLAG_AUDIO)
	//{
	//	m_audiotrackid=gf_isom_new_track(p_file,0,GF_ISOM_MEDIA_AUDIO,1000);
	//	gf_isom_set_track_enabled(p_file,m_audiotrackid,1);
	//}
	m_nCreateFileFlag = flag;

	return true;
}

创建MP4很简单,调用gf_isom_open函数就能轻松搞定,gf_isom_set_brand_info函数设置当前写MP4的版本为MP4V2;值得注意的地方是:
1>. 创建文件之前需要对所有的参数进行初始化,以及如果文件正在写入则需要将其关闭,这个操作主要是32位程序写的MP4文件大于4G可能出现不能播放的问题,为了方便写MP4文件进行分片,这个将在系列文章后续中进行讲解;
2>. 大家可以看到上段代码有屏蔽了部分代码flag&ZOUTFILE_FLAG_VIDEO和flag&ZOUTFILE_FLAG_AUDIO的判断,这两段代码是用来在MP4文件中创建音频轨和视频轨(默认各只创建一个),请注意:如果这里已经创建了音频和视频轨,然而后续的写入过程中如果只写音频或者视频的话,某些播放器可能是播不出来的(比如windows自带的播放器),所以,如果只写音频的话只需要创建音频轨就可以了,视频同理。

三、写入视频H264的SPS和PPS头信息

bool SkeyeMP4Writer::WriteH264SPSandPPS(unsigned char*sps,int spslen,unsigned char*pps,int ppslen,int width,int height)
{	
	if
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SwordTwelve

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值