zoukankan      html  css  js  c++  java
  • MP4数据封装格式

    一 、MP4   https://blog.csdn.net/sdsszk/article/details/90719075

    MP4   由很多个ATOM 嵌套构成,主要的ATOM包括  【ftyp】 【moov】【mdat】

    ftyp在第一个, moov 和mdat顺序不固定,moov保存着视频播放的索引,

    在线播放,moov必须在前面

    部分摄像设备   moov-free-mdat

    Atom结构:

    这里写图片描述

     1. ftype moov 和 mdat

      ftype:

      作用:确定文件的类型

        

      MOOV 
      moov中主要保存了媒体的时间信息、trak信息和媒体索引等。

      MDAT 

      所有媒体数据统一存放在mdat中

     

    3. moov  结构

    3.1 mvhd   时间长度

    (1/1000)*70080 秒

     

    3.2 track  视频索引

    3.2.1  track->tkhd

      

    3.2.2 moov-trak-mdia-hdlr   track 类型   包括’vide’, ‘soun’和’hint’三种。

     3.2.3    track 时间

      moov-track-media-mdhd   :

      moov-trak-mdia-minf-stbl-stts中有媒体帧之间的时间间隔,单位是moov-trak-tkhd中的时间粒度。

    3.2.4

    moov-trak-mdia-minf-stbl比较重要,其中保存了解码器需要的信息和索引信息,以下Atom都是stbl Atom的孩子。 
    stsd中保存了解码器需要的媒体描述信息。 

    stss  标识媒体流中的关键帧

    stts  数据帧之间的间隔

    stco     每个数据Chunk在文件中的偏移

     stsc给出各个数据Chunk中包含的数据帧。一个chunk可能会包含一个或者几个帧。每个chunk会有不同的size,每个chunk中的帧也会有不同的size。 

    stsz  样本大小

    4  实际应用场景

    1、把文件尾部的moov移到文件头 
    对于流媒体播放,如果mdat的位置在moov之前,通过流的方式播放文件会出现问题,因为没有办法在一开始就获得文件的媒体信息和索引。 
    这种情况需要对视频做预处理,把moov移动到文件头。通过遍历Atom可以很容易找到moov Atom。

    需要注意的是,移动moov到文件头,同时需要修改moov中的stco/co64。因为这里保存了chunk数据的偏移量,移动moov后,需要根据moov的新位置更新stco/co64 。

    2、分割MP4文件 
    在视频点播服务中,需要将MP4文件分割为多个分片,此时需要获取关键帧、切割时间轴、更新moov和生成各个分片文件。

    可参考 http://www.cnblogs.com/haibindev/archive/2011/10/17/2214518.html

  • 相关阅读:
    【十五分钟Talkshow】fmplan(十五分钟计划)的初步想法
    #ifdef,#ifndef,#define,#endif解析
    mass Framework menu插件
    软件随想
    gwt+smartgwt framework网站开发
    .NET异步
    CentOS6
    【十五分钟Talkshow】谈谈HTML 5及其对Web开发人员的挑战和机遇
    MongoDB源码概述——日志
    TWaver在FTTX设备网管系统中的应用
  • 原文地址:https://www.cnblogs.com/luoyinjie/p/11581825.html
Copyright © 2011-2022 走看看