[MSE] - Establish byte stream format registry.
Bug 23441 - Established MSE byte stream format registry and extracted byte stream format text into separate documents.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/media-source/byte-stream-format-registry-respec.html Mon Nov 04 15:42:39 2013 -0800
@@ -0,0 +1,139 @@
+<!DOCTYPE html SYSTEM "about:legacy-compat">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>Media Source Extensions Byte Stream Format Registry</title>
+ <script src="respec-w3c-common.js" class="remove"></script>
+ <script class="remove">
+ var respecConfig = {
+ // specification status (e.g. WD, LCWD, NOTE, etc.). If in doubt use ED.
+ specStatus: "ED",
+
+ // the specification's short name, as in http://www.w3.org/TR/short-name/
+ shortName: "",
+
+ // if there a publicly available Editor's Draft, this is the link
+ edDraftURI: "http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/byte-stream-format-registry.html",
+
+ // if this is a LCWD, uncomment and set the end of its review period
+ // lcEnd: "2009-08-05",
+
+ // editors, add as many as you like
+ // only "name" is required
+ editors: [
+ { name: "Aaron Colwell", url: "", company: "Google Inc.", companyURL: "http://www.google.com/" },
+ ],
+
+ // name of the WG
+ wg: "HTML Working Group",
+
+ // URI of the public WG page
+ wgURI: "http://www.w3.org/html/wg/",
+
+ // name (without the @w3c.org) of the public mailing to which comments are due
+ wgPublicList: "public-html-media",
+
+ // URI of the patent status for this WG, for Rec-track documents
+ // !!!! IMPORTANT !!!!
+ // This is important for Rec-track documents, do not copy a patent URI from a random
+ // document unless you know what you're doing. If in doubt ask your friendly neighbourhood
+ // Team Contact.
+ wgPatentURI: "http://www.w3.org/2004/01/pp-impl/40318/status",
+
+ noIDLIn: true,
+
+ scheme: "https",
+
+ // Empty definitions for objects declared in the document are here to
+ // prevent error messages from being displayed for references to these objects.
+ definitionMap: {},
+ };
+ </script>
+ <!-- script to register bugs -->
+ <script src="https://dvcs.w3.org/hg/webcomponents/raw-file/tip/assets/scripts/bug-assist.js"></script>
+ <meta name="bug.short_desc" content="[MSE] ">
+ <meta name="bug.product" content="HTML WG">
+ <meta name="bug.component" content="Media Source Extensions">
+
+ <link rel="stylesheet" href="mse.css">
+
+ <style type="text/css">
+ #registry table { border-collapse: collapse; border-style: hidden hidden none hidden; }
+ #registry table thead, table tbody { border-bottom: solid; }
+ #registry table tbody th:first-child { border-left: solid; }
+ #registry table tbody th { text-align: left; }
+ #registry table td, table th { border-left: solid; border-right: solid; border-bottom: solid thin; vertical-align: top; padding: 0.2em; }
+ </style>
+ </head>
+ <body>
+
+ <section id="purpose">
+ <h2>Purpose</h2>
+ <p>This registry is intended to enhance interoperability among implementations and users of
+ <a href="http://www.w3.org/TR/media-source/#idl-def-SourceBuffer"><code>SourceBuffer</code></a> objects described in the
+ <a href="http://www.w3.org/TR/media-source/">Media Source Extensions(MSE)</a> specification. In particular, this registry provides the means (1) to identify
+ and avoid MIME-type collisions among byte stream formats, and (2) to disclose information about byte stream formats accepted by MSE
+ implementations to promote interoperability.
+ </section>
+
+ <section id="organization">
+ <h2>Organization</h2>
+ <p>The registry maintains a mapping between MIME-type/subtype pairs and byte stream format specifications. The byte stream format specifications describe the
+ structure and semantics of byte streams accepted by <a href="http://www.w3.org/TR/media-source/#idl-def-SourceBuffer"><code>SourceBuffer</code></a> objects
+ created with the associated MIME-type/subtype pair.</p>
+ <p>This registry is not intended to include any information on whether a byte stream format is encumbered by intellectual property claims. Implementors and users
+ are advised to seek appropriate legal counsel in this matter if they intend to implement or use a specific byte stream format.</p>
+ </section>
+
+ <section id="entry-requirements">
+ <h2>Registration Entry Requirements</h2>
+ <ol>
+ <li>Each entry must include a unique MIME-type/subtype pair. If the byte stream format is derived-from an existing file format, then it should use the
+ MIME-type/subtype pairs typically used for the file format.</li>
+ <li>Each entry must include a link that references a publically available specification. It is recommended that such a specification be made available
+ without cost (other than reasonable shipping and handling if not available by online means).</li>
+ <li>Each entry must comply with all requirements outlined in the <a href="http://www.w3.org/TR/media-source/#byte-stream-formats">byte stream formats section</a>
+ of the <a href="http://www.w3.org/TR/media-source/">Media Source Extensions</a> specification.</li>
+ <li>Candidate entries must be announced on <a href="public-html-media@w3.org">public-html-media@w3.org</a>(<a href="public-html-media-request@w3.org">subscribe</a>,
+ <a href="http://lists.w3.org/Archives/Public/public-html-media/">archives</a>) so they can be discussed and evaluated for compliance before being added to the
+ registry.</li>
+ </ol>
+ <p>If a registration fails to satisfy a mandatory requirement specified above, then it may be removed from the registry (without prejudice).
+ </section>
+
+ <section id="registry">
+ <h2>Registry</h2>
+ <table>
+ <thead>
+ <tr>
+ <th>MIME type/subtype</th>
+ <th>Public Specification(s)</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ audio/webm<br>
+ video/webm
+ </td>
+ <td><a href="webm-byte-stream-format.html">WebM Byte Stream Format</a></td>
+ </tr>
+ <tr>
+ <td>
+ audio/mp4<br>
+ video/mp4
+ </td>
+ <td><a href="isobmff-byte-stream-format.html">ISO BMFF Byte Stream Format</a></td>
+ </tr>
+ <tr>
+ <td>
+ audio/mp2t<br>
+ video/mp2t
+ </td>
+ <td><a href="mp2t-byte-stream-format.html">MPEG-2 Transport Streams Byte Stream Format</a></td>
+ </tr>
+ </tbody>
+ </table>
+ </section>
+ </body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/media-source/byte-stream-format-registry.html Mon Nov 04 15:42:39 2013 -0800
@@ -0,0 +1,263 @@
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>Media Source Extensions Byte Stream Format Registry</title>
+
+
+ <!-- script to register bugs -->
+ <script src="https://dvcs.w3.org/hg/webcomponents/raw-file/tip/assets/scripts/bug-assist.js"></script>
+ <meta name="bug.short_desc" content="[MSE] ">
+ <meta name="bug.product" content="HTML WG">
+ <meta name="bug.component" content="Media Source Extensions">
+
+ <link rel="stylesheet" href="mse.css">
+
+ <style type="text/css">
+ #registry table { border-collapse: collapse; border-style: hidden hidden none hidden; }
+ #registry table thead, table tbody { border-bottom: solid; }
+ #registry table tbody th:first-child { border-left: solid; }
+ #registry table tbody th { text-align: left; }
+ #registry table td, table th { border-left: solid; border-right: solid; border-bottom: solid thin; vertical-align: top; padding: 0.2em; }
+ </style>
+ <style>/*****************************************************************
+ * ReSpec 3 CSS
+ * Robin Berjon - http://berjon.com/
+ *****************************************************************/
+
+/* --- INLINES --- */
+em.rfc2119 {
+ text-transform: lowercase;
+ font-variant: small-caps;
+ font-style: normal;
+ color: #900;
+}
+
+h1 acronym, h2 acronym, h3 acronym, h4 acronym, h5 acronym, h6 acronym, a acronym,
+h1 abbr, h2 abbr, h3 abbr, h4 abbr, h5 abbr, h6 abbr, a abbr {
+ border: none;
+}
+
+dfn {
+ font-weight: bold;
+}
+
+a.internalDFN {
+ color: inherit;
+ border-bottom: 1px solid #99c;
+ text-decoration: none;
+}
+
+a.externalDFN {
+ color: inherit;
+ border-bottom: 1px dotted #ccc;
+ text-decoration: none;
+}
+
+a.bibref {
+ text-decoration: none;
+}
+
+cite .bibref {
+ font-style: normal;
+}
+
+code {
+ color: #ff4500;
+}
+
+
+/* --- --- */
+ol.algorithm { counter-reset:numsection; list-style-type: none; }
+ol.algorithm li { margin: 0.5em 0; }
+ol.algorithm li:before { font-weight: bold; counter-increment: numsection; content: counters(numsection, ".") ") "; }
+
+/* --- TOC --- */
+.toc a, .tof a {
+ text-decoration: none;
+}
+
+a .secno, a .figno {
+ color: #000;
+}
+
+ul.tof, ol.tof {
+ list-style: none outside none;
+}
+
+.caption {
+ margin-top: 0.5em;
+ font-style: italic;
+}
+
+/* --- TABLE --- */
+table.simple {
+ border-spacing: 0;
+ border-collapse: collapse;
+ border-bottom: 3px solid #005a9c;
+}
+
+.simple th {
+ background: #005a9c;
+ color: #fff;
+ padding: 3px 5px;
+ text-align: left;
+}
+
+.simple th[scope="row"] {
+ background: inherit;
+ color: inherit;
+ border-top: 1px solid #ddd;
+}
+
+.simple td {
+ padding: 3px 10px;
+ border-top: 1px solid #ddd;
+}
+
+.simple tr:nth-child(even) {
+ background: #f0f6ff;
+}
+
+/* --- DL --- */
+.section dd > p:first-child {
+ margin-top: 0;
+}
+
+.section dd > p:last-child {
+ margin-bottom: 0;
+}
+
+.section dd {
+ margin-bottom: 1em;
+}
+
+.section dl.attrs dd, .section dl.eldef dd {
+ margin-bottom: 0;
+}
+</style><link rel="stylesheet" href="https://www.w3.org/StyleSheets/TR/W3C-ED"><!--[if lt IE 9]><script src='https://www.w3.org/2008/site/js/html5shiv.js'></script><![endif]--></head>
+ <body><div class="head">
+ <p>
+
+ <a href="http://www.w3.org/"><img width="72" height="48" src="https://www.w3.org/Icons/w3c_home" alt="W3C"></a>
+
+ </p>
+ <h1 class="title" id="title">Media Source Extensions Byte Stream Format Registry</h1>
+
+ <h2 id="w3c-editor-s-draft-04-november-2013"><abbr title="World Wide Web Consortium">W3C</abbr> Editor's Draft 04 November 2013</h2>
+ <dl>
+
+ <dt>This version:</dt>
+ <dd><a href="http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/byte-stream-format-registry.html">http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/byte-stream-format-registry.html</a></dd>
+ <dt>Latest published version:</dt>
+ <dd><a href="http://www.w3.org/TR//">http://www.w3.org/TR//</a></dd>
+
+
+ <dt>Latest editor's draft:</dt>
+ <dd><a href="http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/byte-stream-format-registry.html">http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/byte-stream-format-registry.html</a></dd>
+
+
+
+
+
+
+
+
+ <dt>Editor:</dt>
+ <dd><span>Aaron Colwell</span>, <a href="http://www.google.com/">Google Inc.</a></dd>
+
+
+ </dl>
+
+
+
+
+
+ <p class="copyright">
+ <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a> ©
+ 2013
+
+ <a href="http://www.w3.org/"><abbr title="World Wide Web Consortium">W3C</abbr></a><sup>®</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts Institute of Technology">MIT</abbr></a>,
+ <a href="http://www.ercim.eu/"><abbr title="European Research Consortium for Informatics and Mathematics">ERCIM</abbr></a>,
+ <a href="http://www.keio.ac.jp/">Keio</a>, <a href="http://ev.buaa.edu.cn/">Beihang</a>), All Rights Reserved.
+ <abbr title="World Wide Web Consortium">W3C</abbr> <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a> and
+ <a href="http://www.w3.org/Consortium/Legal/copyright-documents">document use</a> rules apply.
+ </p>
+
+
+ <hr>
+</div>
+
+ <section id="purpose">
+ <!--OddPage--><h2><span class="secno">1. </span>Purpose</h2>
+ <p>This registry is intended to enhance interoperability among implementations and users of
+ <a href="http://www.w3.org/TR/media-source/#idl-def-SourceBuffer"><code>SourceBuffer</code></a> objects described in the
+ <a href="http://www.w3.org/TR/media-source/">Media Source Extensions(MSE)</a> specification. In particular, this registry provides the means (1) to identify
+ and avoid MIME-type collisions among byte stream formats, and (2) to disclose information about byte stream formats accepted by MSE
+ implementations to promote interoperability.
+ </p></section>
+
+ <section id="organization">
+ <!--OddPage--><h2><span class="secno">2. </span>Organization</h2>
+ <p>The registry maintains a mapping between MIME-type/subtype pairs and byte stream format specifications. The byte stream format specifications describe the
+ structure and semantics of byte streams accepted by <a href="http://www.w3.org/TR/media-source/#idl-def-SourceBuffer"><code>SourceBuffer</code></a> objects
+ created with the associated MIME-type/subtype pair.</p>
+ <p>This registry is not intended to include any information on whether a byte stream format is encumbered by intellectual property claims. Implementors and users
+ are advised to seek appropriate legal counsel in this matter if they intend to implement or use a specific byte stream format.</p>
+ </section>
+
+ <section id="entry-requirements">
+ <!--OddPage--><h2><span class="secno">3. </span>Registration Entry Requirements</h2>
+ <ol>
+ <li>Each entry must include a unique MIME-type/subtype pair. If the byte stream format is derived-from an existing file format, then it should use the
+ MIME-type/subtype pairs typically used for the file format.</li>
+ <li>Each entry must include a link that references a publically available specification. It is recommended that such a specification be made available
+ without cost (other than reasonable shipping and handling if not available by online means).</li>
+ <li>Each entry must comply with all requirements outlined in the <a href="http://www.w3.org/TR/media-source/#byte-stream-formats">byte stream formats section</a>
+ of the <a href="http://www.w3.org/TR/media-source/">Media Source Extensions</a> specification.</li>
+ <li>Candidate entries must be announced on <a href="public-html-media@w3.org">public-html-media@w3.org</a>(<a href="public-html-media-request@w3.org">subscribe</a>,
+ <a href="http://lists.w3.org/Archives/Public/public-html-media/">archives</a>) so they can be discussed and evaluated for compliance before being added to the
+ registry.</li>
+ </ol>
+ <p>If a registration fails to satisfy a mandatory requirement specified above, then it may be removed from the registry (without prejudice).
+ </p></section>
+
+ <section id="registry">
+ <!--OddPage--><h2><span class="secno">4. </span>Registry</h2>
+ <table>
+ <thead>
+ <tr>
+ <th>MIME type/subtype</th>
+ <th>Public Specification(s)</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ audio/webm<br>
+ video/webm
+ </td>
+ <td><a href="webm-byte-stream-format.html">WebM Byte Stream Format</a></td>
+ </tr>
+ <tr>
+ <td>
+ audio/mp4<br>
+ video/mp4
+ </td>
+ <td><a href="isobmff-byte-stream-format.html">ISO BMFF Byte Stream Format</a></td>
+ </tr>
+ <tr>
+ <td>
+ audio/mp2t<br>
+ video/mp2t
+ </td>
+ <td><a href="mp2t-byte-stream-format.html">MPEG-2 Transport Streams Byte Stream Format</a></td>
+ </tr>
+ </tbody>
+ </table>
+ </section>
+
+
+<form action="//www.w3.org/Bugs/Public/enter_bug.cgi" target="_blank" style="position: fixed; width: 10em; top: 1em; right: 1em; font-family: Tahoma, sans-serif; font-size: 11px; opacity: 0.8; text-align: right;">See a problem? Select text and <input type="submit" accesskey="f" value="file a bug" style="font-family: Tahoma, sans-serif; font-size: 10px;"><input type="hidden" name="comment" value=""><input type="hidden" name="short_desc" value="[MSE] "><input type="hidden" name="product" value="HTML WG"><input type="hidden" name="component" value="Media Source Extensions">.</form></body></html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/media-source/isobmff-byte-stream-format-respec.html Mon Nov 04 15:42:39 2013 -0800
@@ -0,0 +1,172 @@
+<!DOCTYPE html SYSTEM "about:legacy-compat">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>ISO BMFF Byte Stream Format</title>
+ <script src="respec-w3c-common.js" class="remove"></script>
+ <script src="media-source.js" class="remove"></script>
+ <script class="remove">
+ (function() {
+ var isobmffContainerSpecDefinitions = {
+ 'iso-14496-12': { fragment: 'http://standards.iso.org/ittf/PubliclyAvailableStandards/c061988_ISO_IEC_14496-12_2012.zip', link_text: 'ISO/IEC 14496-12', },
+ };
+
+ mediaSourceAddDefinitionInfo("isobmff-byte-stream-format", "", isobmffContainerSpecDefinitions);
+ })();
+ </script>
+
+ <script class="remove">
+ var respecConfig = {
+ // specification status (e.g. WD, LCWD, NOTE, etc.). If in doubt use ED.
+ specStatus: "ED",
+
+ // the specification's short name, as in http://www.w3.org/TR/short-name/
+ shortName: "",
+
+ // if there a publicly available Editor's Draft, this is the link
+ edDraftURI: "http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/isobmff-byte-stream-format.html",
+
+ // if this is a LCWD, uncomment and set the end of its review period
+ // lcEnd: "2009-08-05",
+
+ // editors, add as many as you like
+ // only "name" is required
+ editors: [
+ { name: "Aaron Colwell", url: "", company: "Google Inc.", companyURL: "http://www.google.com/" },
+ { name: "Adrian Bateman", url: "", company: "Microsoft Corporation", companyURL: "http://www.microsoft.com/" },
+ { name: "Mark Watson", url: "", company: "Netflix Inc.", companyURL: "http://www.netflix.com/" },
+ ],
+
+ mseDefGroupName: "isobmff-byte-stream-format",
+ mseUnusedGroupNameExcludeList: ["media-source"],
+ mseContributors: [
+ "Steven Robertson",
+ "Kevin Streeter",
+ "Joe Steele",
+ "Michael Thornburgh",
+ "John Simmons",
+ "Jerry Smith",
+ "Cyril Concolato",
+ "David Singer",
+ "Chris Poole"
+ ],
+
+ // name of the WG
+ wg: "HTML Working Group",
+
+ // URI of the public WG page
+ wgURI: "http://www.w3.org/html/wg/",
+
+ // name (without the @w3c.org) of the public mailing to which comments are due
+ wgPublicList: "public-html-media",
+
+ // URI of the patent status for this WG, for Rec-track documents
+ // !!!! IMPORTANT !!!!
+ // This is important for Rec-track documents, do not copy a patent URI from a random
+ // document unless you know what you're doing. If in doubt ask your friendly neighbourhood
+ // Team Contact.
+ wgPatentURI: "http://www.w3.org/2004/01/pp-impl/40318/status",
+
+ noIDLIn: true,
+
+ scheme: "https",
+
+ preProcess: [ mediaSourcePreProcessor ],
+
+ // Empty definitions for objects declared in the document are here to
+ // prevent error messages from being displayed for references to these objects.
+ definitionMap: {},
+
+ postProcess: [ mediaSourcePostProcessor ]
+
+ };
+ </script>
+ <!-- script to register bugs -->
+ <script src="https://dvcs.w3.org/hg/webcomponents/raw-file/tip/assets/scripts/bug-assist.js"></script>
+ <meta name="bug.short_desc" content="[MSE] ">
+ <meta name="bug.product" content="HTML WG">
+ <meta name="bug.component" content="Media Source Extensions">
+
+ <link rel="stylesheet" href="mse.css">
+ <style>
+ .iso-box { font-weight: bold; }
+ .iso-var { font-style: italic; }
+ </style>
+
+ </head>
+ <body>
+ <section id="abstract">
+ This specification defines a <a href="http://www.w3.org/TR/media-source/">Media Source Extensions</a> byte stream format specification based on the ISO Base Media
+ File Format.
+ </section>
+
+ <section id="introduction">
+ <h2>Introduction</h2>
+ <p>This specification defines segment formats for implementations that choose to support the ISO Base Media File Format
+ <a def-id="iso-14496-12"></a> (ISO BMFF).</p> It defines the MIME-type parameters used to signal codecs, and provides
+ the necessary format specific definitions for <a def-id="init-segments"></a>, <a def-id="media-segments"></a>, and <a def-id="random-access-points"></a> required by
+ the <a def-id="byte-stream-formats-section"></a> of the Media Source Extensions spec.</p>
+ </section>
+
+ <section id="mime-parameters">
+ <h2>MIME-type parameters</h2>
+ <p>This section specifies the parameters that can be used in the MIME-type passed to <a def-id="isTypeSupported"></a> or <a def-id="addSourceBuffer"></a>.</p>
+ <p>MIME-types for this specification must conform to the rules outlined for "audio/mp4" and "video/mp4" in <a href="http://tools.ietf.org/html/rfc6381">RFC 6381</a>.
+ </p>
+ <div class="note">Implementations may only implement a subset of the codecs and profiles mentioned in the RFC.</div>
+ </section>
+
+ <section id="iso-init-segments">
+ <h4>Initialization Segments</h4>
+ <p>An ISO BMFF <a def-id="init-segment"></a> is defined in this specification as a single Movie Header Box (<span class="iso-box">moov</span>).</p>
+
+ <p>The user agent must run the <a def-id="eos-decode"></a> if any of the following conditions are met:</p>
+ <ol>
+ <li>The tracks in the Movie Header Box contain samples (i.e. the <span class="iso-var">entry_count</span> in the
+ <span class="iso-box">stts</span>, <span class="iso-box">stsc</span> or <span class="iso-box">stco</span> boxes are not set to zero).</li>
+ <li>A Movie Extends (<span class="iso-box">mvex</span>) box is not contained in the Movie (<span class="iso-box">moov</span>) box to indicate that Movie Fragments are to be expected.</li>
+ </ol>
+ <p>The user agent must handle Edit Boxes (<span class="iso-box">edts</span>), in <a def-id="init-segment"></a>, which provide a mapping of composition times for each track to the global presentation time.</p>
+
+ <p>The user agent must support parameter sets (e.g., PPS/SPS) stored in the sample entry (as defined for avc1/avc2), and should support parameter
+ sets stored inband in the samples themselves (as defined for avc3/avc4).</p>
+ <p class="note">For maximum content interoperability, user agents are strongly advised to support both inband and out-of-band storage of the SPS and PPS.</p>
+
+ <p>Valid top-level boxes such as <span class="iso-box">ftyp</span>, <span class="iso-box">styp</span>, and <span class="iso-box">sidx</span> are
+ allowed to appear before the <span class="iso-box">moov</span> box. These boxes must be accepted and ignored by the user agent and are not
+ considered part of the <a def-id="init-segment"></a> in this specification.</p>
+ </section>
+
+ <section id="iso-media-segments">
+ <h4>Media Segments</h4>
+ <p>An ISO BMFF <a def-id="media-segment"></a> is defined in this specification as a single Movie Fragment Box
+ (<span class="iso-box">moof</span>) followed by one or more Media Data Boxes (<span class="iso-box">mdat</span>).</p>
+ <p>Valid top-level boxes defined in <a def-id="iso-14496-12"></a> other than <span class="iso-box">moov</span>,
+ <span class="iso-box">moof</span>, and <span class="iso-box">mdat</span> are allowed to appear between the end of an
+ <a def-id="init-segment"></a> or <a def-id="media-segment"></a> and before the beginning of a new <a def-id="media-segment"></a>.
+ These boxes must be accepted and ignored by the user agent and are not considered part of the <a def-id="media-segment"></a> in this
+ specification.
+ </p>
+
+ <p>The user agent must run the <a def-id="eos-decode"></a> if any of the following conditions are met:</p>
+ <ol>
+ <li>The Movie Fragment Box does not contain at least one Track Fragment Box (<span class="iso-box">traf</span>).</li>
+ <li>The Movie Fragment Box does not use movie-fragment relative addressing or the flag <span class="iso-var">default-base-is-moof</span> is not set.</li>
+ <li>External data references are being used.</li>
+ <li>At least one Track Fragment Box does not contain a Track Fragment Decode Time Box (<span class="iso-box">tfdt</span>)</li>
+ <li>The Media Data Boxes do not contain all the samples referenced by the Track Fragment Run Boxes (<span class="iso-box">trun</span>) of the Movie Fragment Box.</li>
+ <li>Inband parameter sets are not present in the appropriate samples and parameter sets are not present in the last initialization segment appended.</li>
+ </ol>
+ </section>
+
+ <section id="iso-random-access-points">
+ <h4>Random Access Points</h4>
+ <p>A <a def-id="random-access-point"></a> as defined in this specification corresponds to a Stream Access Point of type 1 or 2 as defined in Annex I of <a def-id="iso-14496-12"></a>.</p>
+ </section>
+
+ <section id="acknowledgements">
+ <h2>Acknowledgments</h2>
+ The editors would like to thank <a def-id="contributors"></a> for their contributions to this specification.
+ </section>
+ </body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/media-source/isobmff-byte-stream-format.html Mon Nov 04 15:42:39 2013 -0800
@@ -0,0 +1,363 @@
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>ISO BMFF Byte Stream Format</title>
+
+
+
+
+
+ <!-- script to register bugs -->
+ <script src="https://dvcs.w3.org/hg/webcomponents/raw-file/tip/assets/scripts/bug-assist.js"></script>
+ <meta name="bug.short_desc" content="[MSE] ">
+ <meta name="bug.product" content="HTML WG">
+ <meta name="bug.component" content="Media Source Extensions">
+
+ <style>/* --- ISSUES/NOTES --- */
+div.issue-title, div.note-title {
+ padding-right: 1em;
+ min-width: 7.5em;
+ color: #b9ab2d;
+}
+div.issue-title { color: #e05252; }
+div.note-title { color: #52e052; }
+div.issue-title span, div.note-title span {
+ text-transform: uppercase;
+}
+div.note, div.issue {
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+.note > p:first-child, .issue > p:first-child { margin-top: 0 }
+.issue, .note {
+ padding: .5em;
+ border-left-width: .5em;
+ border-left-style: solid;
+}
+div.issue, div.note {
+ padding: 0.5em;
+ margin: 1em 0;
+ position: relative;
+ clear: both;
+}
+span.note, span.issue { padding: .1em .5em .15em; }
+
+.issue {
+ border-color: #e05252;
+ background: #fbe9e9;
+}
+.note {
+ border-color: #52e052;
+ background: #e9fbe9;
+}
+
+
+</style><link rel="stylesheet" href="mse.css">
+ <style>
+ .iso-box { font-weight: bold; }
+ .iso-var { font-style: italic; }
+ </style>
+
+ <style>/*****************************************************************
+ * ReSpec 3 CSS
+ * Robin Berjon - http://berjon.com/
+ *****************************************************************/
+
+/* --- INLINES --- */
+em.rfc2119 {
+ text-transform: lowercase;
+ font-variant: small-caps;
+ font-style: normal;
+ color: #900;
+}
+
+h1 acronym, h2 acronym, h3 acronym, h4 acronym, h5 acronym, h6 acronym, a acronym,
+h1 abbr, h2 abbr, h3 abbr, h4 abbr, h5 abbr, h6 abbr, a abbr {
+ border: none;
+}
+
+dfn {
+ font-weight: bold;
+}
+
+a.internalDFN {
+ color: inherit;
+ border-bottom: 1px solid #99c;
+ text-decoration: none;
+}
+
+a.externalDFN {
+ color: inherit;
+ border-bottom: 1px dotted #ccc;
+ text-decoration: none;
+}
+
+a.bibref {
+ text-decoration: none;
+}
+
+cite .bibref {
+ font-style: normal;
+}
+
+code {
+ color: #ff4500;
+}
+
+
+/* --- --- */
+ol.algorithm { counter-reset:numsection; list-style-type: none; }
+ol.algorithm li { margin: 0.5em 0; }
+ol.algorithm li:before { font-weight: bold; counter-increment: numsection; content: counters(numsection, ".") ") "; }
+
+/* --- TOC --- */
+.toc a, .tof a {
+ text-decoration: none;
+}
+
+a .secno, a .figno {
+ color: #000;
+}
+
+ul.tof, ol.tof {
+ list-style: none outside none;
+}
+
+.caption {
+ margin-top: 0.5em;
+ font-style: italic;
+}
+
+/* --- TABLE --- */
+table.simple {
+ border-spacing: 0;
+ border-collapse: collapse;
+ border-bottom: 3px solid #005a9c;
+}
+
+.simple th {
+ background: #005a9c;
+ color: #fff;
+ padding: 3px 5px;
+ text-align: left;
+}
+
+.simple th[scope="row"] {
+ background: inherit;
+ color: inherit;
+ border-top: 1px solid #ddd;
+}
+
+.simple td {
+ padding: 3px 10px;
+ border-top: 1px solid #ddd;
+}
+
+.simple tr:nth-child(even) {
+ background: #f0f6ff;
+}
+
+/* --- DL --- */
+.section dd > p:first-child {
+ margin-top: 0;
+}
+
+.section dd > p:last-child {
+ margin-bottom: 0;
+}
+
+.section dd {
+ margin-bottom: 1em;
+}
+
+.section dl.attrs dd, .section dl.eldef dd {
+ margin-bottom: 0;
+}
+</style><link rel="stylesheet" href="https://www.w3.org/StyleSheets/TR/W3C-ED"><!--[if lt IE 9]><script src='https://www.w3.org/2008/site/js/html5shiv.js'></script><![endif]--></head>
+ <body><div class="head">
+ <p>
+
+ <a href="http://www.w3.org/"><img width="72" height="48" src="https://www.w3.org/Icons/w3c_home" alt="W3C"></a>
+
+ </p>
+ <h1 class="title" id="title">ISO BMFF Byte Stream Format</h1>
+
+ <h2 id="w3c-editor-s-draft-04-november-2013"><abbr title="World Wide Web Consortium">W3C</abbr> Editor's Draft 04 November 2013</h2>
+ <dl>
+
+ <dt>This version:</dt>
+ <dd><a href="http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/isobmff-byte-stream-format.html">http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/isobmff-byte-stream-format.html</a></dd>
+ <dt>Latest published version:</dt>
+ <dd><a href="http://www.w3.org/TR//">http://www.w3.org/TR//</a></dd>
+
+
+ <dt>Latest editor's draft:</dt>
+ <dd><a href="http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/isobmff-byte-stream-format.html">http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/isobmff-byte-stream-format.html</a></dd>
+
+
+
+
+
+
+
+
+ <dt>Editors:</dt>
+ <dd><span>Aaron Colwell</span>, <a href="http://www.google.com/">Google Inc.</a></dd>
+<dd><span>Adrian Bateman</span>, <a href="http://www.microsoft.com/">Microsoft Corporation</a></dd>
+<dd><span>Mark Watson</span>, <a href="http://www.netflix.com/">Netflix Inc.</a></dd>
+
+
+ </dl>
+
+
+
+
+
+ <p class="copyright">
+ <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a> ©
+ 2013
+
+ <a href="http://www.w3.org/"><abbr title="World Wide Web Consortium">W3C</abbr></a><sup>®</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts Institute of Technology">MIT</abbr></a>,
+ <a href="http://www.ercim.eu/"><abbr title="European Research Consortium for Informatics and Mathematics">ERCIM</abbr></a>,
+ <a href="http://www.keio.ac.jp/">Keio</a>, <a href="http://ev.buaa.edu.cn/">Beihang</a>), All Rights Reserved.
+ <abbr title="World Wide Web Consortium">W3C</abbr> <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a> and
+ <a href="http://www.w3.org/Consortium/Legal/copyright-documents">document use</a> rules apply.
+ </p>
+
+
+ <hr>
+</div>
+ <section id="abstract" class="introductory"><h2>Abstract</h2><p>
+ This specification defines a <a href="http://www.w3.org/TR/media-source/">Media Source Extensions</a> byte stream format specification based on the ISO Base Media
+ File Format.
+ </p></section><section id="sotd" class="introductory"><h2>Status of This Document</h2>
+
+
+
+ <p>
+ <em>This section describes the status of this document at the time of its publication. Other
+ documents may supersede this document. A list of current <abbr title="World Wide Web Consortium">W3C</abbr> publications and the latest revision
+ of this technical report can be found in the <a href="http://www.w3.org/TR/"><abbr title="World Wide Web Consortium">W3C</abbr> technical reports
+ index</a> at http://www.w3.org/TR/.</em>
+ </p>
+
+ <p>
+ This document was published by the <a href="http://www.w3.org/html/wg/">HTML Working Group</a> as an Editor's Draft.
+
+
+ If you wish to make comments regarding this document, please send them to
+ <a href="mailto:public-html-media@w3.org">public-html-media@w3.org</a>
+ (<a href="mailto:public-html-media-request@w3.org?subject=subscribe">subscribe</a>,
+ <a href="http://lists.w3.org/Archives/Public/public-html-media/">archives</a>).
+
+
+
+
+ All comments are welcome.
+
+
+ </p><p>
+ Publication as an Editor's Draft does not imply endorsement by the <abbr title="World Wide Web Consortium">W3C</abbr> Membership.
+ This is a draft document and may be updated, replaced or obsoleted by other documents at
+ any time. It is inappropriate to cite this document as other than work in progress.
+ </p>
+
+
+ <p>
+
+ This document was produced by a group operating under the
+ <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5 February 2004 <abbr title="World Wide Web Consortium">W3C</abbr> Patent Policy</a>.
+
+
+
+
+ <abbr title="World Wide Web Consortium">W3C</abbr> maintains a <a href="http://www.w3.org/2004/01/pp-impl/40318/status" rel="disclosure">public list of any patent disclosures</a>
+
+ made in connection with the deliverables of the group; that page also includes instructions for
+ disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains
+ <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential Claim(s)</a> must disclose the
+ information in accordance with <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section
+ 6 of the <abbr title="World Wide Web Consortium">W3C</abbr> Patent Policy</a>.
+
+
+ </p>
+
+
+
+
+</section><section id="toc"><h2 class="introductory">Table of Contents</h2><ul class="toc"><li class="tocline"><a href="#introduction" class="tocxref"><span class="secno">1. </span>Introduction</a></li><li class="tocline"><a href="#mime-parameters" class="tocxref"><span class="secno">2. </span>MIME-type parameters</a></li><li class="tocline"><a href="#iso-init-segments" class="tocxref"><span class="secno">3. </span>Initialization Segments</a></li><li class="tocline"><a href="#iso-media-segments" class="tocxref"><span class="secno">4. </span>Media Segments</a></li><li class="tocline"><a href="#iso-random-access-points" class="tocxref"><span class="secno">5. </span>Random Access Points</a></li><li class="tocline"><a href="#acknowledgements" class="tocxref"><span class="secno">6. </span>Acknowledgments</a></li></ul></section>
+
+ <section id="introduction">
+ <!--OddPage--><h2><span class="secno">1. </span>Introduction</h2>
+ <p>This specification defines segment formats for implementations that choose to support the ISO Base Media File Format
+ <a href="http://standards.iso.org/ittf/PubliclyAvailableStandards/c061988_ISO_IEC_14496-12_2012.zip">ISO/IEC 14496-12</a> (ISO BMFF).</p> It defines the MIME-type parameters used to signal codecs, and provides
+ the necessary format specific definitions for <a href="http://www.w3.org/TR/media-source/#init-segment">initialization segments</a>, <a href="http://www.w3.org/TR/media-source/#media-segment">media segments</a>, and <a href="http://www.w3.org/TR/media-source/#random-access-point">random access points</a> required by
+ the <a href="http://www.w3.org/TR/media-source/#byte-stream-formats">byte stream formats section</a> of the Media Source Extensions spec.<p></p>
+ </section>
+
+ <section id="mime-parameters">
+ <!--OddPage--><h2><span class="secno">2. </span>MIME-type parameters</h2>
+ <p>This section specifies the parameters that can be used in the MIME-type passed to <code><a href="http://www.w3.org/TR/media-source/#widl-MediaSource-isTypeSupported-boolean-DOMString-type">isTypeSupported()</a></code> or <code><a href="http://www.w3.org/TR/media-source/#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type">addSourceBuffer()</a></code>.</p>
+ <p>MIME-types for this specification must conform to the rules outlined for "audio/mp4" and "video/mp4" in <a href="http://tools.ietf.org/html/rfc6381">RFC 6381</a>.
+ </p>
+ <div class="note"><div class="note-title"><span>Note</span></div><div class="">Implementations may only implement a subset of the codecs and profiles mentioned in the RFC.</div></div>
+ </section>
+
+ <section id="iso-init-segments">
+ <!--OddPage--><h2><span class="secno">3. </span>Initialization Segments</h2>
+ <p>An ISO BMFF <a href="http://www.w3.org/TR/media-source/#init-segment">initialization segment</a> is defined in this specification as a single Movie Header Box (<span class="iso-box">moov</span>).</p>
+
+ <p>The user agent must run the <a href="http://www.w3.org/TR/media-source/#end-of-stream-algorithm">end of stream algorithm</a> with the <var>error</var> parameter set to <code><a href="http://www.w3.org/TR/media-source/#idl-def-EndOfStreamError.decode">"decode"</a></code> if any of the following conditions are met:</p>
+ <ol>
+ <li>The tracks in the Movie Header Box contain samples (i.e. the <span class="iso-var">entry_count</span> in the
+ <span class="iso-box">stts</span>, <span class="iso-box">stsc</span> or <span class="iso-box">stco</span> boxes are not set to zero).</li>
+ <li>A Movie Extends (<span class="iso-box">mvex</span>) box is not contained in the Movie (<span class="iso-box">moov</span>) box to indicate that Movie Fragments are to be expected.</li>
+ </ol>
+ <p>The user agent must handle Edit Boxes (<span class="iso-box">edts</span>), in <a href="http://www.w3.org/TR/media-source/#init-segment">initialization segment</a>, which provide a mapping of composition times for each track to the global presentation time.</p>
+
+ <p>The user agent must support parameter sets (e.g., PPS/SPS) stored in the sample entry (as defined for avc1/avc2), and should support parameter
+ sets stored inband in the samples themselves (as defined for avc3/avc4).</p>
+ <div class="note"><div class="note-title"><span>Note</span></div><p class="">For maximum content interoperability, user agents are strongly advised to support both inband and out-of-band storage of the SPS and PPS.</p></div>
+
+ <p>Valid top-level boxes such as <span class="iso-box">ftyp</span>, <span class="iso-box">styp</span>, and <span class="iso-box">sidx</span> are
+ allowed to appear before the <span class="iso-box">moov</span> box. These boxes must be accepted and ignored by the user agent and are not
+ considered part of the <a href="http://www.w3.org/TR/media-source/#init-segment">initialization segment</a> in this specification.</p>
+ </section>
+
+ <section id="iso-media-segments">
+ <!--OddPage--><h2><span class="secno">4. </span>Media Segments</h2>
+ <p>An ISO BMFF <a href="http://www.w3.org/TR/media-source/#media-segment">media segment</a> is defined in this specification as a single Movie Fragment Box
+ (<span class="iso-box">moof</span>) followed by one or more Media Data Boxes (<span class="iso-box">mdat</span>).</p>
+ <p>Valid top-level boxes defined in <a href="http://standards.iso.org/ittf/PubliclyAvailableStandards/c061988_ISO_IEC_14496-12_2012.zip">ISO/IEC 14496-12</a> other than <span class="iso-box">moov</span>,
+ <span class="iso-box">moof</span>, and <span class="iso-box">mdat</span> are allowed to appear between the end of an
+ <a href="http://www.w3.org/TR/media-source/#init-segment">initialization segment</a> or <a href="http://www.w3.org/TR/media-source/#media-segment">media segment</a> and before the beginning of a new <a href="http://www.w3.org/TR/media-source/#media-segment">media segment</a>.
+ These boxes must be accepted and ignored by the user agent and are not considered part of the <a href="http://www.w3.org/TR/media-source/#media-segment">media segment</a> in this
+ specification.
+ </p>
+
+ <p>The user agent must run the <a href="http://www.w3.org/TR/media-source/#end-of-stream-algorithm">end of stream algorithm</a> with the <var>error</var> parameter set to <code><a href="http://www.w3.org/TR/media-source/#idl-def-EndOfStreamError.decode">"decode"</a></code> if any of the following conditions are met:</p>
+ <ol>
+ <li>The Movie Fragment Box does not contain at least one Track Fragment Box (<span class="iso-box">traf</span>).</li>
+ <li>The Movie Fragment Box does not use movie-fragment relative addressing or the flag <span class="iso-var">default-base-is-moof</span> is not set.</li>
+ <li>External data references are being used.</li>
+ <li>At least one Track Fragment Box does not contain a Track Fragment Decode Time Box (<span class="iso-box">tfdt</span>)</li>
+ <li>The Media Data Boxes do not contain all the samples referenced by the Track Fragment Run Boxes (<span class="iso-box">trun</span>) of the Movie Fragment Box.</li>
+ <li>Inband parameter sets are not present in the appropriate samples and parameter sets are not present in the last initialization segment appended.</li>
+ </ol>
+ </section>
+
+ <section id="iso-random-access-points">
+ <!--OddPage--><h2><span class="secno">5. </span>Random Access Points</h2>
+ <p>A <a href="http://www.w3.org/TR/media-source/#random-access-point">random access point</a> as defined in this specification corresponds to a Stream Access Point of type 1 or 2 as defined in Annex I of <a href="http://standards.iso.org/ittf/PubliclyAvailableStandards/c061988_ISO_IEC_14496-12_2012.zip">ISO/IEC 14496-12</a>.</p>
+ </section>
+
+ <section id="acknowledgements">
+ <!--OddPage--><h2><span class="secno">6. </span>Acknowledgments</h2>
+ The editors would like to thank Chris Poole, Cyril Concolato, David Singer, Jerry Smith, Joe Steele, John Simmons, Kevin Streeter, Michael Thornburgh, and Steven Robertson for their contributions to this specification.
+ </section>
+
+
+<form action="//www.w3.org/Bugs/Public/enter_bug.cgi" target="_blank" style="position: fixed; width: 10em; top: 1em; right: 1em; font-family: Tahoma, sans-serif; font-size: 11px; opacity: 0.8; text-align: right;">See a problem? Select text and <input type="submit" accesskey="f" value="file a bug" style="font-family: Tahoma, sans-serif; font-size: 10px;"><input type="hidden" name="comment" value=""><input type="hidden" name="short_desc" value="[MSE] "><input type="hidden" name="product" value="HTML WG"><input type="hidden" name="component" value="Media Source Extensions">.</form></body></html>
--- a/media-source/media-source-respec.html Mon Nov 04 11:16:03 2013 -0800
+++ b/media-source/media-source-respec.html Mon Nov 04 15:42:39 2013 -0800
@@ -125,8 +125,7 @@
<p>This specification allows JavaScript to dynamically construct media streams for <audio> and <video>.
It defines objects that allow JavaScript to pass media segments to an <a def-id="videoref" name="htmlmediaelement">HTMLMediaElement</a> [[HTML5]].
A buffering model is also included to describe how the user agent acts when different media segments are
- appended at different times. Byte stream specifications for WebM, ISO Base Media File Format, and MPEG-2 Transport Streams are given to specify the
- expected format of byte streams used with these extensions.</p>
+ appended at different times. Byte stream specifications used with these extensions are available in the <a def-id="byte-stream-format-registry"></a>.</p>
<img src="pipeline_model.png" alt="Media Source Pipeline Model Diagram">
<section id="goals">
@@ -137,7 +136,7 @@
<li>Define a splicing and buffering model that facilitates use cases like adaptive streaming, ad-insertion, time-shifting, and video editing.</li>
<li>Minimize the need for media parsing in JavaScript.</li>
<li>Leverage the browser cache as much as possible.</li>
- <li>Provide byte stream definitions for WebM, the ISO Base Media File Format, and MPEG-2 Transport Streams.</li>
+ <li>Provide requirements for byte stream format specifications.</li>
<li>Not require support for any particular media format or codec.</li>
</ul>
<p>This specification defines:</p>
@@ -192,12 +191,12 @@
<dt id="init-segment">Initialization Segment</dt>
<dd>
<p>A sequence of bytes that contain all of the initialization information required to decode a sequence of <a def-id="media-segments"></a>. This includes codec initialization data, <a def-id="track-id"></a> mappings for multiplexed segments, and timestamp offsets (e.g. edit lists).</p>
- <p class="note">The <a def-id="byte-stream-format-specs"></a> contain format specific examples.</p>
+ <p class="note">The <a def-id="byte-stream-format-specs"></a> in the <a def-id="byte-stream-format-registry"></a> contain format specific examples.</p>
<dt id="media-segment">Media Segment</dt>
<dd>
<p>A sequence of bytes that contain packetized & timestamped media data for a portion of the <a def-id="media-timeline"></a>. Media segments are always associated with the most recently appended <a def-id="init-segment"></a>.</p>
- <p class="note">The <a def-id="byte-stream-format-specs"></a> contain format specific examples.</p>
+ <p class="note">The <a def-id="byte-stream-format-specs"></a> in the <a def-id="byte-stream-format-registry"></a> contain format specific examples.</p>
</dd>
<dt id="mediasource-object-url">MediaSource object URL</dt>
@@ -2073,12 +2072,15 @@
<section id="byte-stream-formats">
<h2>Byte Stream Formats</h2>
- <p>The bytes provided through <a def-id="appendBuffer"></a> and <a def-id="appendStream"></a> for a <a>SourceBuffer</a> form a logical byte stream. The format of this byte stream depends on the media container format in use and is defined in a byte stream format specification. Byte stream format specifications based on WebM , the ISO Base Media File Format, and MPEG-2 Transport Streams are provided below. These format specifications are intended to be the authoritative source for how data from these containers is formatted and passed to a <a>SourceBuffer</a>. If a <a>MediaSource</a> implementation claims to support any of these container formats, then it must implement the corresponding byte stream format specification described below.</p>
- <p class="note">The byte stream format specifications below are not intended to define new storage formats. They simply outline the subset of
+ <p>The bytes provided through <a def-id="appendBuffer"></a> and <a def-id="appendStream"></a> for a <a>SourceBuffer</a> form a logical byte stream. The format and
+ semantics of these byte streams are defined in <dfn id="byte-stream-format-specs">byte stream format specifications</dfn>. The <a def-id="byte-stream-format-registry"></a> is the
+ authoritative source for <a def-id="byte-stream-format-specs"></a> that can be accepted by a <a>SourceBuffer</a>. If a <a>MediaSource</a> implementation claims
+ to support any of the MIME types in the registry, then it must implement the corresponding byte stream format specification.</p>
+ <p class="note">The byte stream format specifications in the registry are not intended to define new storage formats. They simply outline the subset of
existing storage format structures that implementations of this specification will accept.</p>
<p class="note">Byte stream format parsing and validation is implemented in the <a def-id="segment-parser-loop"></a> algorithm.</p>
- <p>This section provides general requirements for all byte stream formats:</p>
+ <p>This section provides general requirements for all byte stream format specifications:</p>
<ul>
<li>A byte stream format specification must define <a def-id="init-segments"></a> and <a def-id="media-segments"></a>.</li>
<li>It must be possible to identify segment boundaries and segment type (initialization or media) by examining the byte stream alone.</li>
@@ -2137,181 +2139,8 @@
</ul>
<p>Byte stream specifications must at a minimum define constraints which ensure that the above requirements hold. Additional constraints may be defined, for example to simplify implementation.</p>
- <section id="webm" class="nonnormative">
- <h3>WebM Byte Streams</h3>
- <p>This section defines segment formats for implementations that choose to support WebM.</p>
-
- <section id="webm-init-segments">
- <h4>Initialization Segments</h4>
- <p>A WebM <a def-id="init-segment"></a> must contain a subset of the elements at the start of a typical WebM file.</p>
-
- <p>The user agent must run the <a def-id="eos-decode"></a> if any of the following conditions are not met:</p>
- <ol>
- <li>The <a def-id="init-segment"></a> must start with an <a def-id="webm-ebml-header"></a> element, followed by a <a def-id="webm-segment"></a> header.</li>
- <li>The size value in the <a def-id="webm-segment"></a> header must signal an "unknown size" or contain a value large enough to include the <a def-id="webm-info"></a> and <a def-id="webm-tracks"></a> elements that follow.</li>
- <li>A <a def-id="webm-info"></a> element and a <a def-id="webm-tracks"></a> element must appear, in that order, after the <a def-id="webm-segment"></a> header and before any further <a def-id="webm-ebml-header"></a> or <a def-id="webm-cluster"></a> elements.
- </li>
- </ol>
- The user agent must accept and ignore any elements other than an <a def-id="webm-ebml-header"></a> or a <a def-id="webm-cluster"></a> that occur before, in between, or after the <a def-id="webm-info"></a> and
- <a def-id="webm-tracks"></a> elements.
- </section>
-
- <section id="webm-media-segments">
- <h4>Media Segments</h4>
- <p>A WebM <a def-id="media-segment"></a> is a single <a def-id="webm-cluster"></a> element.</p>
-
- <p>The user agent uses the following rules when interpreting content in a <a def-id="webm-cluster"></a>:</p>
- <ol>
- <li>The TimecodeScale in the <a def-id="webm-init-segment"></a> most recently appended applies to all timestamps in the <a def-id="webm-cluster"></a></li>
- <li>The Timecode element in the <a def-id="webm-cluster"></a> contains a <a def-id="presentation-timestamp"></a> in TimecodeScale units.</li>
- <li>The Cluster header may contain an "unknown" size value. If it does then the end of the cluster is reached when another <a def-id="webm-cluster"></a> header or an element header that indicates the start
- of an <a def-id="webm-init-segment"></a> is encountered.</li>
- </ol>
-
- <p>The user agent must run the <a def-id="eos-decode"></a> if any of the following conditions are not met:</p>
- <ol>
- <li>The Timecode element must appear before any Block & SimpleBlock elements in a <a def-id="webm-cluster"></a>.</li>
- <li>Block & SimpleBlock elements are in time increasing order consistent with the <a def-id="webm-spec"></a>.</li>
- <li>If the most recent <a def-id="webm-init-segment"></a> describes multiple tracks, then blocks from all the tracks must be interleaved in time increasing order. At least one block from all audio and video
- tracks must be present.</li>
- </ol>
-
- The user agent must accept and ignore <a def-id="webm-cues"></a> or <a def-id="webm-chapters"></a> elements that follow a <a def-id="webm-cluster"></a> element.
- </section>
-
- <section id="webm-random-access-points">
- <h4>Random Access Points</h4>
- <p>A SimpleBlock element with its Keyframe flag set signals the location of a <a def-id="random-access-point"></a> for that track. Media segments containing multiple tracks are only considered a random access
- point if the first SimpleBlock for each track has its Keyframe flag set. The order of the multiplexed blocks must conform to the <a def-id="webm-muxer-guidelines"></a>.</p>
- </section>
- </section>
-
- <section id="iso" class="nonnormative">
- <h3>ISO Base Media File Format Byte Streams</h3>
- <p>This section defines segment formats for implementations that choose to support the ISO Base Media File Format
- <a def-id="iso-14496-12"></a> (ISO BMFF).</p>
-
- <section id="iso-init-segments">
- <h4>Initialization Segments</h4>
- <p>An ISO BMFF <a def-id="init-segment"></a> is defined in this specification as a single Movie Header Box (<span class="iso-box">moov</span>).</p>
-
- <p>The user agent must run the <a def-id="eos-decode"></a> if any of the following conditions are met:</p>
- <ol>
- <li>The tracks in the Movie Header Box contain samples (i.e. the <span class="iso-var">entry_count</span> in the
- <span class="iso-box">stts</span>, <span class="iso-box">stsc</span> or <span class="iso-box">stco</span> boxes are not set to zero).</li>
- <li>A Movie Extends (<span class="iso-box">mvex</span>) box is not contained in the Movie (<span class="iso-box">moov</span>) box to indicate that Movie Fragments are to be expected.</li>
- </ol>
- <p>The user agent must handle Edit Boxes (<span class="iso-box">edts</span>), in <a def-id="init-segment"></a>, which provide a mapping of composition times for each track to the global presentation time.</p>
-
- <p>The user agent must support parameter sets (e.g., PPS/SPS) stored in the sample entry (as defined for avc1/avc2), and should support parameter
- sets stored inband in the samples themselves (as defined for avc3/avc4).</p>
- <p class="note">For maximum content interoperability, user agents are strongly advised to support both inband and out-of-band storage of the SPS and PPS.</p>
-
- <p>Valid top-level boxes such as <span class="iso-box">ftyp</span>, <span class="iso-box">styp</span>, and <span class="iso-box">sidx</span> are
- allowed to appear before the <span class="iso-box">moov</span> box. These boxes must be accepted and ignored by the user agent and are not
- considered part of the <a def-id="init-segment"></a> in this specification.</p>
- </section>
-
- <section id="iso-media-segments">
- <h4>Media Segments</h4>
- <p>An ISO BMFF <a def-id="media-segment"></a> is defined in this specification as a single Movie Fragment Box
- (<span class="iso-box">moof</span>) followed by one or more Media Data Boxes (<span class="iso-box">mdat</span>).</p>
- <p>Valid top-level boxes defined in <a def-id="iso-14496-12"></a> other than <span class="iso-box">moov</span>,
- <span class="iso-box">moof</span>, and <span class="iso-box">mdat</span> are allowed to appear between the end of an
- <a def-id="init-segment"></a> or <a def-id="media-segment"></a> and before the beginning of a new <a def-id="media-segment"></a>.
- These boxes must be accepted and ignored by the user agent and are not considered part of the <a def-id="media-segment"></a> in this
- specification.
- </p>
-
- <p>The user agent must run the <a def-id="eos-decode"></a> if any of the following conditions are met:</p>
- <ol>
- <li>The Movie Fragment Box does not contain at least one Track Fragment Box (<span class="iso-box">traf</span>).</li>
- <li>The Movie Fragment Box does not use movie-fragment relative addressing or the flag <span class="iso-var">default-base-is-moof</span> is not set.</li>
- <li>External data references are being used.</li>
- <li>At least one Track Fragment Box does not contain a Track Fragment Decode Time Box (<span class="iso-box">tfdt</span>)</li>
- <li>The Media Data Boxes do not contain all the samples referenced by the Track Fragment Run Boxes (<span class="iso-box">trun</span>) of the Movie Fragment Box.</li>
- <li>Inband parameter sets are not present in the appropriate samples and parameter sets are not present in the last initialization segment appended.</li>
- </ol>
- </section>
-
- <section id="iso-random-access-points">
- <h4>Random Access Points</h4>
- <p>A <a def-id="random-access-point"></a> as defined in this specification corresponds to a Stream Access Point of type 1 or 2 as defined in Annex I of <a def-id="iso-14496-12"></a>.</p>
- </section>
- </section>
-
- <section id="mpeg2ts" class="nonnormative">
- <h3>MPEG-2 Transport Stream Byte Streams</h3>
- <p>This section defines segment formats for implementations that choose to support MPEG-2 Transport Streams
- (MPEG-2 TS) specified in <a def-id="iso-13818-1"></a>.</p>
-
- <section id="mpeg2ts-general">
- <h4>General</h4>
- <p>MPEG-2 TS media and initialization segments must conform to the MPEG-2 TS Adaptive Profile (ISO/IEC 13818-1:2012 Amd. 2).</p>
-
- <p>The user agent must run the <a def-id="eos-decode"></a> if any of the following conditions are met:</p>
- <ol>
- <li>Segments do not contain complete MPEG-2 TS packets.</li>
- <li>Segments do not contain complete PES packets and sections.</li>
- <li>Segments contain more than one program.</li>
- <li>At least one MPEG-2 TS packet has a non-zero transport_error_indicator.</li>
- </ol>
- </section>
- <section id="mpeg2ts-init-segments">
- <h4>Initialization Segments</h4>
- <p>An MPEG-2 TS initialization segment consists of a single PAT and a single PMT.</p>
- <p>The user agent must run the <a def-id="eos-decode"></a> if any of the following conditions are met:</p>
- <ol>
- <li>A PAT is not present in the <a def-id="init-segment"></a></li>
- <li>A PMT is not present in the <a def-id="init-segment"></a></li>
- </ol>
- The user agent must accept and ignore other SI, such as CAT, that are invariant for all subsequent media segments.
- </section>
-
- <section id="mpeg2ts-media-segments">
- <h4>Media Segments</h4>
-
- <p>The user agent must run the <a def-id="eos-decode"></a> if any of the following conditions are met:</p>
- <ol>
- <li>A media segment relies on initialization information in another media segment.</li>
- <li>At least one PES packet does not have a PTS timestamp.</li>
- <li>PCR is not present in the Segment prior to the first byte of a TS packet payload containing media data.</li>
- </ol>
-
- The user agent will accept and ignore PSI that is identical to the information in the last initialization segment which may appear repeatedly throughout the segment.
- </section>
-
- <section id="mpeg2ts-random-access-points">
- <h4>Random Access Points</h4>
- <p>A random access point as defined in this specification corresponds to Elementary Stream Random Access Point as defined in
- <a def-id="iso-13818-1"></a>.</p>
- </section>
- <section id="mpeg2ts-discontinuities">
- <h4>Timestamp Rollover & Discontinuities</h4>
- <p>Timestamp rollovers and discontinuities must be handled by the UA. The UA's MPEG-2 TS implementation must maintain an internal offset
- variable, <dfn id="mpeg2ts-timestampOffset">MPEG2TS_timestampOffset</dfn>, to keep track of the offset that needs to be applied to timestamps
- that have rolled over or are part of a discontinuity. <var>MPEG2TS_timestampOffset</var> is initially set to 0 when the <a>SourceBuffer</a> is
- created. This offset must be applied to the timestamps as part of the conversion process from MPEG-2 TS packets
- into <a def-id="coded-frames"></a> for the <a def-id="coded-frame-processing-algorithm"></a>. This results in the coded frame timestamps
- for a packet being computed by the following equations:</p>
- <pre>
-Coded Frame Presentation Timestamp = (MPEG-2 TS presentation timestamp) + <var>MPEG2TS_timestampOffset</var>
-Coded Frame Decode Timestamp = (MPEG-2 TS decode timestamp) + <var>MPEG2TS_timestampOffset</var></pre>
-
- <p><a def-id="mpeg2ts-timestampOffset"></a> is updated in the following ways:</p>
- <ul>
- <li>Each time a timestamp rollover is detected, 2^33 must be added to <var>MPEG2TS_timestampOffset</var>.</li>
- <li>When a discontinuity is detected, <var>MPEG2TS_timestampOffset</var> must be adjusted to make the timestamps after the discontinuity appear
- to come immediately after the timestamps before the discontinuity.</li>
- <li>When <a def-id="abort"></a> is called, <var>MPEG2TS_timestampOffset</var> must be set to 0.</li>
- <li>When <a def-id="timestampOffset"></a> is successfully set, <var>MPEG2TS_timestampOffset</var> must be set to 0.</li>
- </ul>
- </section>
- </section>
</section>
-
-
<section id="examples">
<h2>Examples</h2>
<p>Example use of the Media Source Extensions</p>
@@ -2428,7 +2257,15 @@
</thead>
<tbody>
<tr>
- <td>29 October 2013</td>
+ <td>04 November 2013</td>
+ <td>
+ <ul>
+ <li>Bug 23441 - Established MSE byte stream format registry and extracted byte stream format text into separate documents.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="https://dvcs.w3.org/hg/html-media/raw-file/15e7e8f7eecd/media-source/media-source.html">29 October 2013</a></td>
<td>
<ul>
<li>Bug 23553 - Fixed segment parser loop so it doesn't appear to prematurely remove the media segment header.</li>
--- a/media-source/media-source.html Mon Nov 04 11:16:03 2013 -0800
+++ b/media-source/media-source.html Mon Nov 04 15:42:39 2013 -0800
@@ -523,7 +523,7 @@
-</section><section id="toc"><h2 class="introductory">Table of Contents</h2><ul class="toc"><li class="tocline"><a href="#introduction" class="tocxref"><span class="secno">1. </span>Introduction</a><ul class="toc"><li class="tocline"><a href="#goals" class="tocxref"><span class="secno">1.1 </span>Goals</a></li><li class="tocline"><a href="#definitions" class="tocxref"><span class="secno">1.2 </span>Definitions</a></li></ul></li><li class="tocline"><a href="#mediasource" class="tocxref"><span class="secno">2. </span>MediaSource Object</a><ul class="toc"><li class="tocline"><a href="#attributes" class="tocxref"><span class="secno">2.1 </span>Attributes</a></li><li class="tocline"><a href="#methods" class="tocxref"><span class="secno">2.2 </span>Methods</a></li><li class="tocline"><a href="#mediasource-events" class="tocxref"><span class="secno">2.3 </span>Event Summary</a></li><li class="tocline"><a href="#mediasource-algorithms" class="tocxref"><span class="secno">2.4 </span>Algorithms</a><ul class="toc"><li class="tocline"><a href="#mediasource-attach" class="tocxref"><span class="secno">2.4.1 </span>Attaching to a media element</a></li><li class="tocline"><a href="#mediasource-detach" class="tocxref"><span class="secno">2.4.2 </span>Detaching from a media element</a></li><li class="tocline"><a href="#mediasource-seeking" class="tocxref"><span class="secno">2.4.3 </span>Seeking</a></li><li class="tocline"><a href="#buffer-monitoring" class="tocxref"><span class="secno">2.4.4 </span>SourceBuffer Monitoring</a></li><li class="tocline"><a href="#active-source-buffer-changes" class="tocxref"><span class="secno">2.4.5 </span>Changes to selected/enabled track state</a></li><li class="tocline"><a href="#duration-change-algorithm" class="tocxref"><span class="secno">2.4.6 </span>Duration change</a></li><li class="tocline"><a href="#end-of-stream-algorithm" class="tocxref"><span class="secno">2.4.7 </span>End of stream algorithm</a></li></ul></li></ul></li><li class="tocline"><a href="#sourcebuffer" class="tocxref"><span class="secno">3. </span>SourceBuffer Object</a><ul class="toc"><li class="tocline"><a href="#attributes-1" class="tocxref"><span class="secno">3.1 </span>Attributes</a></li><li class="tocline"><a href="#methods-1" class="tocxref"><span class="secno">3.2 </span>Methods</a></li><li class="tocline"><a href="#track-buffers" class="tocxref"><span class="secno">3.3 </span>Track Buffers</a></li><li class="tocline"><a href="#sourcebuffer-events" class="tocxref"><span class="secno">3.4 </span>Event Summary</a></li><li class="tocline"><a href="#sourcebuffer-algorithms" class="tocxref"><span class="secno">3.5 </span>Algorithms</a><ul class="toc"><li class="tocline"><a href="#sourcebuffer-segment-parser-loop" class="tocxref"><span class="secno">3.5.1 </span>Segment Parser Loop</a></li><li class="tocline"><a href="#sourcebuffer-reset-parser-state" class="tocxref"><span class="secno">3.5.2 </span>Reset Parser State</a></li><li class="tocline"><a href="#sourcebuffer-append-error" class="tocxref"><span class="secno">3.5.3 </span>Append Error Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-prepare-append" class="tocxref"><span class="secno">3.5.4 </span>Prepare Append Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-buffer-append" class="tocxref"><span class="secno">3.5.5 </span>Buffer Append Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-stream-append-loop" class="tocxref"><span class="secno">3.5.6 </span>Stream Append Loop</a></li><li class="tocline"><a href="#sourcebuffer-init-segment-received" class="tocxref"><span class="secno">3.5.7 </span>Initialization Segment Received</a></li><li class="tocline"><a href="#sourcebuffer-coded-frame-processing" class="tocxref"><span class="secno">3.5.8 </span>Coded Frame Processing</a></li><li class="tocline"><a href="#sourcebuffer-coded-frame-removal" class="tocxref"><span class="secno">3.5.9 </span>Coded Frame Removal Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-coded-frame-eviction" class="tocxref"><span class="secno">3.5.10 </span>Coded Frame Eviction Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-audio-splice-frame-algorithm" class="tocxref"><span class="secno">3.5.11 </span>Audio Splice Frame Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-audio-splice-rendering-algorithm" class="tocxref"><span class="secno">3.5.12 </span>Audio Splice Rendering Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-text-splice-frame-algorithm" class="tocxref"><span class="secno">3.5.13 </span>Text Splice Frame Algorithm</a></li></ul></li></ul></li><li class="tocline"><a href="#sourcebufferlist" class="tocxref"><span class="secno">4. </span>SourceBufferList Object</a><ul class="toc"><li class="tocline"><a href="#attributes-2" class="tocxref"><span class="secno">4.1 </span>Attributes</a></li><li class="tocline"><a href="#methods-2" class="tocxref"><span class="secno">4.2 </span>Methods</a></li><li class="tocline"><a href="#sourcebufferlist-events" class="tocxref"><span class="secno">4.3 </span>Event Summary</a></li></ul></li><li class="tocline"><a href="#videoplaybackquality" class="tocxref"><span class="secno">5. </span>VideoPlaybackQuality Object</a><ul class="toc"><li class="tocline"><a href="#attributes-3" class="tocxref"><span class="secno">5.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#url" class="tocxref"><span class="secno">6. </span>URL Object Extensions</a><ul class="toc"><li class="tocline"><a href="#methods-3" class="tocxref"><span class="secno">6.1 </span>Methods</a></li></ul></li><li class="tocline"><a href="#htmlmediaelement-extensions" class="tocxref"><span class="secno">7. </span>HTMLMediaElement Extensions</a></li><li class="tocline"><a href="#htmlvideoelement-extensions" class="tocxref"><span class="secno">8. </span>HTMLVideoElement Extensions</a><ul class="toc"><li class="tocline"><a href="#methods-4" class="tocxref"><span class="secno">8.1 </span>Methods</a></li></ul></li><li class="tocline"><a href="#audio-track-extensions" class="tocxref"><span class="secno">9. </span>AudioTrack Extensions</a><ul class="toc"><li class="tocline"><a href="#attributes-4" class="tocxref"><span class="secno">9.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#video-track-extensions" class="tocxref"><span class="secno">10. </span>VideoTrack Extensions</a><ul class="toc"><li class="tocline"><a href="#attributes-5" class="tocxref"><span class="secno">10.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#text-track-extensions" class="tocxref"><span class="secno">11. </span>TextTrack Extensions</a><ul class="toc"><li class="tocline"><a href="#attributes-6" class="tocxref"><span class="secno">11.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#byte-stream-formats" class="tocxref"><span class="secno">12. </span>Byte Stream Formats</a><ul class="toc"><li class="tocline"><a href="#webm" class="tocxref"><span class="secno">12.1 </span>WebM Byte Streams</a><ul class="toc"><li class="tocline"><a href="#webm-init-segments" class="tocxref"><span class="secno">12.1.1 </span>Initialization Segments</a></li><li class="tocline"><a href="#webm-media-segments" class="tocxref"><span class="secno">12.1.2 </span>Media Segments</a></li><li class="tocline"><a href="#webm-random-access-points" class="tocxref"><span class="secno">12.1.3 </span>Random Access Points</a></li></ul></li><li class="tocline"><a href="#iso" class="tocxref"><span class="secno">12.2 </span>ISO Base Media File Format Byte Streams</a><ul class="toc"><li class="tocline"><a href="#iso-init-segments" class="tocxref"><span class="secno">12.2.1 </span>Initialization Segments</a></li><li class="tocline"><a href="#iso-media-segments" class="tocxref"><span class="secno">12.2.2 </span>Media Segments</a></li><li class="tocline"><a href="#iso-random-access-points" class="tocxref"><span class="secno">12.2.3 </span>Random Access Points</a></li></ul></li><li class="tocline"><a href="#mpeg2ts" class="tocxref"><span class="secno">12.3 </span>MPEG-2 Transport Stream Byte Streams</a><ul class="toc"><li class="tocline"><a href="#mpeg2ts-general" class="tocxref"><span class="secno">12.3.1 </span>General</a></li><li class="tocline"><a href="#mpeg2ts-init-segments" class="tocxref"><span class="secno">12.3.2 </span>Initialization Segments</a></li><li class="tocline"><a href="#mpeg2ts-media-segments" class="tocxref"><span class="secno">12.3.3 </span>Media Segments</a></li><li class="tocline"><a href="#mpeg2ts-random-access-points" class="tocxref"><span class="secno">12.3.4 </span>Random Access Points</a></li><li class="tocline"><a href="#mpeg2ts-discontinuities" class="tocxref"><span class="secno">12.3.5 </span>Timestamp Rollover & Discontinuities</a></li></ul></li></ul></li><li class="tocline"><a href="#examples" class="tocxref"><span class="secno">13. </span>Examples</a></li><li class="tocline"><a href="#acknowledgements" class="tocxref"><span class="secno">14. </span>Acknowledgments</a></li><li class="tocline"><a href="#revision-history" class="tocxref"><span class="secno">15. </span>Revision History</a></li><li class="tocline"><a href="#references" class="tocxref"><span class="secno">A. </span>References</a><ul class="toc"><li class="tocline"><a href="#informative-references" class="tocxref"><span class="secno">A.1 </span>Informative references</a></li></ul></li></ul></section>
+</section><section id="toc"><h2 class="introductory">Table of Contents</h2><ul class="toc"><li class="tocline"><a href="#introduction" class="tocxref"><span class="secno">1. </span>Introduction</a><ul class="toc"><li class="tocline"><a href="#goals" class="tocxref"><span class="secno">1.1 </span>Goals</a></li><li class="tocline"><a href="#definitions" class="tocxref"><span class="secno">1.2 </span>Definitions</a></li></ul></li><li class="tocline"><a href="#mediasource" class="tocxref"><span class="secno">2. </span>MediaSource Object</a><ul class="toc"><li class="tocline"><a href="#attributes" class="tocxref"><span class="secno">2.1 </span>Attributes</a></li><li class="tocline"><a href="#methods" class="tocxref"><span class="secno">2.2 </span>Methods</a></li><li class="tocline"><a href="#mediasource-events" class="tocxref"><span class="secno">2.3 </span>Event Summary</a></li><li class="tocline"><a href="#mediasource-algorithms" class="tocxref"><span class="secno">2.4 </span>Algorithms</a><ul class="toc"><li class="tocline"><a href="#mediasource-attach" class="tocxref"><span class="secno">2.4.1 </span>Attaching to a media element</a></li><li class="tocline"><a href="#mediasource-detach" class="tocxref"><span class="secno">2.4.2 </span>Detaching from a media element</a></li><li class="tocline"><a href="#mediasource-seeking" class="tocxref"><span class="secno">2.4.3 </span>Seeking</a></li><li class="tocline"><a href="#buffer-monitoring" class="tocxref"><span class="secno">2.4.4 </span>SourceBuffer Monitoring</a></li><li class="tocline"><a href="#active-source-buffer-changes" class="tocxref"><span class="secno">2.4.5 </span>Changes to selected/enabled track state</a></li><li class="tocline"><a href="#duration-change-algorithm" class="tocxref"><span class="secno">2.4.6 </span>Duration change</a></li><li class="tocline"><a href="#end-of-stream-algorithm" class="tocxref"><span class="secno">2.4.7 </span>End of stream algorithm</a></li></ul></li></ul></li><li class="tocline"><a href="#sourcebuffer" class="tocxref"><span class="secno">3. </span>SourceBuffer Object</a><ul class="toc"><li class="tocline"><a href="#attributes-1" class="tocxref"><span class="secno">3.1 </span>Attributes</a></li><li class="tocline"><a href="#methods-1" class="tocxref"><span class="secno">3.2 </span>Methods</a></li><li class="tocline"><a href="#track-buffers" class="tocxref"><span class="secno">3.3 </span>Track Buffers</a></li><li class="tocline"><a href="#sourcebuffer-events" class="tocxref"><span class="secno">3.4 </span>Event Summary</a></li><li class="tocline"><a href="#sourcebuffer-algorithms" class="tocxref"><span class="secno">3.5 </span>Algorithms</a><ul class="toc"><li class="tocline"><a href="#sourcebuffer-segment-parser-loop" class="tocxref"><span class="secno">3.5.1 </span>Segment Parser Loop</a></li><li class="tocline"><a href="#sourcebuffer-reset-parser-state" class="tocxref"><span class="secno">3.5.2 </span>Reset Parser State</a></li><li class="tocline"><a href="#sourcebuffer-append-error" class="tocxref"><span class="secno">3.5.3 </span>Append Error Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-prepare-append" class="tocxref"><span class="secno">3.5.4 </span>Prepare Append Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-buffer-append" class="tocxref"><span class="secno">3.5.5 </span>Buffer Append Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-stream-append-loop" class="tocxref"><span class="secno">3.5.6 </span>Stream Append Loop</a></li><li class="tocline"><a href="#sourcebuffer-init-segment-received" class="tocxref"><span class="secno">3.5.7 </span>Initialization Segment Received</a></li><li class="tocline"><a href="#sourcebuffer-coded-frame-processing" class="tocxref"><span class="secno">3.5.8 </span>Coded Frame Processing</a></li><li class="tocline"><a href="#sourcebuffer-coded-frame-removal" class="tocxref"><span class="secno">3.5.9 </span>Coded Frame Removal Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-coded-frame-eviction" class="tocxref"><span class="secno">3.5.10 </span>Coded Frame Eviction Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-audio-splice-frame-algorithm" class="tocxref"><span class="secno">3.5.11 </span>Audio Splice Frame Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-audio-splice-rendering-algorithm" class="tocxref"><span class="secno">3.5.12 </span>Audio Splice Rendering Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-text-splice-frame-algorithm" class="tocxref"><span class="secno">3.5.13 </span>Text Splice Frame Algorithm</a></li></ul></li></ul></li><li class="tocline"><a href="#sourcebufferlist" class="tocxref"><span class="secno">4. </span>SourceBufferList Object</a><ul class="toc"><li class="tocline"><a href="#attributes-2" class="tocxref"><span class="secno">4.1 </span>Attributes</a></li><li class="tocline"><a href="#methods-2" class="tocxref"><span class="secno">4.2 </span>Methods</a></li><li class="tocline"><a href="#sourcebufferlist-events" class="tocxref"><span class="secno">4.3 </span>Event Summary</a></li></ul></li><li class="tocline"><a href="#videoplaybackquality" class="tocxref"><span class="secno">5. </span>VideoPlaybackQuality Object</a><ul class="toc"><li class="tocline"><a href="#attributes-3" class="tocxref"><span class="secno">5.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#url" class="tocxref"><span class="secno">6. </span>URL Object Extensions</a><ul class="toc"><li class="tocline"><a href="#methods-3" class="tocxref"><span class="secno">6.1 </span>Methods</a></li></ul></li><li class="tocline"><a href="#htmlmediaelement-extensions" class="tocxref"><span class="secno">7. </span>HTMLMediaElement Extensions</a></li><li class="tocline"><a href="#htmlvideoelement-extensions" class="tocxref"><span class="secno">8. </span>HTMLVideoElement Extensions</a><ul class="toc"><li class="tocline"><a href="#methods-4" class="tocxref"><span class="secno">8.1 </span>Methods</a></li></ul></li><li class="tocline"><a href="#audio-track-extensions" class="tocxref"><span class="secno">9. </span>AudioTrack Extensions</a><ul class="toc"><li class="tocline"><a href="#attributes-4" class="tocxref"><span class="secno">9.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#video-track-extensions" class="tocxref"><span class="secno">10. </span>VideoTrack Extensions</a><ul class="toc"><li class="tocline"><a href="#attributes-5" class="tocxref"><span class="secno">10.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#text-track-extensions" class="tocxref"><span class="secno">11. </span>TextTrack Extensions</a><ul class="toc"><li class="tocline"><a href="#attributes-6" class="tocxref"><span class="secno">11.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#byte-stream-formats" class="tocxref"><span class="secno">12. </span>Byte Stream Formats</a></li><li class="tocline"><a href="#examples" class="tocxref"><span class="secno">13. </span>Examples</a></li><li class="tocline"><a href="#acknowledgements" class="tocxref"><span class="secno">14. </span>Acknowledgments</a></li><li class="tocline"><a href="#revision-history" class="tocxref"><span class="secno">15. </span>Revision History</a></li><li class="tocline"><a href="#references" class="tocxref"><span class="secno">A. </span>References</a><ul class="toc"><li class="tocline"><a href="#informative-references" class="tocxref"><span class="secno">A.1 </span>Informative references</a></li></ul></li></ul></section>
<section id="introduction">
@@ -531,8 +531,7 @@
<p>This specification allows JavaScript to dynamically construct media streams for <audio> and <video>.
It defines objects that allow JavaScript to pass media segments to an <a href="http://www.w3.org/TR/html5/embedded-content-0.html#htmlmediaelement">HTMLMediaElement</a> [<cite><a class="bibref" href="#bib-HTML5">HTML5</a></cite>].
A buffering model is also included to describe how the user agent acts when different media segments are
- appended at different times. Byte stream specifications for WebM, ISO Base Media File Format, and MPEG-2 Transport Streams are given to specify the
- expected format of byte streams used with these extensions.</p>
+ appended at different times. Byte stream specifications used with these extensions are available in the <a href="byte-stream-format-registry.html">byte stream format registry</a>.</p>
<img src="pipeline_model.png" alt="Media Source Pipeline Model Diagram">
<section id="goals">
@@ -543,7 +542,7 @@
<li>Define a splicing and buffering model that facilitates use cases like adaptive streaming, ad-insertion, time-shifting, and video editing.</li>
<li>Minimize the need for media parsing in JavaScript.</li>
<li>Leverage the browser cache as much as possible.</li>
- <li>Provide byte stream definitions for WebM, the ISO Base Media File Format, and MPEG-2 Transport Streams.</li>
+ <li>Provide requirements for byte stream format specifications.</li>
<li>Not require support for any particular media format or codec.</li>
</ul>
<p>This specification defines:</p>
@@ -598,12 +597,12 @@
<dt id="init-segment">Initialization Segment</dt>
<dd>
<p>A sequence of bytes that contain all of the initialization information required to decode a sequence of <a href="#media-segment">media segments</a>. This includes codec initialization data, <a href="#track-id">Track ID</a> mappings for multiplexed segments, and timestamp offsets (e.g. edit lists).</p>
- <div class="note"><div class="note-title"><span>Note</span></div><p class="">The <a href="#byte-stream-formats">byte stream format specifications</a> contain format specific examples.</p></div>
+ <div class="note"><div class="note-title"><span>Note</span></div><p class="">The <a href="#byte-stream-format-specs">byte stream format specifications</a> in the <a href="byte-stream-format-registry.html">byte stream format registry</a> contain format specific examples.</p></div>
</dd><dt id="media-segment">Media Segment</dt>
<dd>
<p>A sequence of bytes that contain packetized & timestamped media data for a portion of the <a href="http://www.w3.org/TR/html5/embedded-content-0.html#media-timeline">media timeline</a>. Media segments are always associated with the most recently appended <a href="#init-segment">initialization segment</a>.</p>
- <div class="note"><div class="note-title"><span>Note</span></div><p class="">The <a href="#byte-stream-formats">byte stream format specifications</a> contain format specific examples.</p></div>
+ <div class="note"><div class="note-title"><span>Note</span></div><p class="">The <a href="#byte-stream-format-specs">byte stream format specifications</a> in the <a href="byte-stream-format-registry.html">byte stream format registry</a> contain format specific examples.</p></div>
</dd>
<dt id="mediasource-object-url">MediaSource object URL</dt>
@@ -639,8 +638,8 @@
<dd><p>A position in a <a href="#media-segment">media segment</a> where decoding and continuous playback can begin without relying on any previous data in the segment. For video this tends to be the location of I-frames. In the case of audio, most audio frames can be treated as a random access point. Since video tracks tend to have a more sparse distribution of random access points, the location of these points are usually considered the random access points for multiplexed streams.</p></dd>
<dt id="sourcebuffer-byte-stream-format-spec">SourceBuffer byte stream format specification</dt>
- <dd><p>The specific <a href="#byte-stream-formats">byte stream format specification</a> that describes the format of the byte stream accepted by a <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> instance. The
- <a href="#byte-stream-formats">byte stream format specification</a>, for a <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object, is selected based on the <var>type</var> passed to the
+ <dd><p>The specific <a href="#byte-stream-format-specs">byte stream format specification</a> that describes the format of the byte stream accepted by a <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> instance. The
+ <a href="#byte-stream-format-specs">byte stream format specification</a>, for a <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object, is selected based on the <var>type</var> passed to the
<code><a href="#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type">addSourceBuffer()</a></code> call that created the object.</p></dd>
<dt id="track-description">Track Description</dt>
@@ -1451,7 +1450,7 @@
<li><i>Loop Top:</i> If the <var><a href="#sourcebuffer-input-buffer">input buffer</a></var> is empty, then jump to the <i>need more data</i> step below.</li>
<li>If the <var><a href="#sourcebuffer-input-buffer">input buffer</a></var> contains bytes that violate the <a href="#sourcebuffer-byte-stream-format-spec">SourceBuffer byte stream format specification</a>, then run the
<a href="#end-of-stream-algorithm">end of stream algorithm</a> with the <var>error</var> parameter set to <code><a href="#idl-def-EndOfStreamError.decode">"decode"</a></code> and abort this algorithm.</li>
- <li>Remove any bytes that the <a href="#byte-stream-formats">byte stream format specifications</a> say must be ignored from the start of the <var><a href="#sourcebuffer-input-buffer">input buffer</a></var>.</li>
+ <li>Remove any bytes that the <a href="#byte-stream-format-specs">byte stream format specifications</a> say must be ignored from the start of the <var><a href="#sourcebuffer-input-buffer">input buffer</a></var>.</li>
<li>
<p>If the <var><a href="#sourcebuffer-append-state">append state</a></var> equals <a href="#sourcebuffer-waiting-for-segment">WAITING_FOR_SEGMENT</a>, then run the following steps:</p>
<ol>
@@ -1742,7 +1741,7 @@
<li><i>Loop Top: </i>Let <var>presentation timestamp</var> be a double precision floating point representation of the coded frame's <a href="#presentation-timestamp">presentation timestamp</a> in seconds.
<div class="note"><div class="note-title"><span>Note</span></div><p class="">Special processing may be needed to determine the presentation and decode timestamps for timed text frames since this information may not be explicilty
present in the underlying format or may be dependent on the order of the frames. Some metadata text tracks, like MPEG2-TS PSI data, may only have implied timestamps.
- Format specific rules for these situations should be in the <a href="#byte-stream-formats">byte stream format specifications</a> or in separate extension specifications.</p></div>
+ Format specific rules for these situations should be in the <a href="#byte-stream-format-specs">byte stream format specifications</a> or in separate extension specifications.</p></div>
</li>
<li>Let <var>decode timestamp</var> be a double precision floating point representation of the coded frame's decode timestamp in seconds.
<div class="note"><div class="note-title"><span>Note</span></div><p class="">Implementations don't have to internally store timestamps in a double precision floating point representation. This
@@ -2403,12 +2402,15 @@
<section id="byte-stream-formats">
<!--OddPage--><h2><span class="secno">12. </span>Byte Stream Formats</h2>
- <p>The bytes provided through <code><a href="#widl-SourceBuffer-appendBuffer-void-ArrayBufferView-data">appendBuffer()</a></code> and <code><a href="#widl-SourceBuffer-appendStream-void-Stream-stream-unsigned-long-long-maxSize">appendStream()</a></code> for a <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> form a logical byte stream. The format of this byte stream depends on the media container format in use and is defined in a byte stream format specification. Byte stream format specifications based on WebM , the ISO Base Media File Format, and MPEG-2 Transport Streams are provided below. These format specifications are intended to be the authoritative source for how data from these containers is formatted and passed to a <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a>. If a <a href="#idl-def-MediaSource" class="idlType"><code>MediaSource</code></a> implementation claims to support any of these container formats, then it must implement the corresponding byte stream format specification described below.</p>
- <div class="note"><div class="note-title"><span>Note</span></div><p class="">The byte stream format specifications below are not intended to define new storage formats. They simply outline the subset of
+ <p>The bytes provided through <code><a href="#widl-SourceBuffer-appendBuffer-void-ArrayBufferView-data">appendBuffer()</a></code> and <code><a href="#widl-SourceBuffer-appendStream-void-Stream-stream-unsigned-long-long-maxSize">appendStream()</a></code> for a <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> form a logical byte stream. The format and
+ semantics of these byte streams are defined in <dfn id="byte-stream-format-specs">byte stream format specifications</dfn>. The <a href="byte-stream-format-registry.html">byte stream format registry</a> is the
+ authoritative source for <a href="#byte-stream-format-specs">byte stream format specifications</a> that can be accepted by a <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a>. If a <a href="#idl-def-MediaSource" class="idlType"><code>MediaSource</code></a> implementation claims
+ to support any of the MIME types in the registry, then it must implement the corresponding byte stream format specification.</p>
+ <div class="note"><div class="note-title"><span>Note</span></div><p class="">The byte stream format specifications in the registry are not intended to define new storage formats. They simply outline the subset of
existing storage format structures that implementations of this specification will accept.</p></div>
<div class="note"><div class="note-title"><span>Note</span></div><p class="">Byte stream format parsing and validation is implemented in the <a href="#sourcebuffer-segment-parser-loop">segment parser loop</a> algorithm.</p></div>
- <p>This section provides general requirements for all byte stream formats:</p>
+ <p>This section provides general requirements for all byte stream format specifications:</p>
<ul>
<li>A byte stream format specification must define <a href="#init-segment">initialization segments</a> and <a href="#media-segment">media segments</a>.</li>
<li>It must be possible to identify segment boundaries and segment type (initialization or media) by examining the byte stream alone.</li>
@@ -2467,180 +2469,8 @@
</ul>
<p>Byte stream specifications must at a minimum define constraints which ensure that the above requirements hold. Additional constraints may be defined, for example to simplify implementation.</p>
- <section id="webm" class="nonnormative">
- <h3><span class="secno">12.1 </span>WebM Byte Streams</h3>
- <p>This section defines segment formats for implementations that choose to support WebM.</p>
-
- <section id="webm-init-segments">
- <h4><span class="secno">12.1.1 </span>Initialization Segments</h4>
- <p>A WebM <a href="#init-segment">initialization segment</a> must contain a subset of the elements at the start of a typical WebM file.</p>
-
- <p>The user agent must run the <a href="#end-of-stream-algorithm">end of stream algorithm</a> with the <var>error</var> parameter set to <code><a href="#idl-def-EndOfStreamError.decode">"decode"</a></code> if any of the following conditions are not met:</p>
- <ol>
- <li>The <a href="#init-segment">initialization segment</a> must start with an <a href="http://www.webmproject.org/code/specs/container/#ebml-basics">EBML Header</a> element, followed by a <a href="http://www.webmproject.org/code/specs/container/#segment">Segment</a> header.</li>
- <li>The size value in the <a href="http://www.webmproject.org/code/specs/container/#segment">Segment</a> header must signal an "unknown size" or contain a value large enough to include the <a href="http://www.webmproject.org/code/specs/container/#segment-information">Segment Information</a> and <a href="http://www.webmproject.org/code/specs/container/#track">Tracks</a> elements that follow.</li>
- <li>A <a href="http://www.webmproject.org/code/specs/container/#segment-information">Segment Information</a> element and a <a href="http://www.webmproject.org/code/specs/container/#track">Tracks</a> element must appear, in that order, after the <a href="http://www.webmproject.org/code/specs/container/#segment">Segment</a> header and before any further <a href="http://www.webmproject.org/code/specs/container/#ebml-basics">EBML Header</a> or <a href="http://www.webmproject.org/code/specs/container/#cluster">Cluster</a> elements.
- </li>
- </ol>
- The user agent must accept and ignore any elements other than an <a href="http://www.webmproject.org/code/specs/container/#ebml-basics">EBML Header</a> or a <a href="http://www.webmproject.org/code/specs/container/#cluster">Cluster</a> that occur before, in between, or after the <a href="http://www.webmproject.org/code/specs/container/#segment-information">Segment Information</a> and
- <a href="http://www.webmproject.org/code/specs/container/#track">Tracks</a> elements.
- </section>
-
- <section id="webm-media-segments">
- <h4><span class="secno">12.1.2 </span>Media Segments</h4>
- <p>A WebM <a href="#media-segment">media segment</a> is a single <a href="http://www.webmproject.org/code/specs/container/#cluster">Cluster</a> element.</p>
-
- <p>The user agent uses the following rules when interpreting content in a <a href="http://www.webmproject.org/code/specs/container/#cluster">Cluster</a>:</p>
- <ol>
- <li>The TimecodeScale in the <a href="#webm-init-segments">WebM initialization segment</a> most recently appended applies to all timestamps in the <a href="http://www.webmproject.org/code/specs/container/#cluster">Cluster</a></li>
- <li>The Timecode element in the <a href="http://www.webmproject.org/code/specs/container/#cluster">Cluster</a> contains a <a href="#presentation-timestamp">presentation timestamp</a> in TimecodeScale units.</li>
- <li>The Cluster header may contain an "unknown" size value. If it does then the end of the cluster is reached when another <a href="http://www.webmproject.org/code/specs/container/#cluster">Cluster</a> header or an element header that indicates the start
- of an <a href="#webm-init-segments">WebM initialization segment</a> is encountered.</li>
- </ol>
-
- <p>The user agent must run the <a href="#end-of-stream-algorithm">end of stream algorithm</a> with the <var>error</var> parameter set to <code><a href="#idl-def-EndOfStreamError.decode">"decode"</a></code> if any of the following conditions are not met:</p>
- <ol>
- <li>The Timecode element must appear before any Block & SimpleBlock elements in a <a href="http://www.webmproject.org/code/specs/container/#cluster">Cluster</a>.</li>
- <li>Block & SimpleBlock elements are in time increasing order consistent with the <a href="http://www.webmproject.org/code/specs/container/#webm-guidelines">WebM spec</a>.</li>
- <li>If the most recent <a href="#webm-init-segments">WebM initialization segment</a> describes multiple tracks, then blocks from all the tracks must be interleaved in time increasing order. At least one block from all audio and video
- tracks must be present.</li>
- </ol>
-
- The user agent must accept and ignore <a href="http://www.webmproject.org/code/specs/container/#cueing-data">Cues</a> or <a href="http://www.webmproject.org/code/specs/container/#chapters">Chapters</a> elements that follow a <a href="http://www.webmproject.org/code/specs/container/#cluster">Cluster</a> element.
- </section>
-
- <section id="webm-random-access-points">
- <h4><span class="secno">12.1.3 </span>Random Access Points</h4>
- <p>A SimpleBlock element with its Keyframe flag set signals the location of a <a href="#random-access-point">random access point</a> for that track. Media segments containing multiple tracks are only considered a random access
- point if the first SimpleBlock for each track has its Keyframe flag set. The order of the multiplexed blocks must conform to the <a href="http://www.webmproject.org/code/specs/container/#muxer-guidelines">WebM Muxer Guidelines</a>.</p>
- </section>
- </section>
-
- <section id="iso" class="nonnormative">
- <h3><span class="secno">12.2 </span>ISO Base Media File Format Byte Streams</h3>
- <p>This section defines segment formats for implementations that choose to support the ISO Base Media File Format
- <a href="http://standards.iso.org/ittf/PubliclyAvailableStandards/c061988_ISO_IEC_14496-12_2012.zip">ISO/IEC 14496-12</a> (ISO BMFF).</p>
-
- <section id="iso-init-segments">
- <h4><span class="secno">12.2.1 </span>Initialization Segments</h4>
- <p>An ISO BMFF <a href="#init-segment">initialization segment</a> is defined in this specification as a single Movie Header Box (<span class="iso-box">moov</span>).</p>
-
- <p>The user agent must run the <a href="#end-of-stream-algorithm">end of stream algorithm</a> with the <var>error</var> parameter set to <code><a href="#idl-def-EndOfStreamError.decode">"decode"</a></code> if any of the following conditions are met:</p>
- <ol>
- <li>The tracks in the Movie Header Box contain samples (i.e. the <span class="iso-var">entry_count</span> in the
- <span class="iso-box">stts</span>, <span class="iso-box">stsc</span> or <span class="iso-box">stco</span> boxes are not set to zero).</li>
- <li>A Movie Extends (<span class="iso-box">mvex</span>) box is not contained in the Movie (<span class="iso-box">moov</span>) box to indicate that Movie Fragments are to be expected.</li>
- </ol>
- <p>The user agent must handle Edit Boxes (<span class="iso-box">edts</span>), in <a href="#init-segment">initialization segment</a>, which provide a mapping of composition times for each track to the global presentation time.</p>
-
- <p>The user agent must support parameter sets (e.g., PPS/SPS) stored in the sample entry (as defined for avc1/avc2), and should support parameter
- sets stored inband in the samples themselves (as defined for avc3/avc4).</p>
- <div class="note"><div class="note-title"><span>Note</span></div><p class="">For maximum content interoperability, user agents are strongly advised to support both inband and out-of-band storage of the SPS and PPS.</p></div>
-
- <p>Valid top-level boxes such as <span class="iso-box">ftyp</span>, <span class="iso-box">styp</span>, and <span class="iso-box">sidx</span> are
- allowed to appear before the <span class="iso-box">moov</span> box. These boxes must be accepted and ignored by the user agent and are not
- considered part of the <a href="#init-segment">initialization segment</a> in this specification.</p>
- </section>
-
- <section id="iso-media-segments">
- <h4><span class="secno">12.2.2 </span>Media Segments</h4>
- <p>An ISO BMFF <a href="#media-segment">media segment</a> is defined in this specification as a single Movie Fragment Box
- (<span class="iso-box">moof</span>) followed by one or more Media Data Boxes (<span class="iso-box">mdat</span>).</p>
- <p>Valid top-level boxes defined in <a href="http://standards.iso.org/ittf/PubliclyAvailableStandards/c061988_ISO_IEC_14496-12_2012.zip">ISO/IEC 14496-12</a> other than <span class="iso-box">moov</span>,
- <span class="iso-box">moof</span>, and <span class="iso-box">mdat</span> are allowed to appear between the end of an
- <a href="#init-segment">initialization segment</a> or <a href="#media-segment">media segment</a> and before the beginning of a new <a href="#media-segment">media segment</a>.
- These boxes must be accepted and ignored by the user agent and are not considered part of the <a href="#media-segment">media segment</a> in this
- specification.
- </p>
-
- <p>The user agent must run the <a href="#end-of-stream-algorithm">end of stream algorithm</a> with the <var>error</var> parameter set to <code><a href="#idl-def-EndOfStreamError.decode">"decode"</a></code> if any of the following conditions are met:</p>
- <ol>
- <li>The Movie Fragment Box does not contain at least one Track Fragment Box (<span class="iso-box">traf</span>).</li>
- <li>The Movie Fragment Box does not use movie-fragment relative addressing or the flag <span class="iso-var">default-base-is-moof</span> is not set.</li>
- <li>External data references are being used.</li>
- <li>At least one Track Fragment Box does not contain a Track Fragment Decode Time Box (<span class="iso-box">tfdt</span>)</li>
- <li>The Media Data Boxes do not contain all the samples referenced by the Track Fragment Run Boxes (<span class="iso-box">trun</span>) of the Movie Fragment Box.</li>
- <li>Inband parameter sets are not present in the appropriate samples and parameter sets are not present in the last initialization segment appended.</li>
- </ol>
- </section>
-
- <section id="iso-random-access-points">
- <h4><span class="secno">12.2.3 </span>Random Access Points</h4>
- <p>A <a href="#random-access-point">random access point</a> as defined in this specification corresponds to a Stream Access Point of type 1 or 2 as defined in Annex I of <a href="http://standards.iso.org/ittf/PubliclyAvailableStandards/c061988_ISO_IEC_14496-12_2012.zip">ISO/IEC 14496-12</a>.</p>
- </section>
- </section>
-
- <section id="mpeg2ts" class="nonnormative">
- <h3><span class="secno">12.3 </span>MPEG-2 Transport Stream Byte Streams</h3>
- <p>This section defines segment formats for implementations that choose to support MPEG-2 Transport Streams
- (MPEG-2 TS) specified in <a href="http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=44169">ISO/IEC 13818-1</a>.</p>
-
- <section id="mpeg2ts-general">
- <h4><span class="secno">12.3.1 </span>General</h4>
- <p>MPEG-2 TS media and initialization segments must conform to the MPEG-2 TS Adaptive Profile (ISO/IEC 13818-1:2012 Amd. 2).</p>
-
- <p>The user agent must run the <a href="#end-of-stream-algorithm">end of stream algorithm</a> with the <var>error</var> parameter set to <code><a href="#idl-def-EndOfStreamError.decode">"decode"</a></code> if any of the following conditions are met:</p>
- <ol>
- <li>Segments do not contain complete MPEG-2 TS packets.</li>
- <li>Segments do not contain complete PES packets and sections.</li>
- <li>Segments contain more than one program.</li>
- <li>At least one MPEG-2 TS packet has a non-zero transport_error_indicator.</li>
- </ol>
- </section>
- <section id="mpeg2ts-init-segments">
- <h4><span class="secno">12.3.2 </span>Initialization Segments</h4>
- <p>An MPEG-2 TS initialization segment consists of a single PAT and a single PMT.</p>
- <p>The user agent must run the <a href="#end-of-stream-algorithm">end of stream algorithm</a> with the <var>error</var> parameter set to <code><a href="#idl-def-EndOfStreamError.decode">"decode"</a></code> if any of the following conditions are met:</p>
- <ol>
- <li>A PAT is not present in the <a href="#init-segment">initialization segment</a></li>
- <li>A PMT is not present in the <a href="#init-segment">initialization segment</a></li>
- </ol>
- The user agent must accept and ignore other SI, such as CAT, that are invariant for all subsequent media segments.
- </section>
-
- <section id="mpeg2ts-media-segments">
- <h4><span class="secno">12.3.3 </span>Media Segments</h4>
-
- <p>The user agent must run the <a href="#end-of-stream-algorithm">end of stream algorithm</a> with the <var>error</var> parameter set to <code><a href="#idl-def-EndOfStreamError.decode">"decode"</a></code> if any of the following conditions are met:</p>
- <ol>
- <li>A media segment relies on initialization information in another media segment.</li>
- <li>At least one PES packet does not have a PTS timestamp.</li>
- <li>PCR is not present in the Segment prior to the first byte of a TS packet payload containing media data.</li>
- </ol>
-
- The user agent will accept and ignore PSI that is identical to the information in the last initialization segment which may appear repeatedly throughout the segment.
- </section>
-
- <section id="mpeg2ts-random-access-points">
- <h4><span class="secno">12.3.4 </span>Random Access Points</h4>
- <p>A random access point as defined in this specification corresponds to Elementary Stream Random Access Point as defined in
- <a href="http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=44169">ISO/IEC 13818-1</a>.</p>
- </section>
- <section id="mpeg2ts-discontinuities">
- <h4><span class="secno">12.3.5 </span>Timestamp Rollover & Discontinuities</h4>
- <p>Timestamp rollovers and discontinuities must be handled by the UA. The UA's MPEG-2 TS implementation must maintain an internal offset
- variable, <dfn id="mpeg2ts-timestampOffset">MPEG2TS_timestampOffset</dfn>, to keep track of the offset that needs to be applied to timestamps
- that have rolled over or are part of a discontinuity. <var>MPEG2TS_timestampOffset</var> is initially set to 0 when the <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> is
- created. This offset must be applied to the timestamps as part of the conversion process from MPEG-2 TS packets
- into <a href="#coded-frame">coded frames</a> for the <a href="#sourcebuffer-coded-frame-processing">coded frame processing algorithm</a>. This results in the coded frame timestamps
- for a packet being computed by the following equations:</p>
- <pre>Coded Frame Presentation Timestamp = (MPEG-2 TS presentation timestamp) + <var>MPEG2TS_timestampOffset</var>
-Coded Frame Decode Timestamp = (MPEG-2 TS decode timestamp) + <var>MPEG2TS_timestampOffset</var></pre>
-
- <p><var><a href="#mpeg2ts-timestampOffset">MPEG2TS_timestampOffset</a></var> is updated in the following ways:</p>
- <ul>
- <li>Each time a timestamp rollover is detected, 2^33 must be added to <var>MPEG2TS_timestampOffset</var>.</li>
- <li>When a discontinuity is detected, <var>MPEG2TS_timestampOffset</var> must be adjusted to make the timestamps after the discontinuity appear
- to come immediately after the timestamps before the discontinuity.</li>
- <li>When <code><a href="#widl-SourceBuffer-abort-void">abort()</a></code> is called, <var>MPEG2TS_timestampOffset</var> must be set to 0.</li>
- <li>When <code><a href="#widl-SourceBuffer-timestampOffset">timestampOffset</a></code> is successfully set, <var>MPEG2TS_timestampOffset</var> must be set to 0.</li>
- </ul>
- </section>
- </section>
</section>
-
-
<section id="examples">
<!--OddPage--><h2><span class="secno">13. </span>Examples</h2>
<p>Example use of the Media Source Extensions</p>
@@ -2756,7 +2586,15 @@
</thead>
<tbody>
<tr>
- <td>29 October 2013</td>
+ <td>04 November 2013</td>
+ <td>
+ <ul>
+ <li>Bug 23441 - Established MSE byte stream format registry and extracted byte stream format text into separate documents.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="https://dvcs.w3.org/hg/html-media/raw-file/15e7e8f7eecd/media-source/media-source.html">29 October 2013</a></td>
<td>
<ul>
<li>Bug 23553 - Fixed segment parser loop so it doesn't appear to prematurely remove the media segment header.</li>
--- a/media-source/media-source.js Mon Nov 04 11:16:03 2013 -0800
+++ b/media-source/media-source.js Mon Nov 04 15:42:39 2013 -0800
@@ -126,6 +126,7 @@
'eos-decode': { func: eos_decode_helper, fragment: '#end-of-stream-algorithm', link_text: 'end of stream algorithm with <var>error</var> parameter set to "decode"', },
'readyState': { func: idlref_helper, fragment: 'widl-MediaSource-readyState', link_text: 'readyState', },
'duration': { func: idlref_helper, fragment: 'widl-MediaSource-duration', link_text: 'duration', },
+ 'isTypeSupported': { func: idlref_helper, fragment: 'widl-MediaSource-isTypeSupported-boolean-DOMString-type', link_text: 'isTypeSupported()', },
'appendBuffer': { func: idlref_helper, fragment: 'widl-SourceBuffer-appendBuffer-void-ArrayBufferView-data', link_text: 'appendBuffer()', },
'appendStream': { func: idlref_helper, fragment: 'widl-SourceBuffer-appendStream-void-Stream-stream-unsigned-long-long-maxSize', link_text: 'appendStream()', },
@@ -174,6 +175,7 @@
'media-segments': { func: term_helper, fragment: 'media-segment', link_text: 'media segments', },
'presentation-start-time': { func: term_helper, fragment: 'presentation-start-time', link_text: 'presentation start time', },
'random-access-point': { func: term_helper, fragment: 'random-access-point', link_text: 'random access point', },
+ 'random-access-points': { func: term_helper, fragment: 'random-access-point', link_text: 'random access points', },
'track-id': { func: term_helper, fragment: 'track-id', link_text: 'Track ID', },
'track-ids': { func: term_helper, fragment: 'track-id', link_text: 'Track IDs', },
'track-description': { func: term_helper, fragment: 'track-description', link_text: 'track description', },
@@ -203,8 +205,9 @@
'waiting-for-segment': { func: link_helper, fragment: '#sourcebuffer-waiting-for-segment', link_text: 'WAITING_FOR_SEGMENT', },
'parsing-init-segment': { func: link_helper, fragment: '#sourcebuffer-parsing-init-segment', link_text: 'PARSING_INIT_SEGMENT', },
'parsing-media-segment': { func: link_helper, fragment: '#sourcebuffer-parsing-media-segment', link_text: 'PARSING_MEDIA_SEGMENT', },
- 'byte-stream-format-spec': { func: link_helper, fragment: '#byte-stream-formats', link_text: 'byte stream format specification', },
- 'byte-stream-format-specs': { func: link_helper, fragment: '#byte-stream-formats', link_text: 'byte stream format specifications', },
+ 'byte-stream-formats-section': { func: link_helper, fragment: '#byte-stream-formats', link_text: 'byte stream formats section', },
+ 'byte-stream-format-spec': { func: link_helper, fragment: '#byte-stream-format-specs', link_text: 'byte stream format specification', },
+ 'byte-stream-format-specs': { func: link_helper, fragment: '#byte-stream-format-specs', link_text: 'byte stream format specifications', },
'sourcebuffer-byte-stream-format-spec': { func: link_helper, fragment: '#sourcebuffer-byte-stream-format-spec', link_text: 'SourceBuffer byte stream format specification', },
'append-error-algorithm': { func: link_helper, fragment: '#sourcebuffer-append-error', link_text: 'append error algorithm', },
'reset-parser-state-algorithm': { func: link_helper, fragment: '#sourcebuffer-reset-parser-state', link_text: 'reset parser state algorithm', },
@@ -317,23 +320,6 @@
'origin': { func: browsers_helper, fragment: 'origin-0', link_text: 'origin', },
- 'webm-spec': { func: webmref_helper, fragment: 'webm-guidelines', link_text: 'WebM spec', },
- 'webm-ebml-header': { func: webmref_helper, fragment: 'ebml-basics', link_text: 'EBML Header', },
- 'webm-segment': { func: webmref_helper, fragment: 'segment', link_text: 'Segment', },
- 'webm-info': { func: webmref_helper, fragment: 'segment-information', link_text: 'Segment Information', },
- 'webm-tracks': { func: webmref_helper, fragment: 'track', link_text: 'Tracks', },
- 'webm-cues': { func: webmref_helper, fragment: 'cueing-data', link_text: 'Cues', },
- 'webm-chapters': { func: webmref_helper, fragment: 'chapters', link_text: 'Chapters', },
- 'webm-cluster': { func: webmref_helper, fragment: 'cluster', link_text: 'Cluster', },
- 'webm-muxer-guidelines': { func: webmref_helper, fragment: 'muxer-guidelines', link_text: 'WebM Muxer Guidelines', },
- 'webm-init-segment': { func: link_helper, fragment: '#webm-init-segments', link_text: 'WebM initialization segment', },
-
- 'iso-14496-12': { func: link_helper, fragment: 'http://standards.iso.org/ittf/PubliclyAvailableStandards/c061988_ISO_IEC_14496-12_2012.zip', link_text: 'ISO/IEC 14496-12', },
-
- 'iso-13818-1': { func: link_helper, fragment: 'http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=44169', link_text: 'ISO/IEC 13818-1', },
-
- 'mpeg2ts-timestampOffset': { func: var_helper, fragment: '#mpeg2ts-timestampOffset', link_text: 'MPEG2TS_timestampOffset', },
-
'media-data-cannot-be-fetched': { func: fragment_helper, fragment: '', link_text: '"<i>If the media data cannot be fetched at all, due to network errors, causing the user agent to give up trying to fetch the resource</i>"', },
'perform-potentially-cors-enabled-fetch': { func: fragment_helper, fragment: '', link_text: '"<i>Perform a potentially CORS-enabled fetch</i>"', },
@@ -341,10 +327,16 @@
'contributors': { func: contributors_helper, fragment: '', link_text: '', },
'performance-now': { func: hrtime_helper, fragment: 'dom-performance-now', link_text: 'Performance.now()', },
+
+ 'byte-stream-format-registry': { func: link_helper, fragment: 'byte-stream-format-registry.html', link_text: 'byte stream format registry', },
};
var definitionInfo = {};
var groupBaseURLs = {};
+ var helperTypes = {
+ 'link' : link_helper,
+ 'var' : var_helper,
+ };
function mediaSourceAddDefinitionInfo(groupName, groupBaseURL, definitions) {
groupBaseURLs[groupName] = groupBaseURL;
@@ -355,7 +347,8 @@
var info = definitions[def_id];
info.groupName = groupName;
if (!info.func) {
- info.func = link_helper;
+ var helper_type = info.helper_type || "link";
+ info.func = helperTypes[helper_type];
}
definitionInfo[def_id] = info;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/media-source/mp2t-byte-stream-format-respec.html Mon Nov 04 15:42:39 2013 -0800
@@ -0,0 +1,193 @@
+<!DOCTYPE html SYSTEM "about:legacy-compat">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>MPEG-2 TS Byte Stream Format</title>
+ <script src="respec-w3c-common.js" class="remove"></script>
+ <script src="media-source.js" class="remove"></script>
+ <script class="remove">
+ (function() {
+ var mp2tContainerSpecDefinitions = {
+ 'iso-13818-1': { fragment: 'http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=44169', link_text: 'ISO/IEC 13818-1', },
+
+ 'mpeg2ts-timestampOffset': { helper_type: 'var', fragment: '#mpeg2ts-timestampOffset', link_text: 'MPEG2TS_timestampOffset', },
+ };
+
+ mediaSourceAddDefinitionInfo("mp2t-byte-stream-format", "", mp2tContainerSpecDefinitions);
+ })();
+ </script>
+
+ <script class="remove">
+ var respecConfig = {
+ // specification status (e.g. WD, LCWD, NOTE, etc.). If in doubt use ED.
+ specStatus: "ED",
+
+ // the specification's short name, as in http://www.w3.org/TR/short-name/
+ shortName: "",
+
+ // if there a publicly available Editor's Draft, this is the link
+ edDraftURI: "http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/mp2t-byte-stream-format.html",
+
+ // if this is a LCWD, uncomment and set the end of its review period
+ // lcEnd: "2009-08-05",
+
+ // editors, add as many as you like
+ // only "name" is required
+ editors: [
+ { name: "Aaron Colwell", url: "", company: "Google Inc.", companyURL: "http://www.google.com/" },
+ { name: "Adrian Bateman", url: "", company: "Microsoft Corporation", companyURL: "http://www.microsoft.com/" },
+ { name: "Mark Watson", url: "", company: "Netflix Inc.", companyURL: "http://www.netflix.com/" },
+ ],
+
+ mseDefGroupName: "mp2t-byte-stream-format",
+ mseUnusedGroupNameExcludeList: ["media-source"],
+ mseContributors: [
+ "Bob Lund",
+ "Alex Giladi",
+ "Duncan Rowden",
+ "Mark Vickers",
+ "Glenn Adams",
+ "Michael Thornburgh",
+ "David Singer",
+ ],
+
+ // name of the WG
+ wg: "HTML Working Group",
+
+ // URI of the public WG page
+ wgURI: "http://www.w3.org/html/wg/",
+
+ // name (without the @w3c.org) of the public mailing to which comments are due
+ wgPublicList: "public-html-media",
+
+ // URI of the patent status for this WG, for Rec-track documents
+ // !!!! IMPORTANT !!!!
+ // This is important for Rec-track documents, do not copy a patent URI from a random
+ // document unless you know what you're doing. If in doubt ask your friendly neighbourhood
+ // Team Contact.
+ wgPatentURI: "http://www.w3.org/2004/01/pp-impl/40318/status",
+
+ noIDLIn: true,
+
+ scheme: "https",
+
+ preProcess: [ mediaSourcePreProcessor ],
+
+ // Empty definitions for objects declared in the document are here to
+ // prevent error messages from being displayed for references to these objects.
+ definitionMap: {
+ SourceBuffer: function() {},
+ },
+
+ postProcess: [ mediaSourcePostProcessor ]
+
+ };
+ </script>
+ <!-- script to register bugs -->
+ <script src="https://dvcs.w3.org/hg/webcomponents/raw-file/tip/assets/scripts/bug-assist.js"></script>
+ <meta name="bug.short_desc" content="[MSE] ">
+ <meta name="bug.product" content="HTML WG">
+ <meta name="bug.component" content="Media Source Extensions">
+
+ <link rel="stylesheet" href="mse.css">
+
+ </head>
+ <body>
+ <section id="abstract">
+ This specification defines a <a href="http://www.w3.org/TR/media-source/">Media Source Extensions</a> byte stream format specification based on MPEG-2 Transport Streams.
+ </section>
+
+ <section id="introduction">
+ <h2>Introduction</h2>
+ <p>This specification defines segment formats for implementations that choose to support MPEG-2 Transport Streams
+ (MPEG-2 TS) specified in <a def-id="iso-13818-1"></a>.</p> It defines the MIME-type parameters used to signal codecs, and provides
+ the necessary format specific definitions for <a def-id="init-segments"></a>, <a def-id="media-segments"></a>, and <a def-id="random-access-points"></a> required by
+ the <a def-id="byte-stream-formats-section"></a> of the Media Source Extensions spec. This document also defines extra behaviors and state that only apply to this
+ byte stream format.</p>
+ </section>
+
+ <section id="mime-parameters">
+ <h2>MIME-type info</h2>
+ <p>The MIME-type/subtype pair of "video/MP2T", as specified in <a href="http://tools.ietf.org/html/rfc3551">RFC 3551</a>, must be used for byte streams that conform
+ to this specification.</p>
+
+ <p>This following parameters can be used in the MIME-type passed to <a def-id="isTypeSupported"></a> or <a def-id="addSourceBuffer"></a>.</p>
+ <dl>
+ <dt>codecs</dt>
+ <dd>
+ A comma separated list of codec IDs used to specify what codecs will be used in the byte stream. Implementations should accept IDs in the form specified by
+ <a href="http://tools.ietf.org/html/rfc6381">RFC 6381</a>.
+ <div class="note">Implementations may only implement a subset of the codecs and profiles mentioned in the RFC.</div>
+ </dd>
+ </dl>
+ </section>
+
+ <section id="mpeg2ts-general">
+ <h4>General Transport Stream Requirements</h4>
+ <p>MPEG-2 TS media and initialization segments must conform to the MPEG-2 TS Adaptive Profile (ISO/IEC 13818-1:2012 Amd. 2).</p>
+
+ <p>The user agent must run the <a def-id="eos-decode"></a> if any of the following conditions are met:</p>
+ <ol>
+ <li>Segments do not contain complete MPEG-2 TS packets.</li>
+ <li>Segments do not contain complete PES packets and sections.</li>
+ <li>Segments contain more than one program.</li>
+ <li>At least one MPEG-2 TS packet has a non-zero transport_error_indicator.</li>
+ </ol>
+ </section>
+ <section id="mpeg2ts-init-segments">
+ <h4>Initialization Segments</h4>
+ <p>An MPEG-2 TS initialization segment consists of a single PAT and a single PMT.</p>
+ <p>The user agent must run the <a def-id="eos-decode"></a> if any of the following conditions are met:</p>
+ <ol>
+ <li>A PAT is not present in the <a def-id="init-segment"></a></li>
+ <li>A PMT is not present in the <a def-id="init-segment"></a></li>
+ </ol>
+ The user agent must accept and ignore other SI, such as CAT, that are invariant for all subsequent media segments.
+ </section>
+
+ <section id="mpeg2ts-media-segments">
+ <h4>Media Segments</h4>
+
+ <p>The user agent must run the <a def-id="eos-decode"></a> if any of the following conditions are met:</p>
+ <ol>
+ <li>A media segment relies on initialization information in another media segment.</li>
+ <li>At least one PES packet does not have a PTS timestamp.</li>
+ <li>PCR is not present in the Segment prior to the first byte of a TS packet payload containing media data.</li>
+ </ol>
+
+ The user agent will accept and ignore PSI that is identical to the information in the last initialization segment which may appear repeatedly throughout the segment.
+ </section>
+
+ <section id="mpeg2ts-random-access-points">
+ <h4>Random Access Points</h4>
+ <p>A random access point as defined in this specification corresponds to Elementary Stream Random Access Point as defined in
+ <a def-id="iso-13818-1"></a>.</p>
+ </section>
+ <section id="mpeg2ts-discontinuities">
+ <h4>Timestamp Rollover & Discontinuities</h4>
+ <p>Timestamp rollovers and discontinuities must be handled by the UA. The UA's MPEG-2 TS implementation must maintain an internal offset
+ variable, <dfn id="mpeg2ts-timestampOffset">MPEG2TS_timestampOffset</dfn>, to keep track of the offset that needs to be applied to timestamps
+ that have rolled over or are part of a discontinuity. <var>MPEG2TS_timestampOffset</var> is initially set to 0 when the <a>SourceBuffer</a> is
+ created. This offset must be applied to the timestamps as part of the conversion process from MPEG-2 TS packets
+ into <a def-id="coded-frames"></a> for the <a def-id="coded-frame-processing-algorithm"></a>. This results in the coded frame timestamps
+ for a packet being computed by the following equations:</p>
+ <pre>
+ Coded Frame Presentation Timestamp = (MPEG-2 TS presentation timestamp) + <var>MPEG2TS_timestampOffset</var>
+ Coded Frame Decode Timestamp = (MPEG-2 TS decode timestamp) + <var>MPEG2TS_timestampOffset</var></pre>
+
+ <p><a def-id="mpeg2ts-timestampOffset"></a> is updated in the following ways:</p>
+ <ul>
+ <li>Each time a timestamp rollover is detected, 2^33 must be added to <a def-id="mpeg2ts-timestampOffset"></a>.</li>
+ <li>When a discontinuity is detected, <a def-id="mpeg2ts-timestampOffset"></a> must be adjusted to make the timestamps after the discontinuity appear
+ to come immediately after the timestamps before the discontinuity.</li>
+ <li>When <a def-id="abort"></a> is called, <a def-id="mpeg2ts-timestampOffset"></a> must be set to 0.</li>
+ <li>When <a def-id="timestampOffset"></a> is successfully set, <a def-id="mpeg2ts-timestampOffset"></a> must be set to 0.</li>
+ </ul>
+ </section>
+
+ <section id="acknowledgements">
+ <h2>Acknowledgments</h2>
+ The editors would like to thank <a def-id="contributors"></a> for their contributions to this specification.
+ </section>
+ </body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/media-source/mp2t-byte-stream-format.html Mon Nov 04 15:42:39 2013 -0800
@@ -0,0 +1,381 @@
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>MPEG-2 TS Byte Stream Format</title>
+
+
+
+
+
+ <!-- script to register bugs -->
+ <script src="https://dvcs.w3.org/hg/webcomponents/raw-file/tip/assets/scripts/bug-assist.js"></script>
+ <meta name="bug.short_desc" content="[MSE] ">
+ <meta name="bug.product" content="HTML WG">
+ <meta name="bug.component" content="Media Source Extensions">
+
+ <style>/* --- ISSUES/NOTES --- */
+div.issue-title, div.note-title {
+ padding-right: 1em;
+ min-width: 7.5em;
+ color: #b9ab2d;
+}
+div.issue-title { color: #e05252; }
+div.note-title { color: #52e052; }
+div.issue-title span, div.note-title span {
+ text-transform: uppercase;
+}
+div.note, div.issue {
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+.note > p:first-child, .issue > p:first-child { margin-top: 0 }
+.issue, .note {
+ padding: .5em;
+ border-left-width: .5em;
+ border-left-style: solid;
+}
+div.issue, div.note {
+ padding: 0.5em;
+ margin: 1em 0;
+ position: relative;
+ clear: both;
+}
+span.note, span.issue { padding: .1em .5em .15em; }
+
+.issue {
+ border-color: #e05252;
+ background: #fbe9e9;
+}
+.note {
+ border-color: #52e052;
+ background: #e9fbe9;
+}
+
+
+</style><link rel="stylesheet" href="mse.css">
+
+ <style>/*****************************************************************
+ * ReSpec 3 CSS
+ * Robin Berjon - http://berjon.com/
+ *****************************************************************/
+
+/* --- INLINES --- */
+em.rfc2119 {
+ text-transform: lowercase;
+ font-variant: small-caps;
+ font-style: normal;
+ color: #900;
+}
+
+h1 acronym, h2 acronym, h3 acronym, h4 acronym, h5 acronym, h6 acronym, a acronym,
+h1 abbr, h2 abbr, h3 abbr, h4 abbr, h5 abbr, h6 abbr, a abbr {
+ border: none;
+}
+
+dfn {
+ font-weight: bold;
+}
+
+a.internalDFN {
+ color: inherit;
+ border-bottom: 1px solid #99c;
+ text-decoration: none;
+}
+
+a.externalDFN {
+ color: inherit;
+ border-bottom: 1px dotted #ccc;
+ text-decoration: none;
+}
+
+a.bibref {
+ text-decoration: none;
+}
+
+cite .bibref {
+ font-style: normal;
+}
+
+code {
+ color: #ff4500;
+}
+
+
+/* --- --- */
+ol.algorithm { counter-reset:numsection; list-style-type: none; }
+ol.algorithm li { margin: 0.5em 0; }
+ol.algorithm li:before { font-weight: bold; counter-increment: numsection; content: counters(numsection, ".") ") "; }
+
+/* --- TOC --- */
+.toc a, .tof a {
+ text-decoration: none;
+}
+
+a .secno, a .figno {
+ color: #000;
+}
+
+ul.tof, ol.tof {
+ list-style: none outside none;
+}
+
+.caption {
+ margin-top: 0.5em;
+ font-style: italic;
+}
+
+/* --- TABLE --- */
+table.simple {
+ border-spacing: 0;
+ border-collapse: collapse;
+ border-bottom: 3px solid #005a9c;
+}
+
+.simple th {
+ background: #005a9c;
+ color: #fff;
+ padding: 3px 5px;
+ text-align: left;
+}
+
+.simple th[scope="row"] {
+ background: inherit;
+ color: inherit;
+ border-top: 1px solid #ddd;
+}
+
+.simple td {
+ padding: 3px 10px;
+ border-top: 1px solid #ddd;
+}
+
+.simple tr:nth-child(even) {
+ background: #f0f6ff;
+}
+
+/* --- DL --- */
+.section dd > p:first-child {
+ margin-top: 0;
+}
+
+.section dd > p:last-child {
+ margin-bottom: 0;
+}
+
+.section dd {
+ margin-bottom: 1em;
+}
+
+.section dl.attrs dd, .section dl.eldef dd {
+ margin-bottom: 0;
+}
+</style><link rel="stylesheet" href="https://www.w3.org/StyleSheets/TR/W3C-ED"><!--[if lt IE 9]><script src='https://www.w3.org/2008/site/js/html5shiv.js'></script><![endif]--></head>
+ <body><div class="head">
+ <p>
+
+ <a href="http://www.w3.org/"><img width="72" height="48" src="https://www.w3.org/Icons/w3c_home" alt="W3C"></a>
+
+ </p>
+ <h1 class="title" id="title">MPEG-2 TS Byte Stream Format</h1>
+
+ <h2 id="w3c-editor-s-draft-04-november-2013"><abbr title="World Wide Web Consortium">W3C</abbr> Editor's Draft 04 November 2013</h2>
+ <dl>
+
+ <dt>This version:</dt>
+ <dd><a href="http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/mp2t-byte-stream-format.html">http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/mp2t-byte-stream-format.html</a></dd>
+ <dt>Latest published version:</dt>
+ <dd><a href="http://www.w3.org/TR//">http://www.w3.org/TR//</a></dd>
+
+
+ <dt>Latest editor's draft:</dt>
+ <dd><a href="http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/mp2t-byte-stream-format.html">http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/mp2t-byte-stream-format.html</a></dd>
+
+
+
+
+
+
+
+
+ <dt>Editors:</dt>
+ <dd><span>Aaron Colwell</span>, <a href="http://www.google.com/">Google Inc.</a></dd>
+<dd><span>Adrian Bateman</span>, <a href="http://www.microsoft.com/">Microsoft Corporation</a></dd>
+<dd><span>Mark Watson</span>, <a href="http://www.netflix.com/">Netflix Inc.</a></dd>
+
+
+ </dl>
+
+
+
+
+
+ <p class="copyright">
+ <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a> ©
+ 2013
+
+ <a href="http://www.w3.org/"><abbr title="World Wide Web Consortium">W3C</abbr></a><sup>®</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts Institute of Technology">MIT</abbr></a>,
+ <a href="http://www.ercim.eu/"><abbr title="European Research Consortium for Informatics and Mathematics">ERCIM</abbr></a>,
+ <a href="http://www.keio.ac.jp/">Keio</a>, <a href="http://ev.buaa.edu.cn/">Beihang</a>), All Rights Reserved.
+ <abbr title="World Wide Web Consortium">W3C</abbr> <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a> and
+ <a href="http://www.w3.org/Consortium/Legal/copyright-documents">document use</a> rules apply.
+ </p>
+
+
+ <hr>
+</div>
+ <section id="abstract" class="introductory"><h2>Abstract</h2><p>
+ This specification defines a <a href="http://www.w3.org/TR/media-source/">Media Source Extensions</a> byte stream format specification based on MPEG-2 Transport Streams.
+ </p></section><section id="sotd" class="introductory"><h2>Status of This Document</h2>
+
+
+
+ <p>
+ <em>This section describes the status of this document at the time of its publication. Other
+ documents may supersede this document. A list of current <abbr title="World Wide Web Consortium">W3C</abbr> publications and the latest revision
+ of this technical report can be found in the <a href="http://www.w3.org/TR/"><abbr title="World Wide Web Consortium">W3C</abbr> technical reports
+ index</a> at http://www.w3.org/TR/.</em>
+ </p>
+
+ <p>
+ This document was published by the <a href="http://www.w3.org/html/wg/">HTML Working Group</a> as an Editor's Draft.
+
+
+ If you wish to make comments regarding this document, please send them to
+ <a href="mailto:public-html-media@w3.org">public-html-media@w3.org</a>
+ (<a href="mailto:public-html-media-request@w3.org?subject=subscribe">subscribe</a>,
+ <a href="http://lists.w3.org/Archives/Public/public-html-media/">archives</a>).
+
+
+
+
+ All comments are welcome.
+
+
+ </p><p>
+ Publication as an Editor's Draft does not imply endorsement by the <abbr title="World Wide Web Consortium">W3C</abbr> Membership.
+ This is a draft document and may be updated, replaced or obsoleted by other documents at
+ any time. It is inappropriate to cite this document as other than work in progress.
+ </p>
+
+
+ <p>
+
+ This document was produced by a group operating under the
+ <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5 February 2004 <abbr title="World Wide Web Consortium">W3C</abbr> Patent Policy</a>.
+
+
+
+
+ <abbr title="World Wide Web Consortium">W3C</abbr> maintains a <a href="http://www.w3.org/2004/01/pp-impl/40318/status" rel="disclosure">public list of any patent disclosures</a>
+
+ made in connection with the deliverables of the group; that page also includes instructions for
+ disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains
+ <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential Claim(s)</a> must disclose the
+ information in accordance with <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section
+ 6 of the <abbr title="World Wide Web Consortium">W3C</abbr> Patent Policy</a>.
+
+
+ </p>
+
+
+
+
+</section><section id="toc"><h2 class="introductory">Table of Contents</h2><ul class="toc"><li class="tocline"><a href="#introduction" class="tocxref"><span class="secno">1. </span>Introduction</a></li><li class="tocline"><a href="#mime-parameters" class="tocxref"><span class="secno">2. </span>MIME-type info</a></li><li class="tocline"><a href="#mpeg2ts-general" class="tocxref"><span class="secno">3. </span>General Transport Stream Requirements</a></li><li class="tocline"><a href="#mpeg2ts-init-segments" class="tocxref"><span class="secno">4. </span>Initialization Segments</a></li><li class="tocline"><a href="#mpeg2ts-media-segments" class="tocxref"><span class="secno">5. </span>Media Segments</a></li><li class="tocline"><a href="#mpeg2ts-random-access-points" class="tocxref"><span class="secno">6. </span>Random Access Points</a></li><li class="tocline"><a href="#mpeg2ts-discontinuities" class="tocxref"><span class="secno">7. </span>Timestamp Rollover & Discontinuities</a></li><li class="tocline"><a href="#acknowledgements" class="tocxref"><span class="secno">8. </span>Acknowledgments</a></li></ul></section>
+
+ <section id="introduction">
+ <!--OddPage--><h2><span class="secno">1. </span>Introduction</h2>
+ <p>This specification defines segment formats for implementations that choose to support MPEG-2 Transport Streams
+ (MPEG-2 TS) specified in <a href="http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=44169">ISO/IEC 13818-1</a>.</p> It defines the MIME-type parameters used to signal codecs, and provides
+ the necessary format specific definitions for <a href="http://www.w3.org/TR/media-source/#init-segment">initialization segments</a>, <a href="http://www.w3.org/TR/media-source/#media-segment">media segments</a>, and <a href="http://www.w3.org/TR/media-source/#random-access-point">random access points</a> required by
+ the <a href="http://www.w3.org/TR/media-source/#byte-stream-formats">byte stream formats section</a> of the Media Source Extensions spec. This document also defines extra behaviors and state that only apply to this
+ byte stream format.<p></p>
+ </section>
+
+ <section id="mime-parameters">
+ <!--OddPage--><h2><span class="secno">2. </span>MIME-type info</h2>
+ <p>The MIME-type/subtype pair of "video/MP2T", as specified in <a href="http://tools.ietf.org/html/rfc3551">RFC 3551</a>, must be used for byte streams that conform
+ to this specification.</p>
+
+ <p>This following parameters can be used in the MIME-type passed to <code><a href="http://www.w3.org/TR/media-source/#widl-MediaSource-isTypeSupported-boolean-DOMString-type">isTypeSupported()</a></code> or <code><a href="http://www.w3.org/TR/media-source/#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type">addSourceBuffer()</a></code>.</p>
+ <dl>
+ <dt>codecs</dt>
+ <dd>
+ A comma separated list of codec IDs used to specify what codecs will be used in the byte stream. Implementations should accept IDs in the form specified by
+ <a href="http://tools.ietf.org/html/rfc6381">RFC 6381</a>.
+ <div class="note"><div class="note-title"><span>Note</span></div><div class="">Implementations may only implement a subset of the codecs and profiles mentioned in the RFC.</div></div>
+ </dd>
+ </dl>
+ </section>
+
+ <section id="mpeg2ts-general">
+ <!--OddPage--><h2><span class="secno">3. </span>General Transport Stream Requirements</h2>
+ <p>MPEG-2 TS media and initialization segments must conform to the MPEG-2 TS Adaptive Profile (ISO/IEC 13818-1:2012 Amd. 2).</p>
+
+ <p>The user agent must run the <a href="http://www.w3.org/TR/media-source/#end-of-stream-algorithm">end of stream algorithm</a> with the <var>error</var> parameter set to <code><a href="http://www.w3.org/TR/media-source/#idl-def-EndOfStreamError.decode">"decode"</a></code> if any of the following conditions are met:</p>
+ <ol>
+ <li>Segments do not contain complete MPEG-2 TS packets.</li>
+ <li>Segments do not contain complete PES packets and sections.</li>
+ <li>Segments contain more than one program.</li>
+ <li>At least one MPEG-2 TS packet has a non-zero transport_error_indicator.</li>
+ </ol>
+ </section>
+ <section id="mpeg2ts-init-segments">
+ <!--OddPage--><h2><span class="secno">4. </span>Initialization Segments</h2>
+ <p>An MPEG-2 TS initialization segment consists of a single PAT and a single PMT.</p>
+ <p>The user agent must run the <a href="http://www.w3.org/TR/media-source/#end-of-stream-algorithm">end of stream algorithm</a> with the <var>error</var> parameter set to <code><a href="http://www.w3.org/TR/media-source/#idl-def-EndOfStreamError.decode">"decode"</a></code> if any of the following conditions are met:</p>
+ <ol>
+ <li>A PAT is not present in the <a href="http://www.w3.org/TR/media-source/#init-segment">initialization segment</a></li>
+ <li>A PMT is not present in the <a href="http://www.w3.org/TR/media-source/#init-segment">initialization segment</a></li>
+ </ol>
+ The user agent must accept and ignore other SI, such as CAT, that are invariant for all subsequent media segments.
+ </section>
+
+ <section id="mpeg2ts-media-segments">
+ <!--OddPage--><h2><span class="secno">5. </span>Media Segments</h2>
+
+ <p>The user agent must run the <a href="http://www.w3.org/TR/media-source/#end-of-stream-algorithm">end of stream algorithm</a> with the <var>error</var> parameter set to <code><a href="http://www.w3.org/TR/media-source/#idl-def-EndOfStreamError.decode">"decode"</a></code> if any of the following conditions are met:</p>
+ <ol>
+ <li>A media segment relies on initialization information in another media segment.</li>
+ <li>At least one PES packet does not have a PTS timestamp.</li>
+ <li>PCR is not present in the Segment prior to the first byte of a TS packet payload containing media data.</li>
+ </ol>
+
+ The user agent will accept and ignore PSI that is identical to the information in the last initialization segment which may appear repeatedly throughout the segment.
+ </section>
+
+ <section id="mpeg2ts-random-access-points">
+ <!--OddPage--><h2><span class="secno">6. </span>Random Access Points</h2>
+ <p>A random access point as defined in this specification corresponds to Elementary Stream Random Access Point as defined in
+ <a href="http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=44169">ISO/IEC 13818-1</a>.</p>
+ </section>
+ <section id="mpeg2ts-discontinuities">
+ <!--OddPage--><h2><span class="secno">7. </span>Timestamp Rollover & Discontinuities</h2>
+ <p>Timestamp rollovers and discontinuities must be handled by the UA. The UA's MPEG-2 TS implementation must maintain an internal offset
+ variable, <dfn id="mpeg2ts-timestampOffset">MPEG2TS_timestampOffset</dfn>, to keep track of the offset that needs to be applied to timestamps
+ that have rolled over or are part of a discontinuity. <var>MPEG2TS_timestampOffset</var> is initially set to 0 when the <a>SourceBuffer</a> is
+ created. This offset must be applied to the timestamps as part of the conversion process from MPEG-2 TS packets
+ into <a href="http://www.w3.org/TR/media-source/#coded-frame">coded frames</a> for the <a href="http://www.w3.org/TR/media-source/#sourcebuffer-coded-frame-processing">coded frame processing algorithm</a>. This results in the coded frame timestamps
+ for a packet being computed by the following equations:</p>
+ <pre> Coded Frame Presentation Timestamp = (MPEG-2 TS presentation timestamp) + <var>MPEG2TS_timestampOffset</var>
+ Coded Frame Decode Timestamp = (MPEG-2 TS decode timestamp) + <var>MPEG2TS_timestampOffset</var></pre>
+
+ <p><var><a href="#mpeg2ts-timestampOffset">MPEG2TS_timestampOffset</a></var> is updated in the following ways:</p>
+ <ul>
+ <li>Each time a timestamp rollover is detected, 2^33 must be added to <var><a href="#mpeg2ts-timestampOffset">MPEG2TS_timestampOffset</a></var>.</li>
+ <li>When a discontinuity is detected, <var><a href="#mpeg2ts-timestampOffset">MPEG2TS_timestampOffset</a></var> must be adjusted to make the timestamps after the discontinuity appear
+ to come immediately after the timestamps before the discontinuity.</li>
+ <li>When <code><a href="http://www.w3.org/TR/media-source/#widl-SourceBuffer-abort-void">abort()</a></code> is called, <var><a href="#mpeg2ts-timestampOffset">MPEG2TS_timestampOffset</a></var> must be set to 0.</li>
+ <li>When <code><a href="http://www.w3.org/TR/media-source/#widl-SourceBuffer-timestampOffset">timestampOffset</a></code> is successfully set, <var><a href="#mpeg2ts-timestampOffset">MPEG2TS_timestampOffset</a></var> must be set to 0.</li>
+ </ul>
+ </section>
+
+ <section id="acknowledgements">
+ <!--OddPage--><h2><span class="secno">8. </span>Acknowledgments</h2>
+ The editors would like to thank Alex Giladi, Bob Lund, David Singer, Duncan Rowden, Glenn Adams, Mark Vickers, and Michael Thornburgh for their contributions to this specification.
+ </section>
+
+
+<form action="//www.w3.org/Bugs/Public/enter_bug.cgi" target="_blank" style="position: fixed; width: 10em; top: 1em; right: 1em; font-family: Tahoma, sans-serif; font-size: 11px; opacity: 0.8; text-align: right;">See a problem? Select text and <input type="submit" accesskey="f" value="file a bug" style="font-family: Tahoma, sans-serif; font-size: 10px;"><input type="hidden" name="comment" value=""><input type="hidden" name="short_desc" value="[MSE] "><input type="hidden" name="product" value="HTML WG"><input type="hidden" name="component" value="Media Source Extensions">.</form></body></html>
--- a/media-source/mse.css Mon Nov 04 11:16:03 2013 -0800
+++ b/media-source/mse.css Mon Nov 04 15:42:39 2013 -0800
@@ -2,9 +2,6 @@
.nonnormative h3 { color: inherit; background: inherit; }
.nonnormative:before { display: table; margin: -1em -0.5em -0.5em auto; width: auto; content: 'This section is non-normative.'; color: black; font-style: italic; border: solid 2px; background: white; padding: 0 0.25em; }
-.iso-box { font-weight: bold; }
-.iso-var { font-style: italic; }
-
table.old-table { border-collapse: collapse; border-style: hidden hidden none hidden; }
table.old-table thead, table tbody { border-bottom: solid; }
table.old-table tbody th:first-child { border-left: solid; }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/media-source/webm-byte-stream-format-respec.html Mon Nov 04 15:42:39 2013 -0800
@@ -0,0 +1,211 @@
+<!DOCTYPE html SYSTEM "about:legacy-compat">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>WebM Byte Stream Format</title>
+ <script src="respec-w3c-common.js" class="remove"></script>
+ <script src="media-source.js" class="remove"></script>
+ <script class="remove">
+ (function() {
+ var webmContainerSpecDefinitions = {
+ 'webm-spec': { fragment: '#webm-guidelines', link_text: 'WebM spec', },
+ 'webm-ebml-header': { fragment: '#ebml-basics', link_text: 'EBML Header', },
+ 'webm-segment': { fragment: '#segment', link_text: 'Segment', },
+ 'webm-info': { fragment: '#segment-information', link_text: 'Segment Information', },
+ 'webm-tracks': { fragment: '#track', link_text: 'Tracks', },
+ 'webm-cues': { fragment: '#cueing-data', link_text: 'Cues', },
+ 'webm-chapters': { fragment: '#chapters', link_text: 'Chapters', },
+ 'webm-cluster': { fragment: '#cluster', link_text: 'Cluster', },
+ 'webm-muxer-guidelines': { fragment: '#muxer-guidelines', link_text: 'WebM Muxer Guidelines', },
+ };
+
+ var webmByteStreamFormatDefinitions = {
+ 'webm-init-segment': { fragment: '#webm-init-segments', link_text: 'WebM initialization segment', },
+ };
+
+ mediaSourceAddDefinitionInfo("webm-container-spec", "http://www.webmproject.org/code/specs/container/", webmContainerSpecDefinitions);
+ mediaSourceAddDefinitionInfo("webm-byte-stream-format", "", webmByteStreamFormatDefinitions);
+ })();
+ </script>
+
+ <script class="remove">
+ var respecConfig = {
+ // specification status (e.g. WD, LCWD, NOTE, etc.). If in doubt use ED.
+ specStatus: "ED",
+
+ // the specification's short name, as in http://www.w3.org/TR/short-name/
+ shortName: "",
+
+ // if there a publicly available Editor's Draft, this is the link
+ edDraftURI: "http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/webm-byte-stream-format.html",
+
+ // if this is a LCWD, uncomment and set the end of its review period
+ // lcEnd: "2009-08-05",
+
+ // editors, add as many as you like
+ // only "name" is required
+ editors: [
+ { name: "Aaron Colwell", url: "", company: "Google Inc.", companyURL: "http://www.google.com/" },
+ ],
+
+ mseDefGroupName: "webm-byte-stream-format",
+ mseUnusedGroupNameExcludeList: ["media-source"],
+ mseContributors: [
+ "Frank Galligan",
+ "Philip Jägenstedt",
+ ],
+
+ // name of the WG
+ wg: "HTML Working Group",
+
+ // URI of the public WG page
+ wgURI: "http://www.w3.org/html/wg/",
+
+ // name (without the @w3c.org) of the public mailing to which comments are due
+ wgPublicList: "public-html-media",
+
+ // URI of the patent status for this WG, for Rec-track documents
+ // !!!! IMPORTANT !!!!
+ // This is important for Rec-track documents, do not copy a patent URI from a random
+ // document unless you know what you're doing. If in doubt ask your friendly neighbourhood
+ // Team Contact.
+ wgPatentURI: "http://www.w3.org/2004/01/pp-impl/40318/status",
+
+ noIDLIn: true,
+
+ scheme: "https",
+
+ preProcess: [ mediaSourcePreProcessor ],
+
+ // Empty definitions for objects declared in the document are here to
+ // prevent error messages from being displayed for references to these objects.
+ definitionMap: {},
+
+ postProcess: [ mediaSourcePostProcessor ]
+
+ };
+ </script>
+ <!-- script to register bugs -->
+ <script src="https://dvcs.w3.org/hg/webcomponents/raw-file/tip/assets/scripts/bug-assist.js"></script>
+ <meta name="bug.short_desc" content="[MSE] ">
+ <meta name="bug.product" content="HTML WG">
+ <meta name="bug.component" content="Media Source Extensions">
+
+ <link rel="stylesheet" href="mse.css">
+ </head>
+ <body>
+ <section id="abstract">
+ This specification defines a <a href="http://www.w3.org/TR/media-source/">Media Source Extensions</a> byte stream format specification based on the WebM container format.
+ </section>
+
+ <section id="introduction">
+ <h2>Introduction</h2>
+ <p>This specification describes a byte stream format based on the WebM container format. It defines the MIME-type parameters used to signal codecs, and provides
+ the necessary format specific definitions for <a def-id="init-segments"></a>, <a def-id="media-segments"></a>, and <a def-id="random-access-points"></a> required by
+ the <a def-id="byte-stream-formats-section"></a> of the Media Source Extensions spec.</p>
+ </section>
+
+ <section id="webm-mime-parameters">
+ <h2>MIME-type parameters</h2>
+ <p>This section specifies the parameters that can be used in the MIME-type passed to <a def-id="isTypeSupported"></a> or <a def-id="addSourceBuffer"></a>.</p>
+ <dl>
+ <dt>codecs</dt>
+ <dd>
+ A comma separated list of codec IDs used to specify what codecs will be used in the byte stream.
+ <table class="old-table">
+ <thead>
+ <tr>
+ <th>Codec ID</th>
+ <th>Valid with "audio/webm"</th>
+ <th>Valid with "video/webm"</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>vorbis</td>
+ <td>true</td>
+ <td>true</td>
+ </tr>
+ <tr>
+ <td>opus</td>
+ <td>true</td>
+ <td>true</td>
+ </tr>
+ <tr>
+ <td>vp8</td>
+ <td>false</td>
+ <td>true</td>
+ </tr>
+ <tr>
+ <td>vp9</td>
+ <td>false</td>
+ <td>true</td>
+ </tr>
+ </tbody>
+ </table>
+ <div class="note">
+ Implementations should support all of the codec IDs mentioned in the table above.
+ </div>
+
+ <p>Examples of valid MIME-types with a codecs parameter.</p>
+ <ul>
+ <li>audio/webm;codecs="vorbis"</li>
+ <li>video/webm;codecs="vorbis"</li>
+ <li>video/webm;codecs="vp8"</li>
+ <li>video/webm;codecs="vp8,vorbis"</li>
+ <li>video/webm;codecs="vp9,opus"</li>
+ </ul>
+ </dd>
+ </dl>
+ </section>
+
+ <section id="webm-init-segments">
+ <h2>Initialization Segments</h2>
+ <p>A WebM <a def-id="init-segment"></a> must contain a subset of the elements at the start of a typical WebM file.</p>
+
+ <p>The user agent must run the <a def-id="eos-decode"></a> if any of the following conditions are not met:</p>
+ <ol>
+ <li>The <a def-id="init-segment"></a> must start with an <a def-id="webm-ebml-header"></a> element, followed by a <a def-id="webm-segment"></a> header.</li>
+ <li>The size value in the <a def-id="webm-segment"></a> header must signal an "unknown size" or contain a value large enough to include the <a def-id="webm-info"></a> and <a def-id="webm-tracks"></a> elements that follow.</li>
+ <li>A <a def-id="webm-info"></a> element and a <a def-id="webm-tracks"></a> element must appear, in that order, after the <a def-id="webm-segment"></a> header and before any further <a def-id="webm-ebml-header"></a> or <a def-id="webm-cluster"></a> elements.
+ </li>
+ </ol>
+ The user agent must accept and ignore any elements other than an <a def-id="webm-ebml-header"></a> or a <a def-id="webm-cluster"></a> that occur before, in between, or after the <a def-id="webm-info"></a> and
+ <a def-id="webm-tracks"></a> elements.
+ </section>
+
+ <section id="webm-media-segments">
+ <h2>Media Segments</h2>
+ <p>A WebM <a def-id="media-segment"></a> is a single <a def-id="webm-cluster"></a> element.</p>
+
+ <p>The user agent uses the following rules when interpreting content in a <a def-id="webm-cluster"></a>:</p>
+ <ol>
+ <li>The TimecodeScale in the <a def-id="webm-init-segment"></a> most recently appended applies to all timestamps in the <a def-id="webm-cluster"></a></li>
+ <li>The Timecode element in the <a def-id="webm-cluster"></a> contains a <a def-id="presentation-timestamp"></a> in TimecodeScale units.</li>
+ <li>The Cluster header may contain an "unknown" size value. If it does then the end of the cluster is reached when another <a def-id="webm-cluster"></a> header or an element header that indicates the start
+ of an <a def-id="webm-init-segment"></a> is encountered.</li>
+ </ol>
+
+ <p>The user agent must run the <a def-id="eos-decode"></a> if any of the following conditions are not met:</p>
+ <ol>
+ <li>The Timecode element must appear before any Block & SimpleBlock elements in a <a def-id="webm-cluster"></a>.</li>
+ <li>Block & SimpleBlock elements are in time increasing order consistent with the <a def-id="webm-spec"></a>.</li>
+ <li>If the most recent <a def-id="webm-init-segment"></a> describes multiple tracks, then blocks from all the tracks must be interleaved in time increasing order. At least one block from all audio and video
+ tracks must be present.</li>
+ </ol>
+
+ The user agent must accept and ignore <a def-id="webm-cues"></a> or <a def-id="webm-chapters"></a> elements that follow a <a def-id="webm-cluster"></a> element.
+ </section>
+
+ <section id="webm-random-access-points">
+ <h2>Random Access Points</h2>
+ <p>A SimpleBlock element with its Keyframe flag set signals the location of a <a def-id="random-access-point"></a> for that track. Media segments containing multiple tracks are only considered a random access
+ point if the first SimpleBlock for each track has its Keyframe flag set. The order of the multiplexed blocks must conform to the <a def-id="webm-muxer-guidelines"></a>.</p>
+ </section>
+
+ <section id="acknowledgements">
+ <h2>Acknowledgments</h2>
+ The editors would like to thank <a def-id="contributors"></a> for their contributions to this specification.
+ </section>
+ </body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/media-source/webm-byte-stream-format.html Mon Nov 04 15:42:39 2013 -0800
@@ -0,0 +1,396 @@
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>WebM Byte Stream Format</title>
+
+
+
+
+
+ <!-- script to register bugs -->
+ <script src="https://dvcs.w3.org/hg/webcomponents/raw-file/tip/assets/scripts/bug-assist.js"></script>
+ <meta name="bug.short_desc" content="[MSE] ">
+ <meta name="bug.product" content="HTML WG">
+ <meta name="bug.component" content="Media Source Extensions">
+
+ <style>/* --- ISSUES/NOTES --- */
+div.issue-title, div.note-title {
+ padding-right: 1em;
+ min-width: 7.5em;
+ color: #b9ab2d;
+}
+div.issue-title { color: #e05252; }
+div.note-title { color: #52e052; }
+div.issue-title span, div.note-title span {
+ text-transform: uppercase;
+}
+div.note, div.issue {
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+.note > p:first-child, .issue > p:first-child { margin-top: 0 }
+.issue, .note {
+ padding: .5em;
+ border-left-width: .5em;
+ border-left-style: solid;
+}
+div.issue, div.note {
+ padding: 0.5em;
+ margin: 1em 0;
+ position: relative;
+ clear: both;
+}
+span.note, span.issue { padding: .1em .5em .15em; }
+
+.issue {
+ border-color: #e05252;
+ background: #fbe9e9;
+}
+.note {
+ border-color: #52e052;
+ background: #e9fbe9;
+}
+
+
+</style><link rel="stylesheet" href="mse.css">
+ <style>/*****************************************************************
+ * ReSpec 3 CSS
+ * Robin Berjon - http://berjon.com/
+ *****************************************************************/
+
+/* --- INLINES --- */
+em.rfc2119 {
+ text-transform: lowercase;
+ font-variant: small-caps;
+ font-style: normal;
+ color: #900;
+}
+
+h1 acronym, h2 acronym, h3 acronym, h4 acronym, h5 acronym, h6 acronym, a acronym,
+h1 abbr, h2 abbr, h3 abbr, h4 abbr, h5 abbr, h6 abbr, a abbr {
+ border: none;
+}
+
+dfn {
+ font-weight: bold;
+}
+
+a.internalDFN {
+ color: inherit;
+ border-bottom: 1px solid #99c;
+ text-decoration: none;
+}
+
+a.externalDFN {
+ color: inherit;
+ border-bottom: 1px dotted #ccc;
+ text-decoration: none;
+}
+
+a.bibref {
+ text-decoration: none;
+}
+
+cite .bibref {
+ font-style: normal;
+}
+
+code {
+ color: #ff4500;
+}
+
+
+/* --- --- */
+ol.algorithm { counter-reset:numsection; list-style-type: none; }
+ol.algorithm li { margin: 0.5em 0; }
+ol.algorithm li:before { font-weight: bold; counter-increment: numsection; content: counters(numsection, ".") ") "; }
+
+/* --- TOC --- */
+.toc a, .tof a {
+ text-decoration: none;
+}
+
+a .secno, a .figno {
+ color: #000;
+}
+
+ul.tof, ol.tof {
+ list-style: none outside none;
+}
+
+.caption {
+ margin-top: 0.5em;
+ font-style: italic;
+}
+
+/* --- TABLE --- */
+table.simple {
+ border-spacing: 0;
+ border-collapse: collapse;
+ border-bottom: 3px solid #005a9c;
+}
+
+.simple th {
+ background: #005a9c;
+ color: #fff;
+ padding: 3px 5px;
+ text-align: left;
+}
+
+.simple th[scope="row"] {
+ background: inherit;
+ color: inherit;
+ border-top: 1px solid #ddd;
+}
+
+.simple td {
+ padding: 3px 10px;
+ border-top: 1px solid #ddd;
+}
+
+.simple tr:nth-child(even) {
+ background: #f0f6ff;
+}
+
+/* --- DL --- */
+.section dd > p:first-child {
+ margin-top: 0;
+}
+
+.section dd > p:last-child {
+ margin-bottom: 0;
+}
+
+.section dd {
+ margin-bottom: 1em;
+}
+
+.section dl.attrs dd, .section dl.eldef dd {
+ margin-bottom: 0;
+}
+</style><link rel="stylesheet" href="https://www.w3.org/StyleSheets/TR/W3C-ED"><!--[if lt IE 9]><script src='https://www.w3.org/2008/site/js/html5shiv.js'></script><![endif]--></head>
+ <body><div class="head">
+ <p>
+
+ <a href="http://www.w3.org/"><img width="72" height="48" src="https://www.w3.org/Icons/w3c_home" alt="W3C"></a>
+
+ </p>
+ <h1 class="title" id="title">WebM Byte Stream Format</h1>
+
+ <h2 id="w3c-editor-s-draft-04-november-2013"><abbr title="World Wide Web Consortium">W3C</abbr> Editor's Draft 04 November 2013</h2>
+ <dl>
+
+ <dt>This version:</dt>
+ <dd><a href="http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/webm-byte-stream-format.html">http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/webm-byte-stream-format.html</a></dd>
+ <dt>Latest published version:</dt>
+ <dd><a href="http://www.w3.org/TR//">http://www.w3.org/TR//</a></dd>
+
+
+ <dt>Latest editor's draft:</dt>
+ <dd><a href="http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/webm-byte-stream-format.html">http://dvcs.w3.org/hg/html-media/raw-file/default/media-source/webm-byte-stream-format.html</a></dd>
+
+
+
+
+
+
+
+
+ <dt>Editor:</dt>
+ <dd><span>Aaron Colwell</span>, <a href="http://www.google.com/">Google Inc.</a></dd>
+
+
+ </dl>
+
+
+
+
+
+ <p class="copyright">
+ <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a> ©
+ 2013
+
+ <a href="http://www.w3.org/"><abbr title="World Wide Web Consortium">W3C</abbr></a><sup>®</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts Institute of Technology">MIT</abbr></a>,
+ <a href="http://www.ercim.eu/"><abbr title="European Research Consortium for Informatics and Mathematics">ERCIM</abbr></a>,
+ <a href="http://www.keio.ac.jp/">Keio</a>, <a href="http://ev.buaa.edu.cn/">Beihang</a>), All Rights Reserved.
+ <abbr title="World Wide Web Consortium">W3C</abbr> <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a> and
+ <a href="http://www.w3.org/Consortium/Legal/copyright-documents">document use</a> rules apply.
+ </p>
+
+
+ <hr>
+</div>
+ <section id="abstract" class="introductory"><h2>Abstract</h2><p>
+ This specification defines a <a href="http://www.w3.org/TR/media-source/">Media Source Extensions</a> byte stream format specification based on the WebM container format.
+ </p></section><section id="sotd" class="introductory"><h2>Status of This Document</h2>
+
+
+
+ <p>
+ <em>This section describes the status of this document at the time of its publication. Other
+ documents may supersede this document. A list of current <abbr title="World Wide Web Consortium">W3C</abbr> publications and the latest revision
+ of this technical report can be found in the <a href="http://www.w3.org/TR/"><abbr title="World Wide Web Consortium">W3C</abbr> technical reports
+ index</a> at http://www.w3.org/TR/.</em>
+ </p>
+
+ <p>
+ This document was published by the <a href="http://www.w3.org/html/wg/">HTML Working Group</a> as an Editor's Draft.
+
+
+ If you wish to make comments regarding this document, please send them to
+ <a href="mailto:public-html-media@w3.org">public-html-media@w3.org</a>
+ (<a href="mailto:public-html-media-request@w3.org?subject=subscribe">subscribe</a>,
+ <a href="http://lists.w3.org/Archives/Public/public-html-media/">archives</a>).
+
+
+
+
+ All comments are welcome.
+
+
+ </p><p>
+ Publication as an Editor's Draft does not imply endorsement by the <abbr title="World Wide Web Consortium">W3C</abbr> Membership.
+ This is a draft document and may be updated, replaced or obsoleted by other documents at
+ any time. It is inappropriate to cite this document as other than work in progress.
+ </p>
+
+
+ <p>
+
+ This document was produced by a group operating under the
+ <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5 February 2004 <abbr title="World Wide Web Consortium">W3C</abbr> Patent Policy</a>.
+
+
+
+
+ <abbr title="World Wide Web Consortium">W3C</abbr> maintains a <a href="http://www.w3.org/2004/01/pp-impl/40318/status" rel="disclosure">public list of any patent disclosures</a>
+
+ made in connection with the deliverables of the group; that page also includes instructions for
+ disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains
+ <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential Claim(s)</a> must disclose the
+ information in accordance with <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section
+ 6 of the <abbr title="World Wide Web Consortium">W3C</abbr> Patent Policy</a>.
+
+
+ </p>
+
+
+
+
+</section><section id="toc"><h2 class="introductory">Table of Contents</h2><ul class="toc"><li class="tocline"><a href="#introduction" class="tocxref"><span class="secno">1. </span>Introduction</a></li><li class="tocline"><a href="#webm-mime-parameters" class="tocxref"><span class="secno">2. </span>MIME-type parameters</a></li><li class="tocline"><a href="#webm-init-segments" class="tocxref"><span class="secno">3. </span>Initialization Segments</a></li><li class="tocline"><a href="#webm-media-segments" class="tocxref"><span class="secno">4. </span>Media Segments</a></li><li class="tocline"><a href="#webm-random-access-points" class="tocxref"><span class="secno">5. </span>Random Access Points</a></li><li class="tocline"><a href="#acknowledgements" class="tocxref"><span class="secno">6. </span>Acknowledgments</a></li></ul></section>
+
+ <section id="introduction">
+ <!--OddPage--><h2><span class="secno">1. </span>Introduction</h2>
+ <p>This specification describes a byte stream format based on the WebM container format. It defines the MIME-type parameters used to signal codecs, and provides
+ the necessary format specific definitions for <a href="http://www.w3.org/TR/media-source/#init-segment">initialization segments</a>, <a href="http://www.w3.org/TR/media-source/#media-segment">media segments</a>, and <a href="http://www.w3.org/TR/media-source/#random-access-point">random access points</a> required by
+ the <a href="http://www.w3.org/TR/media-source/#byte-stream-formats">byte stream formats section</a> of the Media Source Extensions spec.</p>
+ </section>
+
+ <section id="webm-mime-parameters">
+ <!--OddPage--><h2><span class="secno">2. </span>MIME-type parameters</h2>
+ <p>This section specifies the parameters that can be used in the MIME-type passed to <code><a href="http://www.w3.org/TR/media-source/#widl-MediaSource-isTypeSupported-boolean-DOMString-type">isTypeSupported()</a></code> or <code><a href="http://www.w3.org/TR/media-source/#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type">addSourceBuffer()</a></code>.</p>
+ <dl>
+ <dt>codecs</dt>
+ <dd>
+ A comma separated list of codec IDs used to specify what codecs will be used in the byte stream.
+ <table class="old-table">
+ <thead>
+ <tr>
+ <th>Codec ID</th>
+ <th>Valid with "audio/webm"</th>
+ <th>Valid with "video/webm"</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>vorbis</td>
+ <td>true</td>
+ <td>true</td>
+ </tr>
+ <tr>
+ <td>opus</td>
+ <td>true</td>
+ <td>true</td>
+ </tr>
+ <tr>
+ <td>vp8</td>
+ <td>false</td>
+ <td>true</td>
+ </tr>
+ <tr>
+ <td>vp9</td>
+ <td>false</td>
+ <td>true</td>
+ </tr>
+ </tbody>
+ </table>
+ <div class="note"><div class="note-title"><span>Note</span></div><div class="">
+ Implementations should support all of the codec IDs mentioned in the table above.
+ </div></div>
+
+ <p>Examples of valid MIME-types with a codecs parameter.</p>
+ <ul>
+ <li>audio/webm;codecs="vorbis"</li>
+ <li>video/webm;codecs="vorbis"</li>
+ <li>video/webm;codecs="vp8"</li>
+ <li>video/webm;codecs="vp8,vorbis"</li>
+ <li>video/webm;codecs="vp9,opus"</li>
+ </ul>
+ </dd>
+ </dl>
+ </section>
+
+ <section id="webm-init-segments">
+ <!--OddPage--><h2><span class="secno">3. </span>Initialization Segments</h2>
+ <p>A WebM <a href="http://www.w3.org/TR/media-source/#init-segment">initialization segment</a> must contain a subset of the elements at the start of a typical WebM file.</p>
+
+ <p>The user agent must run the <a href="http://www.w3.org/TR/media-source/#end-of-stream-algorithm">end of stream algorithm</a> with the <var>error</var> parameter set to <code><a href="http://www.w3.org/TR/media-source/#idl-def-EndOfStreamError.decode">"decode"</a></code> if any of the following conditions are not met:</p>
+ <ol>
+ <li>The <a href="http://www.w3.org/TR/media-source/#init-segment">initialization segment</a> must start with an <a href="http://www.webmproject.org/code/specs/container/#ebml-basics">EBML Header</a> element, followed by a <a href="http://www.webmproject.org/code/specs/container/#segment">Segment</a> header.</li>
+ <li>The size value in the <a href="http://www.webmproject.org/code/specs/container/#segment">Segment</a> header must signal an "unknown size" or contain a value large enough to include the <a href="http://www.webmproject.org/code/specs/container/#segment-information">Segment Information</a> and <a href="http://www.webmproject.org/code/specs/container/#track">Tracks</a> elements that follow.</li>
+ <li>A <a href="http://www.webmproject.org/code/specs/container/#segment-information">Segment Information</a> element and a <a href="http://www.webmproject.org/code/specs/container/#track">Tracks</a> element must appear, in that order, after the <a href="http://www.webmproject.org/code/specs/container/#segment">Segment</a> header and before any further <a href="http://www.webmproject.org/code/specs/container/#ebml-basics">EBML Header</a> or <a href="http://www.webmproject.org/code/specs/container/#cluster">Cluster</a> elements.
+ </li>
+ </ol>
+ The user agent must accept and ignore any elements other than an <a href="http://www.webmproject.org/code/specs/container/#ebml-basics">EBML Header</a> or a <a href="http://www.webmproject.org/code/specs/container/#cluster">Cluster</a> that occur before, in between, or after the <a href="http://www.webmproject.org/code/specs/container/#segment-information">Segment Information</a> and
+ <a href="http://www.webmproject.org/code/specs/container/#track">Tracks</a> elements.
+ </section>
+
+ <section id="webm-media-segments">
+ <!--OddPage--><h2><span class="secno">4. </span>Media Segments</h2>
+ <p>A WebM <a href="http://www.w3.org/TR/media-source/#media-segment">media segment</a> is a single <a href="http://www.webmproject.org/code/specs/container/#cluster">Cluster</a> element.</p>
+
+ <p>The user agent uses the following rules when interpreting content in a <a href="http://www.webmproject.org/code/specs/container/#cluster">Cluster</a>:</p>
+ <ol>
+ <li>The TimecodeScale in the <a href="#webm-init-segments">WebM initialization segment</a> most recently appended applies to all timestamps in the <a href="http://www.webmproject.org/code/specs/container/#cluster">Cluster</a></li>
+ <li>The Timecode element in the <a href="http://www.webmproject.org/code/specs/container/#cluster">Cluster</a> contains a <a href="http://www.w3.org/TR/media-source/#presentation-timestamp">presentation timestamp</a> in TimecodeScale units.</li>
+ <li>The Cluster header may contain an "unknown" size value. If it does then the end of the cluster is reached when another <a href="http://www.webmproject.org/code/specs/container/#cluster">Cluster</a> header or an element header that indicates the start
+ of an <a href="#webm-init-segments">WebM initialization segment</a> is encountered.</li>
+ </ol>
+
+ <p>The user agent must run the <a href="http://www.w3.org/TR/media-source/#end-of-stream-algorithm">end of stream algorithm</a> with the <var>error</var> parameter set to <code><a href="http://www.w3.org/TR/media-source/#idl-def-EndOfStreamError.decode">"decode"</a></code> if any of the following conditions are not met:</p>
+ <ol>
+ <li>The Timecode element must appear before any Block & SimpleBlock elements in a <a href="http://www.webmproject.org/code/specs/container/#cluster">Cluster</a>.</li>
+ <li>Block & SimpleBlock elements are in time increasing order consistent with the <a href="http://www.webmproject.org/code/specs/container/#webm-guidelines">WebM spec</a>.</li>
+ <li>If the most recent <a href="#webm-init-segments">WebM initialization segment</a> describes multiple tracks, then blocks from all the tracks must be interleaved in time increasing order. At least one block from all audio and video
+ tracks must be present.</li>
+ </ol>
+
+ The user agent must accept and ignore <a href="http://www.webmproject.org/code/specs/container/#cueing-data">Cues</a> or <a href="http://www.webmproject.org/code/specs/container/#chapters">Chapters</a> elements that follow a <a href="http://www.webmproject.org/code/specs/container/#cluster">Cluster</a> element.
+ </section>
+
+ <section id="webm-random-access-points">
+ <!--OddPage--><h2><span class="secno">5. </span>Random Access Points</h2>
+ <p>A SimpleBlock element with its Keyframe flag set signals the location of a <a href="http://www.w3.org/TR/media-source/#random-access-point">random access point</a> for that track. Media segments containing multiple tracks are only considered a random access
+ point if the first SimpleBlock for each track has its Keyframe flag set. The order of the multiplexed blocks must conform to the <a href="http://www.webmproject.org/code/specs/container/#muxer-guidelines">WebM Muxer Guidelines</a>.</p>
+ </section>
+
+ <section id="acknowledgements">
+ <!--OddPage--><h2><span class="secno">6. </span>Acknowledgments</h2>
+ The editors would like to thank Frank Galligan, and Philip Jägenstedt for their contributions to this specification.
+ </section>
+
+
+<form action="//www.w3.org/Bugs/Public/enter_bug.cgi" target="_blank" style="position: fixed; width: 10em; top: 1em; right: 1em; font-family: Tahoma, sans-serif; font-size: 11px; opacity: 0.8; text-align: right;">See a problem? Select text and <input type="submit" accesskey="f" value="file a bug" style="font-family: Tahoma, sans-serif; font-size: 10px;"><input type="hidden" name="comment" value=""><input type="hidden" name="short_desc" value="[MSE] "><input type="hidden" name="product" value="HTML WG"><input type="hidden" name="component" value="Media Source Extensions">.</form></body></html>