MP4学习(十)ts-mp4源码阅读(8)其他box的解析
2017-02-28 10:24
411 查看
其他box的解析
常见的MP4结构图
其他box的解析流程
解析过程是类似的:1、假设该box的名字叫xxx box,例如mdia box
2、如果它是container box,就调用mp4_read_xxx_atom,该函数内部会调用mp4_read_atom,进行下面的操作
(1)读取这个container box的头部
(2)分别读取container box中的所有子box
3、如果它是普通的box,就调用mp4_read_xxx_atom,进行下面操作:
(1)读取该box的所有数据
(2)如果有需要,就设置xxx box对应的结构体的成员的值
container box的解析
/* ** 对mdia box的处理,会转换成对mdhd box、hdlr、minf box的处理 ** 也就是mp4_read_mdia_atom会间接调用 mp4_read_mdhd_atom、 mp4_read_hdlr_atom、mp4_read_minf_atom */ int Mp4Meta::mp4_read_mdia_atom(int64_t atom_header_size, int64_t atom_data_size) { Mp4Trak *trak; trak = trak_vec[trak_num-1]; trak->mdia_atom.buffer = TSIOBufferCreate(); trak->mdia_atom.reader = TSIOBufferReaderAlloc(trak->mdia_atom.buffer); TSIOBufferCopy(trak->mdia_atom.buffer, meta_reader, atom_header_size, 0); mp4_meta_consume(atom_header_size); /* ** 内部根据mp4_mdia_atoms(即mdia box)的定义,分别调用: ** mp4_read_mdhd_atom、mp4_read_hdlr_atom、mp4_read_minf_atom */ return mp4_read_atom(mp4_mdia_atoms, atom_data_size); }
普通box的解析
int Mp4Meta::mp4_read_tkhd_atom(int64_t atom_header_size, int64_t atom_data_size) { int64_t atom_size; Mp4Trak *trak; atom_size = atom_header_size + atom_data_size; trak = trak_vec[trak_num-1]; trak->tkhd_size = atom_size; trak->tkhd_atom.buffer = TSIOBufferCreate(); trak->tkhd_atom.reader = TSIOBufferReaderAlloc(trak->tkhd_atom.buffer); TSIOBufferCopy(trak->tkhd_atom.buffer, meta_reader, atom_size, 0); mp4_meta_consume(atom_size); // 读取tkhd box,其中offsetof可以取出结构体中某个成员相对于起始地址的偏移量 mp4_reader_set_32value(trak->tkhd_atom.reader, offsetof(mp4_tkhd_atom, size), atom_size); return 1; }
相关文章推荐
- MP4学习(七)ts-mp4源码阅读(5)mvhd box的解析
- MP4学习(七)ts-mp4源码阅读(5)trak box的解析
- MP4学习(五)ts-mp4源码阅读(3)ftyp box的解析
- MP4学习(八)ts-mp4源码阅读(6)tkhd box的解析
- MP4学习(九)ts-mp4源码阅读(7)mdia box的解析
- MP4学习(六)ts-mp4源码阅读(4)moov box的解析
- MPEG-2 TS学习(九)tsfilter源码阅读(6)解析音视频数据
- MP4学习(三)ts-mp4源码阅读(1)介绍
- MP4学习(四)ts-mp4源码阅读(2)MP4的解析流程
- MPEG-2 TS学习(八)tsfilter源码阅读(5)解析PMT
- MPEG-2 TS学习(七)tsfilter源码阅读(4)解析PAT
- MPEG-2 TS学习(六)tsfilter源码阅读(3)TS的解析流程
- memcached源码阅读学习
- JavaScript学习之: MooTools 1.4.5 源码阅读
- JavaScript学习之: MooTools 1.4.5 源码阅读
- 源码阅读学习的捷径
- Spring源码阅读之IoC容器初始化2 -- BeanDefinition载入与解析
- Android源码学习——ActivityManager框架解析
- OpenCV学习:Mat类详细解析+源码剖析(三)遍历矩阵中元素
- Struts2源码阅读之UtilTimerStatck和ProfilingTimerBean类学习