感谢Google Translate,Microsoft Translate,通篇机翻,不保证绝对正确

Segments

media presentation可能分段传输,比如 HTTP stream。将文件以分段或者连续分段的形式组织起来是可能的,其其不一定是形成符合ISO基础媒体文件格式的文件(比如:它们不包含Movie box)。

Segment Type Box

类型 容器 强制性 数量
'styp' File No 0 /more

如果单个文件存储segments(e.g. 在一个标准http server上),'segment files'中包含 styp box是推荐的,如果出现,必须是第一个,为了分辨这些文件和使声明符合规范。

styp 和 ftyp box 类似。其包含的brands也可能包含在在moov box之前的ftyp box中,也可能包含其他的brands以兼容具有不同格式的segment。

一个有效的styp box应该是segment第一个box。如果segments被链接在一起,styp box可以被删除,但这不是必须的。不是第一个box的styp box可以被忽略。

Segment Index Box

类型 容器 强制性 数量
'sidx' File No 0 /more

‘sidx’为其应用的media segment中的一个媒体流提供紧凑索引。 它的设计使其不仅可以用于基于此规范的媒体格式(即包含sample tables或movie fragments的segment),还可以用于其他媒体格式(比如, MPEG‐2 Transport Streams [ISO/IEC 13818‐1])。出于此原因,本处给出的通用描述,随后给出在使用Movie fragment 时的具体定义。

每个Segment Index box记录了一个(sub)segment 是如何被划分为 一个或多个subsegments(它们还可能使用segment index box继续划分)。

subsegment被定义为一段时间区间内包含的 (sub)segment,并对应于包含的 (sub)segment的字节范围。所有subsegment的duration为包含的 (sub)segment的duration的和。

