基础知识:MP4文件格式详解http://download.csdn.net/detail/liwendovo/4970682
系统:Android4.2.1
工具:mp4info,winhex,QTAtomViewer
MPEG4Writer路径:Android4.2/frameworks/av/media/libstagefright/MPEG4Writer.cpp
MPEG4Writer是Android stagefright媒体框架下一个的封装类,我们平常录制视频调用的MediaRecorder接口类其视频录制的底层封装实现就是通过MPEG4Writer完成的。
以视频为例,MPEG4Writer是视频录制的最后一环。
MPEG4Writer遵守 ISO 14496-12标准进行封装,MP4、3gp、ismv等我们常见的媒体封装格式都是以这种基础文件格式为基础衍生的。
首先看一下MPEG4Writer封装好的视频的格式:
可以看到,存放音视频数据的mdat box是位于第二位的,而负责检索音视频的moov box是位于最后的,这与通常的MP4封装的排列顺序不同,当然这是为了符合录制而产生的结果。因为 moov的大小是随着 mdat 变化的,而我们录制视频的时间预先是不知道的,所以需要先将mdat 数据写入,最后再写入moov,完成封装。
而MPEG4Writer的封装主要由两种线程完成,一种是WriterThead,一种是TrackThread。
TrackThread是以Sample为单位获取数据流,然后将每个Sample中的信息提取汇总存储,再将Sample打包进Chunk供WriterThead写入封装文件。TrackThread一般有两个一个是视频track,一个音频track。上图两个trak box中的信息就是通过这两个线程提出整理的。 TrackThread在有Chunk准备好后就马上写入封装文件,音视频的chunk位于同一mdat 中,按时间顺序排列。
WriterThead 是以Chunk为单位封装文件,WriterThead只有一个。