感谢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. docker启动cavisor监控

    docker启动cavisor监控 docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys: ...

  2. k8s中ipvs和iptables选择

    k8s 1.11.0在 centos7上不行 1.11.1之后就可以了

  3. three.js 之 透明物体不能正常显示

    这几天遇到一个需求,类似这个案例:http://www.hightopo.com/demo/FaultDetection/ 就是这个透明渐变呼吸光柱,看到之后就想着写个shader材质实现透明度渐变, ...

  4. vm overcommit参数

    overcommit参数需要根据不同服务来进行调整,使内存得到充分利用的同时保证系统的稳定性.比如redis服务器建议把vm.overcommit_memory设置为1. 1.vm.overcommi ...

  5. IDEA 2019中一些有偏好设置

    1.取消启动时自动进入上一次工程: 路径:Setting ——> Appearance & Behavior ——> System Setting 取消勾选Reopen last ...

  6. Micro LED 技术详谈

    一.显示技术的发展概况 1. 显示技术 顾名思义,是一种将反映客观外界事物的信息(光学的.电学的.声学的.化学等),经过变换处理,以适当形式(主要有图像.图形.数码.字符)加以显示.供人观看.分析.利 ...

  7. 利用ceph-deploy安装ceph

    手工安装https://www.jianshu.com/p/b8f085ca0307 在ceph所有节点上执行 1.配置hosts cat << EOF >> /etc/hos ...

  8. CSRF类型

    按照请求类型来区分.分为:GET类型和POST类型 按照攻击类型分类,CSRF可分为:HTML CSRF攻击,JSOM HiJacking攻击和FIash CSRF攻击 HTML CSRF攻击 HTM ...

  9. Android ConstraintLayout 说明和例子

    快速说明 当我们点击一个按钮时,显示效果如下 Baseline的显示需要右键该控件,然后 约束类型 尺寸约束 实心方块,用来调整组件的大小 边界约束 空心圆圈,建立组件之间,组件和parent的约束关 ...

  10. 【Python】【demo实验20】【练习实例】【寻找“完数”】

    原题: 一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. 我的代码: #!/usr/bin/python # encodi ...