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

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的解析


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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值