MP4V2-录制MP4

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

MP4录制程序是根据mpeg4ip中mpeg4ip-1.5.0.1\server\mp4live\file_mp4_recorder.cpp文件改的。程序支持h264+aac(raw流)的写入方式,用到了动态库mp4v2-2.0.0,不要用mpeg4ip中那个较老的版本,因为在录制大文件时会有效率问题,下面是一些mp4v2接口的简介。TAG:MP4录制程序是根据mpeg4ip中mpeg4ip-1.5.0.1\server\mp4live\file_mp4_recorder.cpp文件改的。程序支持h264+aac(raw流)的写入方式,用到了动态库mp4v2-2.0.0,不要用mpeg4ip中那个较老的版本,因为在录制大文件时会有效率问题,下面是一些mp4v2接口的简介。MP4FileHandleMP4Create(constchar*fileName,uint32_tflags)功能:创建MP4文件句柄。返回:MP4文件句柄。参数:fileName要录制的MP4文件名;flags创建文件类型,如果要创建普通文件用默认值0就可以,如要录制大于4G的MP4文件此处要设置MP4_CREATE_64BIT_DATA。boolMP4SetTimeScale(MP4FileHandlehFile,uint32_tvalue)功能:设置时间标度。返回:成功返回true,失败返回false。参数:hFileMP4文件句柄,value要设置的值(每秒的时钟ticks数)。1.MP4TrackIdMP4AddH264VideoTrack(MP4FileHandlehFile,2.uint32_ttimeScale,3.MP4DurationsampleDuration,4.uint16_twidth,5.uint16_theight,6.uint8_tAVCProfileIndication,7.uint8_tprofile_compat,8.uint8_tAVCLevelIndication,9.uint8_tsampleLenFieldSizeMinusOne)功能:添加h264视频track。返回:返回trackid号。参数:hFileMP4文件句柄,timeScale视频每秒的ticks数(如90000),sampleDuration设置为MP4_INVALID_DURATION,widthheight视频的宽高,AVCProfileIndicationprofile(baselineprofile,mainprofile,etc.see),profile_compatcompatibleprofile,AVCLevelIndicationlevels,sampleLenFieldSizeMinusOne设置为3.注意:AVCProfileIndication,profile_compat,AVCLevelIndication,这三个参数值是在h264流中得到的。1.MP4TrackIdMP4AddAudioTrack(2.MP4FileHandlehFile,3.uint32_ttimeScale,4.MP4DurationsampleDuration,5.uint8_taudioType)功能:添加音频(aac)track。返回:返回trackid号。参数:hFileMP4句柄,timeScale音频每秒的ticks数(如16000),下面两参数设置为MP4_INVALID_DURATION和MP4_MPEG4_AUDIO_TYPE。1.boolMP4SetTrackESConfiguration(2.MP4FileHandlehFile,3.MP4TrackIdtrackId,4.constuint8_t*pConfig,5.uint32_tconfigSize);功能:设置音频解码信息(如果设置错误会导致没有声音)。返回:成功返回true,失败返回false。参数:hFile文件句柄,trackId音频的trackid,pConfig记录解码信息的二进制流,configSize解码串的长度。注意:mpeg4ip使用faac进行aac音频编码的,在编码时可以调用相应的函数得到二进制串pConfig和长度configSize,但是如果aac不是用faac编码的,这是需要自己填充pConfig,可以参考faac的实现,下面是一个填充结构例子:前五个字节为AACobjecttypesLOW2接着4个字节为码率index160008接着4个字节为channels个数1应打印出的正确2进制形式为00010|1000|0001|0002811.boolMP4WriteSample(2.MP4FileHandlehFile,3.MP4TrackIdtrackId,4.constuint8_t*pBytes,5.uint32_tnumBytes,6.MP4DurationdurationDEFAULT(MP4_INVALID_DURATION),7.MP4DurationrenderingOffsetDEFAULT(0),8.boolisSyncSampleDEFAULT(true));功能:写一帧视频数据或写一段音频数据。返回:成功返回true,失败返回false。参数:hFile文件句柄,trackId音频或视频的trackid,pBytes为要写的数据流指针,numBytes为数据字节长度,duration为前一视频帧与当前视频帧之间的ticks数,或这是前一段音频数据和当前音频数据之间的ticks。isSyncSample对视频来说是否为关键帧。注意:1,duration这个参数是用来实现音视频同步用的,如果设置错了会造成音视频不同步,甚至会出现crash现象(一般出现在调用MP4Close是crash)。2,对于视频流MP4WriteSample函数每次调用是录制前一帧数据,用当前帧的时间戳和前一帧的时间戳计算duration值,然后把当前帧保存下来用做下次调用MP4WriteSample时用,写音频数据一样。1.voidMP4AddH264SequenceParameterSet(2.MP4FileHandlehFile,3.MP4TrackIdtrackId,4.constuint8_t*pSequence,5.uint16_tsequenceLen);和1.voidMP4AddH264PictureParameterSet(2.MP4FileHandlehFile,3.MP4TrackIdtrackId,4.constuint8_t*pPict,5.uint16_tpictLen);功能:添加序列参数集,添加图像参数集。参数:hFile文件句柄,trackId视频trackid,pSequence和pPict为要写入的序列图像参数集的数据指针,sequenceLen和pictLen为串长度。注意:当检测到序列参数集或图像参数集更新时要调用MP4AddH264SequenceParameterSet或MP4AddH264PictureParameterSet进行更新。1.voidMP4Close(2.MP4FileHandlehFile,3.uint32_tflagsDEFAULT(0));功能:关闭以打开的MP4文件。参数:hFile文件句柄,flags是否允许在关闭MP4文件前做一些额外的优化处理。注意:在录制较小的MP4文件时可以把flags设置为默认值,如果录制较大的文件最好把flags设置为MP4_CLOSE_DO_NOT_COMPUTE_BITRATE否则调用MP4Close函数会用掉很长的时间。

1 / 3
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功