织梦CMS - 轻松建站从此开始!

罗索

mp4v2 mp4录制

落鹤生 发布于 2013-05-15 09:52 点击:次 
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接 口的简介。

MP4FileHandle MP4Create (const char* fileName,uint32_t  flags)
功能:创建MP4文件句柄。
 返回:MP4文件句柄。
 参数:fileName 要录制的MP4文件名;flags 创建文件类型,如果要创建普通文件用默认值0就可以,如要录制大于4G的MP4文件此处要设置MP4_CREATE_64BIT_DATA。

bool MP4SetTimeScale( MP4FileHandle hFile, uint32_t value )
功能:设置时间标度。
返回:成功返回true,失败返回false。
参数:hFile MP4文件句柄,value 要设置的值(每秒的时钟ticks数)。

  1. MP4TrackId MP4AddH264VideoTrack(MP4FileHandle hFile, 
  2.                                      uint32_t timeScale, 
  3.                                      MP4Duration sampleDuration, 
  4.                                      uint16_t width, 
  5.                                       uint16_t height, 
  6.                                      uint8_t AVCProfileIndication, 
  7.                                      uint8_t profile_compat, 
  8.                                      uint8_t AVCLevelIndication, 
  9.                                      uint8_t sampleLenFieldSizeMinusOne) 

功能:添加h264视频track。
返回:返回track id号。
参数:hFile MP4文件句柄,timeScale 视频每秒的ticks数(如90000),sampleDuration 设置为 MP4_INVALID_DURATION,width height 视频的宽高,AVCProfileIndication profile (baseline profile, main profile, etc. see),profile_compat compatible profile,AVCLevelIndication levels,sampleLenFieldSizeMinusOne 设置为3.
注意: AVCProfileIndication,profile_compat, AVCLevelIndication,这三个参数值是在h264流中得到的。

  1. MP4TrackId MP4AddAudioTrack( 
  2.         MP4FileHandle hFile, 
  3.         uint32_t timeScale, 
  4.         MP4Duration sampleDuration, 
  5.         uint8_t audioType) 

 功能:添加音频(aac)track。
 返回:返回track id号。
 参数:hFile MP4句柄,timeScale音频每秒的ticks数(如16000),下面两参数设置为MP4_INVALID_DURATION和MP4_MPEG4_AUDIO_TYPE。

  1. bool MP4SetTrackESConfiguration( 
  2.        MP4FileHandle  hFile, 
  3.        MP4TrackId     trackId, 
  4.        const uint8_t* pConfig, 
  5.        uint32_t       configSize ); 

 功能:设置音频解码信息(如果设置错误会导致没有声音)。
 返回:成功返回true,失败返回false。
 参数:hFile 文件句柄,trackId 音频的track id,pConfig 记录解码信息的二进制流,configSize 解码串的长度。
 注意:mpeg4ip 使用faac进行aac音频编码的,在编码时可以调用相应的函数得到二进制串pConfig和长度configSize,但是如果aac不是用faac编码的,这是需要自己填充pConfig,可以参考faac的实现,下面是一个填充结构例子:
 
前五个字节为 AAC object types  LOW     2
接着4个字节为 码率index        16000      8
接着4个字节为 channels 个数                 1
应打印出的正确2进制形式为  00010 | 1000 | 0001 | 000
                                                            2          8        1

  1. bool MP4WriteSample( 
  2.     MP4FileHandle  hFile, 
  3.     MP4TrackId     trackId, 
  4.     const uint8_t* pBytes, 
  5.     uint32_t       numBytes, 
  6.     MP4Duration    duration DEFAULT(MP4_INVALID_DURATION), 
  7.     MP4Duration    renderingOffset DEFAULT(0), 
  8.     bool           isSyncSample DEFAULT(true) ); 

功能:写一帧视频数据或写一段音频数据。
返回:成功返回true,失败返回false。
参数:hFile 文件句柄,trackId 音频或视频的track id,pBytes为要写的数据流指针,numBytes为数据字节长度,duration为前一视频帧与当前视频帧之间的ticks数,或这是前一段音 频数据和当前音频数据之间的ticks。isSyncSample 对视频来说是否为关键帧。
注意:1,duration这个参数是用来实现音视频同步用的,如果设置错了会造成音视频不同步,甚至会出现crash现象(一般出现在调用 MP4Close是crash)。 2,对于视频流MP4WriteSample函数每次调用是录制前一帧数据,用当前帧的时间戳和前一帧的时间戳计算duration值,然后把当前帧保存 下来用做下次调用MP4WriteSample时用,写音频数据一样。

  1. void MP4AddH264SequenceParameterSet( 
  2.     MP4FileHandle  hFile, 
  3.     MP4TrackId     trackId, 
  4.     const uint8_t* pSequence, 
  5.     uint16_t       sequenceLen ); 

  1. void MP4AddH264PictureParameterSet( 
  2.     MP4FileHandle  hFile, 
  3.     MP4TrackId     trackId, 
  4.     const uint8_t* pPict, 
  5.     uint16_t       pictLen ); 

功能:添加序列参数集,添加图像参数集。
参数:hFile 文件句柄,trackId 视频track id,pSequence和pPict为要写入的序列图像参数集的数据指针,sequenceLen和pictLen为串长度。
注意:当检测到序列参数集或图像参数集更新时要调用MP4AddH264SequenceParameterSet或MP4AddH264PictureParameterSet进行更新。

  1. void MP4Close( 
  2.     MP4FileHandle hFile, 
  3.     uint32_t    flags DEFAULT(0) ); 

功能:关闭以打开的MP4文件。

参数:hFile 文件句柄,flags 是否允许在关闭MP4文件前做一些额外的优化处理。
注意:在录制较小的MP4文件时可以把flags设置为默认值,如果录制较大的文件最好把flags设置为MP4_CLOSE_DO_NOT_COMPUTE_BITRATE否则调用MP4Close函数会用掉很长的时间。

(yukuilongqq)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201305/16632.html]
本文出处:CSDN博客 作者:yukuilongqq 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容