首页 > 学院 > 开发设计 > 正文

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

2019-11-06 09:05:17
字体:
来源:转载
供稿:网友

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表