sidx box中的每个entry都包含一个引用类型,该引用类型指向被引用的lest-segment的媒体信息,或者指向了描述被引用的subsegment如何进一步划分的sidx。结果,通过记录应用于相同( (sub)segment的部分的其他sidx的时间和字节偏移信息,可以以“分层”或“菊花链”(daisy-chain)或其他形式来index the segment。

每个sidx box提供有关segment的单个媒体流的信息,称为参考流。 如果提供,则对于给定媒体流,段中的第一segment中的sidx box应记录段中该媒体流的全部,并且应该在该segment中用于相同媒体流的任何其他sidx box之前。

如果针对至少存在一个媒体流而不是segment中的所有媒体流的segment index,则通常选择不对每个访问单元进行独立编码的媒体流(例如视频)进行index。 对于没有存在segment index的任何媒体流(称为non-indexed stream),与段中的第一sidx box相关联的媒体流用作参考流,在某种意义上其还描述了任何non-indexed媒体流的 subsegment。

sidx box 可能与被索引的media内联在同一个文件中,在某些情况下,也可以内联在仅包含索引信息的单独文件中。

sidx box包含对该box记录了(sub)segment的一系列引用subsegment。 引用的subsegent在呈现时间内是连续的。 类似地,sidx box引用的字节在媒体文件和单独的索引段中始终是连续的,或者如果索引放在媒体文件中,则在单个文件中是连续的。 引用的大小给出了引用的材料(material)中的字节数。

media segment 可能被超过一个互相独立的 "top-level"的sidx box 引用,它们中的任一个都索引了一个具有media stream的media segment。在包含多个媒体流的segment中, 引用的字节可能包含来自多个流的媒体, 即使 sidx box只提供一个媒体流的计时信息。

在包含 sidx box的文件中, sidx box的定位点(anchor)是该box之后的第一个字节。如果有两个文件, 则媒体文件中的定位点是top‐level segment的开头 (即如果每个segment存储在单独的文件中, 则是segment文件的开头)。包含媒体的文件中的材料 (也可能是包含sidx box的文件) 从锚点指示的偏移量开始。如果有两个文件, 索引文件中的material将从定位点开始, 即紧跟在 sidx box之后。

有两个约束条件(a):subsegments在时间上是连续的,也就是说,循环中的每个entry都是紧接着前一个的 (b):在一个给定的文件中,引用byte是连续的,以下一些可能性:

*in its byte count,对sidx box的引用可以包括在记录subsegment的sidx box之后

*在一个完整的文件中,使用first_offset字段能够从被引用的media中区分出sidx box。

*在一个完整文件中,能够从哪些被索引的meida附近的subsegment定位sidx box。

*当使用包含segment index的单独文件时,循环entry可能是“混合类型”,一些是index segment中的sidx box,一些是媒体文件中的media subsegment。

配置文件可用于限制segment index的放置或index的整体复杂性

aligned(8) class SegmentIndexBox extends FullBox(‘sidx’, version, 0) {
unsigned int(32) reference_ID;
unsigned int(32) timescale;
if (version==0) {
unsigned int(32) earliest_presentation_time;
unsigned int(32) first_offset;
}
else {
unsigned int(64) earliest_presentation_time;
unsigned int(64) first_offset;
}
unsigned int(16) reserved = 0;
unsigned int(16) reference_count; //number of referenced items
for(i=1; i <= reference_count; i++)
{
bit (1) reference_type;
unsigned int(31) referenced_size;
unsigned int(32) subsegment_duration;
bit(1) starts_with_SAP; //whether the referenced subsegments start with a SAP
unsigned int(3) SAP_type; //SAP type as specified in Annex I, or the value 0.
unsigned int(28) SAP_delta_time; //indicates TSAP of the first SAP, in decoding order, in the referenced subsegment for the reference stream
}
}

reference_ID 提供了引用stream的stream ID。如果sidx被“parent”sidx引用,reference_ID的值应该同引用者sidx box的reference_ID 值一致。

timescale 为此box中的time和duration字段提供每秒刻度的时间刻度; 建议此值匹配参考流或track的时间刻度; 对于基于此规范的文件,即track的Media Header Box的时间刻度字段;

earliest_presentation_time 是timescale字段中指示的timescale中第一subsegment中参考流中任何内容的最早呈现时间; 最早的呈现时间来自访问单元中的媒体或访问单元的部分,edit list(如果有)不会忽略

first_offset 是包含媒体的文件中从锚点到索引材料的第一个字节的距离(以字节为单位)

reference_type 置1表示引用的是一个sidx box。否则则是media content。如果一个单独的index segment被使用,引用类型为1的entry在index segment中,引用类型为0的entry则在media 文件中。

referenced_size从引用项的第一个字节到下一个引用项的第一个字节的字节距离,或者在最后一个条目的情况下,到引用材料的结尾的距离;

subsegment_duration 当引用是sidx box时,该字段携带该box中subsegment_duration字段的总和; 当引用是一个subsegment时,该字段携带下一个subsegment(或下一个segment的第一个subsegment,如果这是segment的最后一个subsegment,参见流的任何访问单元)的最早呈现时间之间的差异, 或参考流的结束呈现时间(如果这是流的最后一个subsegment)和参考流的任何访问单元在参考subsegment中的最早呈现时间; duration与earliest_presentation_time的单位相同;

Subsegment Index Box

类型 容器 强制性 数量
'ssix' File No 0 /more

In other words, this box provides a compact index for how the data in a subsegment is ordered according to levels into partial subsegments. It enables a client to easily access data for partial subsegments by downloading ranges of data in the subsegment

ssix box 提供了从 levels(由Level Assignment box指定)到被索引subsegment的字节范围的映射。换句话说,此box提供了一个紧凑的索引,用于指示subsegment中的数据如何根据级别划分为部分subsegment。 它使客户端能够通过下载subsegment中的区间数据来轻松访问部分subsegment的数据。

subsegment中的每个字节应明确分配给一个级别,因此范围计数必须为2或更大。 如果范围与级别分配中的任何信息都没有关联,则可以使用级别分配中未包括的任何级别。

每个sidx box中应该有0或1个ssix box,它们仅索引 leaf subsegments,即仅索引subsegment但不包含segment index。 ssix(如果有)应为关联的sdix box后面的下一个box。 ssix box记录前一个sidx box中指示的subsegment。

通常,从字节范围构造的媒体数据是不完整的,即它不符合整个subsegment的媒体格式。

aligned(8) class SubsegmentIndexBox extends FullBox(‘ssix’, 0, 0) {
unsigned int(32) subsegment_count;
for( i=1; i <= subsegment_count; i++)
{
unsigned int(32) range_count; //媒体数据分组的部分subsegment级别的数量。 该值应大于或等于2
for ( j=1; j <= range_count; j++) {
unsigned int(8) level; //the level to which this partial subsegment is assigned
unsigned int(24) range_size; //size of the partial subsegment
}
}
}

subsegment_count是一个正整数,指定在此box中为其指定部分subsegment信息的subsegment数。 subsegment_count应等于紧接在前的Segment Index box中的reference_count(即,movie fragment引用的数量)

Producer Reference Time Box

类型 容器 强制性 数量
'prft' File No 0 /more

producer reference time box提供相对挂钟时间,在该时间点生成movie fragments或包含movie fragments的文件。 当这些文件实时生成和使用时,这可以为客户端提供信息,使消费和生产能够以相同的速率进行,从而避免可能的缓冲区溢出或下溢。

此box与按位流顺序跟随它的下一个movie fragment box相关。它必须遵循段中的任何segment type 或 segment index box (如果有), 并出现在下面的movie

fragment box(它所引用的) 之前。如果segment文件包含任何producer reference time boxes, 则第一个文件应出现在该段中的第一个movie fragment box之前。

aligned(8) class ProducerReferenceTimeBox extends FullBox(‘prft’, version, 0) {
unsigned int(32) reference_track_ID; //the track_ID for the reference track
unsigned int(64) ntp_timestamp; //a UTC time in NTP format corresponding to decoding_time.
if (version==0) {
unsigned int(32) media_time;
} else {
unsigned int(64) media_time;
}
}

media_time对应于与ntp_timestamp相同的时间, 在用于引用track的时间单位中,并在产生媒体时在该媒体时钟上测量。

Support for Incomplete Tracks

Hint Track Formats

Sample Groups

ISO/IEC 15444-12 MP4 封装格式标准摘录 5的更多相关文章

  1. ISO/IEC 15444-12 MP4 封装格式标准摘录 4

    目录 Movie Fragments Movie Extends Box Movie Extends Header Box Track Extends Box Movie Fragment Box M ...

  2. ISO/IEC 15444-12 MP4 封装格式标准摘录 3

    目录 Track Data Layout Structures Data Information Box Data Reference Box Sample Size Boxes Compact Sa ...

  3. ISO/IEC 15444-12 MP4 封装格式标准摘录 2

    目录 Track Media Structure Media Box Media Header Box Handler Reference Box Media Information Box Medi ...

  4. mp4封装格式各box类型讲解及IBP帧计算

    mp4封装格式各box类型讲解及IBP帧计算 目录 mp4封装格式各box类型讲解及IBP帧计算 box ftyp box moov box mvhd box (Movie Header Box) t ...

  5. H.264标准(一)mp4封装格式详解

    在网络层,互联网提供所有应用程序都要使用的两种类型的服务,尽管目前理解这些服务的细节并不重要,但在所有TCP/IP概述中,都不能忽略他们: 无连接分组交付服务(Connectionless Packe ...

  6. ISO/IEC 14496 文档内容简介, MPEG标准

    ISO/IEC 14496是MPEG专家组制定的MPEG-4标准于1998年10月公布第1版,1999年1月成为国际标准,1999年12月公布了第2版,2000年初成为国际标准. 全文分为21个部分: ...

  7. 最简单的基于FFmpeg的封装格式处理:视音频复用器(muxer)

    ===================================================== 最简单的基于FFmpeg的封装格式处理系列文章列表: 最简单的基于FFmpeg的封装格式处理 ...

  8. 多媒体封装格式详解---MP4

    MP4文件格式详解——结构概述 http://blog.csdn.net/pirateleo/article/details/7061452 一.基本概念 1. 文件,由许多Box和FullBox组成 ...

  9. ISO日期格式标准,浏览器到服务器到mysql中的时区

    时区简单理解 https://zh.wikipedia.org/wiki/%E6%97%B6%E5%8C%BA 上面的链接是时区的wiki说明,下面说说我记住的部分: GMT时区是格林威治标准时间,我 ...

随机推荐

  1. Swift3.0封装 AFN 的 GET&POST网络请求

    // // PSNetWorkManage.swift // WeiBoSwift // // Created by 思 彭 on 16/9/25. // Copyright © 2016年 思 彭. ...

  2. Java泛型(11):潜在类型机制

    泛型的目标之一就是能够编写尽可能广泛应用的代码. 为了实现这一点,我们需要各种途径来放松对我们的代码将要作用的类型所做的限制,同时不丢失静态类型检查的好处.即写出更加泛化的代码. Java泛型看起来是 ...

  3. 刀塔OMG塔防1.23单机版使用方法

    使用方法1.确保魔兽的版本为1.26(低版本会报错),如果版本不对用附件中的版本转换器转一下2.把 omg.w3x 复制到 魔兽的MAPS文件夹 WarcraftIII 游戏根目录\Maps3.双击运 ...

  4. 【图像算法OpenCV】几何不变矩--Hu矩

    原文地址  http://blog.csdn.NET/daijucug/article/details/7535370 [图像算法OpenCV]几何不变矩--Hu矩 一 原理 几何矩是由Hu(Visu ...

  5. java api操作

    java api操作 导入开发包 将hbase安装包中lib下包导入java项目   创建表   Configuration conf = HBaseConfiguration.create(); c ...

  6. git pull因为主线分支问题解决

    方法1:如果你想保留刚才本地修改的代码,并把git服务器上的代码pull到本地(本地刚才修改的代码将会被暂时封存起来) git stashgit pull origin mastergit stash ...

  7. 在win7下安装PowerShell 5.0遇到的坑

    升级安装 安装.NET Framework 4.6.2下载NDP462-KB3151800-x86-x64-AllOS-ENU.exe,进行安装 安装PowerShell 4.0(5.0依赖4.0) ...

  8. vue60秒倒计时

    wait:"60", content:"验证码", canClick: true, daojishi(){ if(!this.canClick) return ...

  9. SQLite基础-7.子句(一)

    目录 SQLite子句(一) 1. WHERE子句 2. LIKE子句 3. GLOB 子句 4. Oreder By 子句 SQLite子句(一) 1. WHERE子句 WHERE 子句后面跟着条件 ...

  10. 【深入浅出-JVM】(1):Java 虚拟机

    Java 虚拟机地位 种类 BEA的JRockit Solaris的Exact VM IBM的J9 感谢您的耐心阅读,如果您发现文章中有一些没表述清楚的,或者是不对的地方,请给我留言,您的鼓励是作者写 ...