trak box的解析
常见的MP4结构图
trak box的定义
/*
** trak box的定义,包含:
** tkhd、mdia
*/
static mp4_atom_handler mp4_trak_atoms[] = {
{ "tkhd", &Mp4Meta::mp4_read_tkhd_atom },
{ "mdia", &Mp4Meta::mp4_read_mdia_atom },
{ NULL, NULL }
};
trak box的解析
// 读取trak box
int
Mp4Meta::mp4_read_trak_atom(int64_t atom_header_size, int64_t atom_data_size)
{
int rc;
Mp4Trak *trak;
if (trak_num >= MP4_MAX_TRAK_NUM - 1)
return -1;
trak = new Mp4Trak();
trak_vec[trak_num++] = trak;
trak->trak_atom.buffer = TSIOBufferCreate();
trak->trak_atom.reader = TSIOBufferReaderAlloc(trak->trak_atom.buffer);
TSIOBufferCopy(trak->trak_atom.buffer, meta_reader, atom_header_size, 0);
mp4_meta_consume(atom_header_size);
// 该函数内部实际会进行下面的处理:
// 调用mp4_read_tkhd_atom读取tkhd box
// 调用mp4_read_mdia_atom读取mdia box
rc = mp4_read_atom(mp4_trak_atoms, atom_data_size);
return rc;
}