首先下载源码 https://github.com/TechSmith/mp4v2
其次按照INSTALL文档交叉编译./configure --prefix=/work1/mynfs/openSource/mp4v2_lib --host=arm CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ AR=arm-linux-gnueabihf-ar STRIP=arm-linux-gnueabihf-strip --enable-shared
有些交叉编译器不支持动态库, 静态库有34M, 不过不用担心,strip后很小,就1M
编完后就调用几个接口就好了
初始化时调用一下接口:
piMp4Handle =
MP4CreateEx(acTmpFilename, 0, 1, 1, 0, 0, 0, 0);
MP4SetTimeScale(piMp4Handle, 90000);
iVideoId = MP4AddH265VideoTrack(piMp4Handle, timeScale,
timeScale/25, tH264Info.iVideoWidth, ptRecordParam->tH264Info.iVideoHeight, 0x20,
0x21, 0x22, 3);
MP4SetVideoProfileLevel(piMp4Handle, 1);
MP4AddH265VideoParameterSet(piMp4Handle, iVideoId,
(const UINT8*)(ptRecordParam->tH264Info.acVpsData+4),tH264Info.iVpsDataSize-4);
MP4AddH265SequenceParameterSet(piMp4Handle, iVideoId,
(const UINT8*)(tH264Info.acSpsData+4), H264Info.iSpsDataSize-4);
MP4AddH265PictureParameterSet(piMp4Handle, iVideoId,
(const UINT8*)(tH264Info.acPpsData+4),tH264Info.iPpsDataSize-4);
要注意时间戳, vps等数据不能带nalu头。
获取到流时调用以下接口:
if (iLen > 4)
{
pTmp = (UINT32 *)(&pframe[0]);
*pTmp = htonl(iLen - 4);//mp4中的h264track,头四个字节要求是NAL的长度,并且是大端顺序;
}
iRet = MP4WriteSample(piMp4Handle, iVideoId, pframe, iLen,
((dTimestamp - dVideoFirstTimestamp) * 3000), 0, 1);
如果想要mp4调试工具及264 265 yuv mp4的h265测试文件, 还打包了Mp4v2源码 mp4reader 请下载资源https://download.csdn.net/download/a407993566a/87898879?spm=1001.2014.3001.5501