zoukankan      html  css  js  c++  java
  • 关于Sample的分析报告

    首先,这是一个典型的sample Table box:

     

    一、      Stbl box中常见的子box:

    stts:Decoding Time to Sample Box时间戳和Sample映射表。通过这个box可以实现时间到sample number的映射。

    stsd:Sample Description,主要描述当前track有关的编码信息,以及用于初始化解码的附加信息。

    stsz,stz2:Sample Size Boxes每个Sample大小的表。

    stsc:Sample to chunk的映射表。

    stco,co64:Chunk位置偏移表。

    Stss关键帧index。

    二、对主要的子box进行解析:

    (1)解析stsd可获得coding型、视频宽高、音频samplesize、channelcount这些和解码器有关信息。

    (2)解析stsz box 可以获得一个sample size的表。

    Filed name

    type

    Size(bits)

    FullBox Header

    ---

    ---

    sample_size

    uint32

    32

    sample_count

    uint32

    32

    entry_size

    uint32[]

    varies

    sample_size中表示sample长度,如果是0表示每个sample长度不定,会记录在entry_size中;否则每个sample长度一样,并且entry_size域不存在。

    'stz2' box中的entry_size是compact的,长度由特定字段指定。

     (3)解析stsc 还原Sample 与chunk的映射表 ,记录了每个chunk中包含多少sample,其结构定义如下:

    Filed name

    type

    Size(bits)

    FullBox Header

    ---

    ---

    entry_cout

    uint32

    32

    chunk_entry

    uint32[3]

    varies

    chunk_entry包含三个字段:

    first_chunk: uint32

    samples_per_chunk: uint32

    sample_description_index: uint32

    每个entry表示从first_chunk开始的每个chunk都包含samples_per_chunk个samples,这些sample都可以用使用sample_description_index信息解码。通过这个box,可以构建出当前track的chunk结构,及其包含的sample。

    Sample 是存储的最基本单元,mp4把Sample 存在chunk中。chunk的长度、chunk的大小、chunk中Sample的数量及大小都是不定的。通过解析这部分box来还原这个映射表。

    (4) “stco”这个box记录了chunk对应的offset,只是包含字段一个是32为('stco'),一个是64位('co64')。

    chunk offset box中记录都是相对文件的偏移量,可以直接通过这些信息读取。

    三、小结

    由于'mdat' box中的多媒体数据是没有结构的,只能参考moov的trak box解析。反过头来。我们看一下针对单个track中的media信息存储应该是下面的结构

    |chunk #0| chunk#1| ... | chunk #n|

    每个chunk的构成是下面的结构:

    |sample #0|sample #1| ... | sample #n|

    从trak box中的minf中可以看出,每个chunk的长度不定,其所包含的sample数目不同,每个sample的长度也不完全相同。

  • 相关阅读:
    tomcat 含中文文件不能下载问题
    【转】解读Tomcat服务器server.xml文件
    java 删除文件和文件夹
    获取tomcat安装地址
    《Zookeeper中间件》Zookeeper整合SpringBoot
    《Zookeeper中间件》Zookeeper源码环境搭建
    《Java基础知识》Java 阻塞队列
    《Zookeeper中间件》Zookeeper安装(linux)
    《RabbitMQ 消息中间件》Rabbit集群架构
    《RabbitMQ 消息中间件》RabbitMQ的应用场景
  • 原文地址:https://www.cnblogs.com/xizhu/p/9502723.html
Copyright © 2011-2022 走看看