感谢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. Java数组(3):创建测试数据

    有时我们需要使用数组批量创建测试数据,接下来通过以下4点来举例. (1) 使用Arrays.fill()填充数据 (2) 使用Random类中JDK1.8提供的新方法用来生成随机数 (3) 一个随机数 ...

  2. Vue和其他框架的区别

    原文地址 React React 和 Vue 有许多相似之处,它们都有: 使用 Virtual DOM 提供了响应式 (Reactive) 和组件化 (Composable) 的视图组件. 将注意力集 ...

  3. 【JavaScript】初识js

    前端三大利器就是HTML+CSS+JavaScript,他们在整个前端开发中的主要作用大体可以概括如下 html 标记语言 负责页面的结构 css 层叠样式表 负责页面的样式 javascript 编 ...

  4. 在vue中使用Normalize初始化样式

    参考链接:https://www.jianshu.com/p/34533b45aac1

  5. Apache——开启个人用户主页功能

    个人主页功能分为不加密和加密两种 不加密: 先来建立几个用户,我这是建了两个 例:命令为:useradd  qiyuan 然后输入:passwd qiyuan,改一下密码 我们看一下家目录下面: 已经 ...

  6. day36 joinablequeue、多线程理论、多线程的两种使用方式、守护线程、互斥锁、死锁、递归锁、信号量

    1.joinablequeue队列 joinablequeue与queue一样,也是一种队列,其继承自queue,也有queue中的put 与get 方法,但是在joinablequeue中有自己的 ...

  7. gitlab 安装升级

    GitLab,是一个使用 Ruby on Rails 开发的开源应用程序,与Github类似,能够浏览源代码,管理缺陷和注释,非常适合在团队内部使用. 安装方式: Bitnami一键安装:https: ...

  8. zping ping包工具20180605.exe测试版

    链接: https://pan.baidu.com/s/1WB3BZn0r9n4DRU_8bNC65g 提取码: mybi zping的第一个exe版本由于未对兼容性进行测试,使用python3.6编 ...

  9. C语言Ⅰ博客作业08

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/9978 我在这个课程的目 ...

  10. Design Circular Queue

    Design your implementation of the circular queue. The circular queue is a linear data structure in w ...