MP4学习(八)ts-mp4源码阅读(6)tkhd box的解析

来源:互联网 发布:java界面设计 编辑:程序博客网 时间:2024/04/28 02:58

tkhd box的解析




常见的MP4结构图






tkhd box的定义


// tkhd box  typedef struct {      u_char    size[4];      u_char    name[4];      u_char    version[1];            /*         flags标志位         按位或操作结果值,预定义如下:         0x000001 track_enabled,否则该track不被播放;         0x000002 track_in_movie,表示该track在播放中被引用;         0x000004 track_in_preview,表示该track在预览时被引用。         一般该值为7,如果一个媒体所有track均未设置track_in_movie和track_in_preview,         将被理解为所有track均设置了这两项;对于hint track,该值为0     */      u_char    flags[3];      u_char    creation_time[4];      u_char    modification_time[4];      u_char    track_id[4]; // id号,不能重复且不能为0      u_char    reserved1[4];      u_char    duration[4]; // track的时间长度      u_char    reserved2[8];      u_char    layer[2]; // 视频层,默认为0,值小的在上层      u_char    group[2]; // track分组信息,默认为0表示该track未与其他track有群组关系      u_char    volume[2]; // 音量      u_char    reverved3[2];      u_char    matrix[36]; // 视频变换矩阵      u_char    width[4]; // 宽      u_char    heigth[4]; // 高  } mp4_tkhd_atom;



tkhd box的解析


intMp4Meta::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;}




0 0
原创粉丝点击