Minor bug fixes and adding MediaPlaybackQuality metrics.
Bug 21796 - Removed issue box from 'Append Error' algorithm.
Bug 21703 - Changed appendWindowEnd to 'unrestricted double'.
Bug 20760 - Adding MediaPlaybackQuality object.
--- a/media-source/media-source-respec.html Wed Apr 24 10:23:52 2013 -0700
+++ b/media-source/media-source-respec.html Wed Apr 24 11:38:22 2013 -0700
@@ -58,6 +58,7 @@
MediaSource: function() {},
SourceBuffer: function() {},
AbortMode: function() {},
+ MediaPlaybackQuality: function() {},
},
postProcess: [ mediaSourcePostProcessor ]
};
@@ -726,7 +727,7 @@
</ol>
</dd>
- <dt>attribute double appendWindowEnd</dt>
+ <dt>attribute unrestricted double appendWindowEnd</dt>
<dd>
<p>The presentation timestamp for the end of the <a def-id="append-window"></a>. This attribute is initially set to positive Infinity.</p>
<p>On getting, Return the initial value or the last value that was successfully set.</p>
@@ -1060,7 +1061,6 @@
<li>Set the <a def-id="updating"></a> attribute to false.</li>
<li>
<a def-id="Queue-a-task-to-fire-an-event-named"></a> <a def-id="updateerror"></a> at this <a>SourceBuffer</a> object.
- <p class="issue">Need a way to convey error information.</p>
</li>
<li><a def-id="Queue-a-task-to-fire-an-event-named"></a> <a def-id="updateend"></a> at this <a>SourceBuffer</a> object.</li>
</ol>
@@ -1616,9 +1616,30 @@
</section>
</section>
+ <section id="mediaplaybackquality">
+ <h2>MediaPlaybackQuality Object</h2>
+ <dl title="interface MediaPlaybackQuality" class="idl">
+ <dt>readonly attribute Date creationTime</dt>
+ <dd>
+ <p>The local time when this object was created.(i.e. set to new Date()).</p>
+ </dd>
+
+ <dt>readonly attribute unsigned long totalVideoFrames</dt>
+ <dd>
+ <p>The total number of frames that would have been displayed if no frames are dropped.</p>
+ </dd>
+
+ <dt>readonly attribute unsigned long droppedVideoFrames</dt>
+ <dd>
+ <p>The total number of frames dropped predecode or dropped because the frame missed
+ its display deadline.</p>
+ </dd>
+ </dl>
+ </section>
+
<section id="url">
- <h2>URL Object</h2>
- <p></p>
+ <h2>URL Object Extensions</h2>
+ <p>This section specifies extensions to the <a def-id="URL"></a>[[FILE-API]] object definition.</p>
<dl title="partial interface URL" class="idl">
<dt>static DOMString createObjectURL(MediaSource mediaSource)</dt>
@@ -1636,37 +1657,70 @@
</dl>
</section>
- <section id="htmlmediaelement-attributes">
- <h2>HTMLMediaElement attributes</h2>
- <p>This section specifies what existing attributes on the <a def-id="videoref" name="htmlmediaelement">HTMLMediaElement</a> should return when a <a>MediaSource</a> is attached to the element.</p>
-
- <p>The <a def-id="videoref" name="dom-media-seekable">HTMLMediaElement.seekable</a> attribute returns a new static <a def-id="normalized-timeranges-object"></a> created based on the following steps:</p>
- <dl class="switch">
- <dt>If <a def-id="duration"></a> equals NaN</dt>
- <dd>Return an empty <a def-id="timeranges"></a> object.</dd>
- <dt>If <a def-id="duration"></a> equals positive Infinity</dt>
- <dd>Return a single range with a start time of 0 and an end time equal to the highest end time reported by the <a def-id="hme-buffered"></a> attribute.</dd>
- <dt>Otherwise</dt>
- <dd>Return a single range with a start time of 0 and an end time equal to <a def-id="duration"></a>.</dd>
- </dl>
+ <section id="htmlmediaelement-extensions">
+ <h2>HTMLMediaElement Extensions</h2>
- <p id="dom-htmlmediaelement.buffered">The <a def-id="hme-buffered"></a> attribute returns a new static <a def-id="normalized-timeranges-object"></a> created based on the following steps:</p>
- <ol>
- <li>If <a def-id="activeSourceBuffers"></a>.length equals 0 then return an empty <a def-id="timeranges"></a> object and abort these steps.</li>
- <li>Let <var>active ranges</var> be the ranges returned by <a def-id="buffered"></a> for each <a>SourceBuffer</a> object in <a def-id="activeSourceBuffers"></a>.</li>
- <li>Let <var>highest end time</var> be the largest range end time in the <var>active ranges</var>.</li>
- <li>Let <var>intersection ranges</var> equal a <a def-id="timerange"></a> object containing a single range from 0 to <var>highest end time</var>.</li>
- <li>For each <a>SourceBuffer</a> object in <a def-id="activeSourceBuffers"></a> run the following steps:
- <ol>
- <li>Let <var>source ranges</var> equal the ranges returned by the <a def-id="buffered"></a> attribute on the current <a>SourceBuffer</a>.</li>
- <li>If <a def-id="readyState"></a> is <a def-id="ended"></a>, then set the end time on the last range in <var>source ranges</var> to
- <var>highest end time</var>.</li>
- <li>Let <var>new intersection ranges</var> equal the the intersection between the <var>intersection ranges</var> and the <var>source ranges</var>.</li>
- <li>Replace the ranges in <var>intersection ranges</var> with the <var>new intersection ranges</var>.</li>
- </ol>
- </li>
- <li>Return the <var>intersection ranges</var>.</li>
- </ol>
+ <section id="htmlmediaelement-existing-attributes">
+ <h2>Modifications to Existing Attribute Behavior</h2>
+ <p>This section specifies what existing attributes on the <a def-id="htmlmediaelement"></a> should return when a <a>MediaSource</a> is attached to the element.</p>
+
+ <p>The <a def-id="videoref" name="dom-media-seekable">HTMLMediaElement.seekable</a> attribute returns a new static <a def-id="normalized-timeranges-object"></a> created based on the following steps:</p>
+ <dl class="switch">
+ <dt>If <a def-id="duration"></a> equals NaN</dt>
+ <dd>Return an empty <a def-id="timeranges"></a> object.</dd>
+ <dt>If <a def-id="duration"></a> equals positive Infinity</dt>
+ <dd>Return a single range with a start time of 0 and an end time equal to the highest end time reported by the <a def-id="hme-buffered"></a> attribute.</dd>
+ <dt>Otherwise</dt>
+ <dd>Return a single range with a start time of 0 and an end time equal to <a def-id="duration"></a>.</dd>
+ </dl>
+
+ <p id="dom-htmlmediaelement.buffered">The <a def-id="hme-buffered"></a> attribute returns a new static <a def-id="normalized-timeranges-object"></a> created based on the following steps:</p>
+ <ol>
+ <li>If <a def-id="activeSourceBuffers"></a>.length equals 0 then return an empty <a def-id="timeranges"></a> object and abort these steps.</li>
+ <li>Let <var>active ranges</var> be the ranges returned by <a def-id="buffered"></a> for each <a>SourceBuffer</a> object in <a def-id="activeSourceBuffers"></a>.</li>
+ <li>Let <var>highest end time</var> be the largest range end time in the <var>active ranges</var>.</li>
+ <li>Let <var>intersection ranges</var> equal a <a def-id="timerange"></a> object containing a single range from 0 to <var>highest end time</var>.</li>
+ <li>For each <a>SourceBuffer</a> object in <a def-id="activeSourceBuffers"></a> run the following steps:
+ <ol>
+ <li>Let <var>source ranges</var> equal the ranges returned by the <a def-id="buffered"></a> attribute on the current <a>SourceBuffer</a>.</li>
+ <li>If <a def-id="readyState"></a> is <a def-id="ended"></a>, then set the end time on the last range in <var>source ranges</var> to
+ <var>highest end time</var>.</li>
+ <li>Let <var>new intersection ranges</var> equal the the intersection between the <var>intersection ranges</var> and the <var>source ranges</var>.</li>
+ <li>Replace the ranges in <var>intersection ranges</var> with the <var>new intersection ranges</var>.</li>
+ </ol>
+ </li>
+ <li>Return the <var>intersection ranges</var>.</li>
+ </ol>
+ </section>
+ <section id="htmlmediaelement-new-attributes">
+ <h2>New Attributes and Behavior</h2>
+ <p>This section specifies new attributes and internal state that are being added to the <a def-id="htmlmediaelement"></a>.</p>
+
+ <p>Each <a def-id="htmlmediaelement"></a> will maintain a <dfn id="total-video-frame-count">total video frame count</dfn> variable that keeps
+ track of the total number of frames that have been displayed and dropped. This variable is initialized to 0 when the
+ element is created and whenever the <a def-id="media-element-load-algorithm"></a> is invoked. It is incremented when a video frame is displayed
+ or when the <a def-id="dropped-video-frame-count"></a> is incremented.</p>
+
+ <p>Each <a def-id="htmlmediaelement"></a> will maintain a <dfn id="dropped-video-frame-count">dropped video frame count</dfn> variable that keeps
+ track of the total number of frames that have been dropped. This variable is initialized to 0 when the
+ element is created and whenever the <a def-id="media-element-load-algorithm"></a> is invoked. It is incremented when a video frame is dropped
+ predecode or when a frame is decoded but dropped because it missed a display deadline.</p>
+
+ <dl title="partial interface HTMLMediaElement" class="idl">
+ <dt>readonly attribute MediaPlaybackQuality playbackQuality</dt>
+ <dd>
+ <p>Provides the current the playback quality metrics.</p>
+ <p>On getting, run the following steps:</p>
+ <ol>
+ <li>Let <var>playbackQuality</var> be a new instance of <a>MediaPlaybackQuality</a>.</li>
+ <li>Set <var>playbackQuality</var>.<a def-id="creationTime"></a> to a new Date object that reflects the current local time.</li>
+ <li>Set <var>playbackQuality</var>.<a def-id="totalVideoFrames"></a> to the current value of the <a def-id="total-video-frame-count"></a>.</li>
+ <li>Set <var>playbackQuality</var>.<a def-id="droppedVideoFrames"></a> to the current value of the <a def-id="dropped-video-frame-count"></a>.</li>
+ <li>Return <var>playbackQuality</var>.</li>
+ </ol>
+ </dd>
+ </dl>
+ </section>
</section>
<section id="audio-track-extensions">
@@ -2126,7 +2180,17 @@
</tr>
</thead>
<tbody>
- <td>08 April 2013</a></td>
+ <td>24 April 2013</td>
+ <td>
+ <ul>
+ <li>Bug 21796 - Removed issue box from 'Append Error' algorithm.</li>
+ <li>Bug 21703 - Changed appendWindowEnd to 'unrestricted double'.</li>
+ <li>Bug 20760 - Adding MediaPlaybackQuality object.</li>
+ <li>Bug 21536 - Specify the origin of media data appended.</li>
+ </ul>
+ </td>
+ </tr>
+ <td><a href="https://dvcs.w3.org/hg/html-media/raw-file/f7f2b7226543/media-source/media-source.html">08 April 2013</a></td>
<td>
<ul>
<li>Bug 21327 - Crossfade clarifications.</li>
--- a/media-source/media-source.html Wed Apr 24 10:23:52 2013 -0700
+++ b/media-source/media-source.html Wed Apr 24 11:38:22 2013 -0700
@@ -1,4 +1,4 @@
-<!DOCTYPE html>
+<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -534,7 +534,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></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</a></li><li class="tocline"><a href="#sourcebuffer-buffer-append" class="tocxref"><span class="secno">3.5.4 </span>Buffer Append Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-stream-append-loop" class="tocxref"><span class="secno">3.5.5 </span>Stream Append Loop</a></li><li class="tocline"><a href="#sourcebuffer-init-segment-received" class="tocxref"><span class="secno">3.5.6 </span>Initialization Segment Received</a></li><li class="tocline"><a href="#sourcebuffer-coded-frame-processing" class="tocxref"><span class="secno">3.5.7 </span>Coded Frame Processing</a></li><li class="tocline"><a href="#sourcebuffer-coded-frame-removal" class="tocxref"><span class="secno">3.5.8 </span>Coded Frame Removal Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-coded-frame-eviction" class="tocxref"><span class="secno">3.5.9 </span>Coded Frame Eviction Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-audio-splice-frame-algorithm" class="tocxref"><span class="secno">3.5.10 </span>Audio Splice Frame Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-audio-splice-rendering-algorithm" class="tocxref"><span class="secno">3.5.11 </span>Audio Splice Rendering 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="#url" class="tocxref"><span class="secno">5. </span>URL Object</a><ul class="toc"><li class="tocline"><a href="#methods-3" class="tocxref"><span class="secno">5.1 </span>Methods</a></li></ul></li><li class="tocline"><a href="#htmlmediaelement-attributes" class="tocxref"><span class="secno">6. </span>HTMLMediaElement attributes</a></li><li class="tocline"><a href="#audio-track-extensions" class="tocxref"><span class="secno">7. </span>AudioTrack Extensions</a><ul class="toc"><li class="tocline"><a href="#attributes-3" class="tocxref"><span class="secno">7.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#video-track-extensions" class="tocxref"><span class="secno">8. </span>VideoTrack Extensions</a><ul class="toc"><li class="tocline"><a href="#attributes-4" class="tocxref"><span class="secno">8.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#text-track-extensions" class="tocxref"><span class="secno">9. </span>TextTrack Extensions</a><ul class="toc"><li class="tocline"><a href="#attributes-5" class="tocxref"><span class="secno">9.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#byte-stream-formats" class="tocxref"><span class="secno">10. </span>Byte Stream Formats</a><ul class="toc"><li class="tocline"><a href="#webm" class="tocxref"><span class="secno">10.1 </span>WebM Byte Streams</a><ul class="toc"><li class="tocline"><a href="#webm-init-segments" class="tocxref"><span class="secno">10.1.1 </span>Initialization Segments</a></li><li class="tocline"><a href="#webm-media-segments" class="tocxref"><span class="secno">10.1.2 </span>Media Segments</a></li><li class="tocline"><a href="#webm-random-access-points" class="tocxref"><span class="secno">10.1.3 </span>Random Access Points</a></li></ul></li><li class="tocline"><a href="#iso" class="tocxref"><span class="secno">10.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">10.2.1 </span>Initialization Segments</a></li><li class="tocline"><a href="#iso-media-segments" class="tocxref"><span class="secno">10.2.2 </span>Media Segments</a></li><li class="tocline"><a href="#iso-random-access-points" class="tocxref"><span class="secno">10.2.3 </span>Random Access Points</a></li></ul></li><li class="tocline"><a href="#mpeg2ts" class="tocxref"><span class="secno">10.3 </span>MPEG-2 Transport Stream Byte Streams</a><ul class="toc"><li class="tocline"><a href="#mpeg2ts-general" class="tocxref"><span class="secno">10.3.1 </span>General</a></li><li class="tocline"><a href="#mpeg2ts-init-segments" class="tocxref"><span class="secno">10.3.2 </span>Initialization Segments</a></li><li class="tocline"><a href="#mpeg2ts-media-segments" class="tocxref"><span class="secno">10.3.3 </span>Media Segments</a></li><li class="tocline"><a href="#mpeg2ts-random-access-points" class="tocxref"><span class="secno">10.3.4 </span>Random Access Points</a></li><li class="tocline"><a href="#mpeg2ts-discontinuities" class="tocxref"><span class="secno">10.3.5 </span>Timestamp Rollover & Discontinuities</a></li></ul></li></ul></li><li class="tocline"><a href="#examples" class="tocxref"><span class="secno">11. </span>Examples</a></li><li class="tocline"><a href="#revision-history" class="tocxref"><span class="secno">12. </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></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</a></li><li class="tocline"><a href="#sourcebuffer-buffer-append" class="tocxref"><span class="secno">3.5.4 </span>Buffer Append Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-stream-append-loop" class="tocxref"><span class="secno">3.5.5 </span>Stream Append Loop</a></li><li class="tocline"><a href="#sourcebuffer-init-segment-received" class="tocxref"><span class="secno">3.5.6 </span>Initialization Segment Received</a></li><li class="tocline"><a href="#sourcebuffer-coded-frame-processing" class="tocxref"><span class="secno">3.5.7 </span>Coded Frame Processing</a></li><li class="tocline"><a href="#sourcebuffer-coded-frame-removal" class="tocxref"><span class="secno">3.5.8 </span>Coded Frame Removal Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-coded-frame-eviction" class="tocxref"><span class="secno">3.5.9 </span>Coded Frame Eviction Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-audio-splice-frame-algorithm" class="tocxref"><span class="secno">3.5.10 </span>Audio Splice Frame Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-audio-splice-rendering-algorithm" class="tocxref"><span class="secno">3.5.11 </span>Audio Splice Rendering 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="#mediaplaybackquality" class="tocxref"><span class="secno">5. </span>MediaPlaybackQuality 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><ul class="toc"><li class="tocline"><a href="#htmlmediaelement-existing-attributes" class="tocxref"><span class="secno">7.1 </span>Modifications to Existing Attribute Behavior</a></li><li class="tocline"><a href="#htmlmediaelement-new-attributes" class="tocxref"><span class="secno">7.2 </span>New Attributes and Behavior</a><ul class="toc"><li class="tocline"><a href="#attributes-4" class="tocxref"><span class="secno">7.2.1 </span>Attributes</a></li></ul></li></ul></li><li class="tocline"><a href="#audio-track-extensions" class="tocxref"><span class="secno">8. </span>AudioTrack Extensions</a><ul class="toc"><li class="tocline"><a href="#attributes-5" class="tocxref"><span class="secno">8.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#video-track-extensions" class="tocxref"><span class="secno">9. </span>VideoTrack Extensions</a><ul class="toc"><li class="tocline"><a href="#attributes-6" class="tocxref"><span class="secno">9.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#text-track-extensions" class="tocxref"><span class="secno">10. </span>TextTrack Extensions</a><ul class="toc"><li class="tocline"><a href="#attributes-7" class="tocxref"><span class="secno">10.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#byte-stream-formats" class="tocxref"><span class="secno">11. </span>Byte Stream Formats</a><ul class="toc"><li class="tocline"><a href="#webm" class="tocxref"><span class="secno">11.1 </span>WebM Byte Streams</a><ul class="toc"><li class="tocline"><a href="#webm-init-segments" class="tocxref"><span class="secno">11.1.1 </span>Initialization Segments</a></li><li class="tocline"><a href="#webm-media-segments" class="tocxref"><span class="secno">11.1.2 </span>Media Segments</a></li><li class="tocline"><a href="#webm-random-access-points" class="tocxref"><span class="secno">11.1.3 </span>Random Access Points</a></li></ul></li><li class="tocline"><a href="#iso" class="tocxref"><span class="secno">11.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">11.2.1 </span>Initialization Segments</a></li><li class="tocline"><a href="#iso-media-segments" class="tocxref"><span class="secno">11.2.2 </span>Media Segments</a></li><li class="tocline"><a href="#iso-random-access-points" class="tocxref"><span class="secno">11.2.3 </span>Random Access Points</a></li></ul></li><li class="tocline"><a href="#mpeg2ts" class="tocxref"><span class="secno">11.3 </span>MPEG-2 Transport Stream Byte Streams</a><ul class="toc"><li class="tocline"><a href="#mpeg2ts-general" class="tocxref"><span class="secno">11.3.1 </span>General</a></li><li class="tocline"><a href="#mpeg2ts-init-segments" class="tocxref"><span class="secno">11.3.2 </span>Initialization Segments</a></li><li class="tocline"><a href="#mpeg2ts-media-segments" class="tocxref"><span class="secno">11.3.3 </span>Media Segments</a></li><li class="tocline"><a href="#mpeg2ts-random-access-points" class="tocxref"><span class="secno">11.3.4 </span>Random Access Points</a></li><li class="tocline"><a href="#mpeg2ts-discontinuities" class="tocxref"><span class="secno">11.3.5 </span>Timestamp Rollover & Discontinuities</a></li></ul></li></ul></li><li class="tocline"><a href="#examples" class="tocxref"><span class="secno">12. </span>Examples</a></li><li class="tocline"><a href="#revision-history" class="tocxref"><span class="secno">13. </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">
@@ -1075,20 +1075,20 @@
</p></div>
<pre class="idl"><span class="idlInterface" id="idl-def-SourceBuffer">interface <span class="idlInterfaceID">SourceBuffer</span> : <span class="idlSuperclass"><a>EventTarget</a></span> {
-<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>boolean</a></span> <span class="idlAttrName"><a href="#widl-SourceBuffer-updating">updating</a></span>;</span>
-<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>TimeRanges</a></span> <span class="idlAttrName"><a href="#widl-SourceBuffer-buffered">buffered</a></span>;</span>
-<span class="idlAttribute"> attribute <span class="idlAttrType"><a>double</a></span> <span class="idlAttrName"><a href="#widl-SourceBuffer-timestampOffset">timestampOffset</a></span>;</span>
-<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>AudioTrackList</a></span> <span class="idlAttrName"><a href="#widl-SourceBuffer-audioTracks">audioTracks</a></span>;</span>
-<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>VideoTrackList</a></span> <span class="idlAttrName"><a href="#widl-SourceBuffer-videoTracks">videoTracks</a></span>;</span>
-<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>TextTrackList</a></span> <span class="idlAttrName"><a href="#widl-SourceBuffer-textTracks">textTracks</a></span>;</span>
-<span class="idlAttribute"> attribute <span class="idlAttrType"><a>double</a></span> <span class="idlAttrName"><a href="#widl-SourceBuffer-appendWindowStart">appendWindowStart</a></span>;</span>
-<span class="idlAttribute"> attribute <span class="idlAttrType"><a>double</a></span> <span class="idlAttrName"><a href="#widl-SourceBuffer-appendWindowEnd">appendWindowEnd</a></span>;</span>
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>boolean</a></span> <span class="idlAttrName"><a href="#widl-SourceBuffer-updating">updating</a></span>;</span>
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>TimeRanges</a></span> <span class="idlAttrName"><a href="#widl-SourceBuffer-buffered">buffered</a></span>;</span>
+<span class="idlAttribute"> attribute <span class="idlAttrType"><a>double</a></span> <span class="idlAttrName"><a href="#widl-SourceBuffer-timestampOffset">timestampOffset</a></span>;</span>
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>AudioTrackList</a></span> <span class="idlAttrName"><a href="#widl-SourceBuffer-audioTracks">audioTracks</a></span>;</span>
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>VideoTrackList</a></span> <span class="idlAttrName"><a href="#widl-SourceBuffer-videoTracks">videoTracks</a></span>;</span>
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>TextTrackList</a></span> <span class="idlAttrName"><a href="#widl-SourceBuffer-textTracks">textTracks</a></span>;</span>
+<span class="idlAttribute"> attribute <span class="idlAttrType"><a>double</a></span> <span class="idlAttrName"><a href="#widl-SourceBuffer-appendWindowStart">appendWindowStart</a></span>;</span>
+<span class="idlAttribute"> attribute <span class="idlAttrType"><a>unrestricted double</a></span> <span class="idlAttrName"><a href="#widl-SourceBuffer-appendWindowEnd">appendWindowEnd</a></span>;</span>
<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-SourceBuffer-appendBuffer-void-ArrayBuffer-data">appendBuffer</a></span> (<span class="idlParam"><span class="idlParamType"><a>ArrayBuffer</a></span> <span class="idlParamName">data</span></span>);</span>
<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-SourceBuffer-appendBuffer-void-ArrayBufferView-data">appendBuffer</a></span> (<span class="idlParam"><span class="idlParamType"><a>ArrayBufferView</a></span> <span class="idlParamName">data</span></span>);</span>
<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-SourceBuffer-appendStream-void-Stream-stream-unsigned-long-long-maxSize">appendStream</a></span> (<span class="idlParam"><span class="idlParamType"><a>Stream</a></span> <span class="idlParamName">stream</span></span>, <span class="idlParam">optional <span class="idlParamType"><a>unsigned long long</a></span> <span class="idlParamName">maxSize</span></span>);</span>
<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-SourceBuffer-abort-void-AbortMode-mode">abort</a></span> (<span class="idlParam">optional <span class="idlParamType"><a href="#idl-def-AbortMode" class="idlType"><code>AbortMode</code></a></span> <span class="idlParamName">mode</span></span>);</span>
<span class="idlMethod"> <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-SourceBuffer-remove-void-double-start-double-end">remove</a></span> (<span class="idlParam"><span class="idlParamType"><a>double</a></span> <span class="idlParamName">start</span></span>, <span class="idlParam"><span class="idlParamType"><a>double</a></span> <span class="idlParamName">end</span></span>);</span>
-};</span></pre><section id="attributes-1"><h3><span class="secno">3.1 </span>Attributes</h3><dl class="attributes"><dt id="widl-SourceBuffer-appendWindowEnd"><code>appendWindowEnd</code> of type <span class="idlAttrType"><a>double</a></span>, </dt><dd>
+};</span></pre><section id="attributes-1"><h3><span class="secno">3.1 </span>Attributes</h3><dl class="attributes"><dt id="widl-SourceBuffer-appendWindowEnd"><code>appendWindowEnd</code> of type <span class="idlAttrType"><a>unrestricted double</a></span>, </dt><dd>
<p>The presentation timestamp for the end of the <a href="#append-window">append window</a>. This attribute is initially set to positive Infinity.</p>
<p>On getting, Return the initial value or the last value that was successfully set.</p>
<p>On setting, run the following steps:</p>
@@ -1450,7 +1450,6 @@
<li>Set the <code><a href="#widl-SourceBuffer-updating">updating</a></code> attribute to false.</li>
<li>
<a href="http://www.w3.org/TR/html5/webappapis.html#queue-a-task">Queue a task</a> to <a href="http://www.w3.org/TR/html5/webappapis.html#fire-a-simple-event">fire a simple event</a> named <code><a href="#dom-evt-error">error</a></code> at this <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object.
- <div class="issue"><div class="issue-title"><span>Issue 1</span></div><p class="">Need a way to convey error information.</p></div>
</li>
<li><a href="http://www.w3.org/TR/html5/webappapis.html#queue-a-task">Queue a task</a> to <a href="http://www.w3.org/TR/html5/webappapis.html#fire-a-simple-event">fire a simple event</a> named <code><a href="#dom-evt-updateend">updateend</a></code> at this <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object.</li>
</ol>
@@ -2004,13 +2003,29 @@
</section>
</section>
+ <section id="mediaplaybackquality">
+ <!--OddPage--><h2><span class="secno">5. </span>MediaPlaybackQuality Object</h2>
+ <pre class="idl"><span class="idlInterface" id="idl-def-MediaPlaybackQuality">interface <span class="idlInterfaceID">MediaPlaybackQuality</span> {
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>Date</a></span> <span class="idlAttrName"><a href="#widl-MediaPlaybackQuality-creationTime">creationTime</a></span>;</span>
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>unsigned long</a></span> <span class="idlAttrName"><a href="#widl-MediaPlaybackQuality-totalVideoFrames">totalVideoFrames</a></span>;</span>
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a>unsigned long</a></span> <span class="idlAttrName"><a href="#widl-MediaPlaybackQuality-droppedVideoFrames">droppedVideoFrames</a></span>;</span>
+};</span></pre><section id="attributes-3"><h3><span class="secno">5.1 </span>Attributes</h3><dl class="attributes"><dt id="widl-MediaPlaybackQuality-creationTime"><code>creationTime</code> of type <span class="idlAttrType"><a>Date</a></span>, readonly </dt><dd>
+ <p>The local time when this object was created.(i.e. set to new Date()).</p>
+ </dd><dt id="widl-MediaPlaybackQuality-droppedVideoFrames"><code>droppedVideoFrames</code> of type <span class="idlAttrType"><a>unsigned long</a></span>, readonly </dt><dd>
+ <p>The total number of frames dropped predecode or dropped because the frame missed
+ its display deadline.</p>
+ </dd><dt id="widl-MediaPlaybackQuality-totalVideoFrames"><code>totalVideoFrames</code> of type <span class="idlAttrType"><a>unsigned long</a></span>, readonly </dt><dd>
+ <p>The total number of frames that would have been displayed if no frames are dropped.</p>
+ </dd></dl></section>
+ </section>
+
<section id="url">
- <!--OddPage--><h2><span class="secno">5. </span>URL Object</h2>
- <p></p>
+ <!--OddPage--><h2><span class="secno">6. </span>URL Object Extensions</h2>
+ <p>This section specifies extensions to the <a href="http://www.w3.org/TR/FileAPI/#URL-object">URL</a>[<cite><a class="bibref" href="#bib-FILE-API">FILE-API</a></cite>] object definition.</p>
<pre class="idl"><span class="idlInterface" id="idl-def-URL">partial interface <span class="idlInterfaceID">URL</span> {
<span class="idlMethod"> static <span class="idlMethType"><a>DOMString</a></span> <span class="idlMethName"><a href="#widl-URL-createObjectURL-DOMString-MediaSource-mediaSource">createObjectURL</a></span> (<span class="idlParam"><span class="idlParamType"><a href="#idl-def-MediaSource" class="idlType"><code>MediaSource</code></a></span> <span class="idlParamName">mediaSource</span></span>);</span>
-};</span></pre><section id="methods-3"><h3><span class="secno">5.1 </span>Methods</h3><dl class="methods"><dt id="widl-URL-createObjectURL-DOMString-MediaSource-mediaSource"><code>createObjectURL</code>, static</dt><dd>
+};</span></pre><section id="methods-3"><h3><span class="secno">6.1 </span>Methods</h3><dl class="methods"><dt id="widl-URL-createObjectURL-DOMString-MediaSource-mediaSource"><code>createObjectURL</code>, static</dt><dd>
<p>Creates URLs for <a href="#idl-def-MediaSource" class="idlType"><code>MediaSource</code></a> objects.</p>
@@ -2023,48 +2038,80 @@
</ol></dd></dl></section>
</section>
- <section id="htmlmediaelement-attributes">
- <!--OddPage--><h2><span class="secno">6. </span>HTMLMediaElement attributes</h2>
- <p>This section specifies what existing attributes on the <a href="http://www.w3.org/TR/html5/embedded-content-0.html#htmlmediaelement">HTMLMediaElement</a> should return when a <a href="#idl-def-MediaSource" class="idlType"><code>MediaSource</code></a> is attached to the element.</p>
-
- <p>The <a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-seekable">HTMLMediaElement.seekable</a> attribute returns a new static <a href="http://www.w3.org/TR/html5/embedded-content-0.html#normalized-timeranges-object">normalized TimeRanges object</a> created based on the following steps:</p>
- <dl class="switch">
- <dt>If <code><a href="#widl-MediaSource-duration">duration</a></code> equals NaN</dt>
- <dd>Return an empty <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#timeranges">TimeRanges</a></code> object.</dd>
- <dt>If <code><a href="#widl-MediaSource-duration">duration</a></code> equals positive Infinity</dt>
- <dd>Return a single range with a start time of 0 and an end time equal to the highest end time reported by the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-buffered">HTMLMediaElement.buffered</a></code> attribute.</dd>
- <dt>Otherwise</dt>
- <dd>Return a single range with a start time of 0 and an end time equal to <code><a href="#widl-MediaSource-duration">duration</a></code>.</dd>
- </dl>
+ <section id="htmlmediaelement-extensions">
+ <!--OddPage--><h2><span class="secno">7. </span>HTMLMediaElement Extensions</h2>
- <p id="dom-htmlmediaelement.buffered">The <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-buffered">HTMLMediaElement.buffered</a></code> attribute returns a new static <a href="http://www.w3.org/TR/html5/embedded-content-0.html#normalized-timeranges-object">normalized TimeRanges object</a> created based on the following steps:</p>
- <ol>
- <li>If <code><a href="#widl-MediaSource-activeSourceBuffers">activeSourceBuffers</a></code>.length equals 0 then return an empty <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#timeranges">TimeRanges</a></code> object and abort these steps.</li>
- <li>Let <var>active ranges</var> be the ranges returned by <code><a href="#widl-SourceBuffer-buffered">buffered</a></code> for each <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object in <code><a href="#widl-MediaSource-activeSourceBuffers">activeSourceBuffers</a></code>.</li>
- <li>Let <var>highest end time</var> be the largest range end time in the <var>active ranges</var>.</li>
- <li>Let <var>intersection ranges</var> equal a <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#timeranges">TimeRange</a></code> object containing a single range from 0 to <var>highest end time</var>.</li>
- <li>For each <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object in <code><a href="#widl-MediaSource-activeSourceBuffers">activeSourceBuffers</a></code> run the following steps:
- <ol>
- <li>Let <var>source ranges</var> equal the ranges returned by the <code><a href="#widl-SourceBuffer-buffered">buffered</a></code> attribute on the current <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a>.</li>
- <li>If <code><a href="#widl-MediaSource-readyState">readyState</a></code> is <code><a href="#idl-def-ReadyState.ended">"ended"</a></code>, then set the end time on the last range in <var>source ranges</var> to
- <var>highest end time</var>.</li>
- <li>Let <var>new intersection ranges</var> equal the the intersection between the <var>intersection ranges</var> and the <var>source ranges</var>.</li>
- <li>Replace the ranges in <var>intersection ranges</var> with the <var>new intersection ranges</var>.</li>
- </ol>
- </li>
- <li>Return the <var>intersection ranges</var>.</li>
- </ol>
+ <section id="htmlmediaelement-existing-attributes">
+ <h3><span class="secno">7.1 </span>Modifications to Existing Attribute Behavior</h3>
+ <p>This section specifies what existing attributes on the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#htmlmediaelement">HTMLMediaElement</a></code> should return when a <a href="#idl-def-MediaSource" class="idlType"><code>MediaSource</code></a> is attached to the element.</p>
+
+ <p>The <a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-seekable">HTMLMediaElement.seekable</a> attribute returns a new static <a href="http://www.w3.org/TR/html5/embedded-content-0.html#normalized-timeranges-object">normalized TimeRanges object</a> created based on the following steps:</p>
+ <dl class="switch">
+ <dt>If <code><a href="#widl-MediaSource-duration">duration</a></code> equals NaN</dt>
+ <dd>Return an empty <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#timeranges">TimeRanges</a></code> object.</dd>
+ <dt>If <code><a href="#widl-MediaSource-duration">duration</a></code> equals positive Infinity</dt>
+ <dd>Return a single range with a start time of 0 and an end time equal to the highest end time reported by the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-buffered">HTMLMediaElement.buffered</a></code> attribute.</dd>
+ <dt>Otherwise</dt>
+ <dd>Return a single range with a start time of 0 and an end time equal to <code><a href="#widl-MediaSource-duration">duration</a></code>.</dd>
+ </dl>
+
+ <p id="dom-htmlmediaelement.buffered">The <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-buffered">HTMLMediaElement.buffered</a></code> attribute returns a new static <a href="http://www.w3.org/TR/html5/embedded-content-0.html#normalized-timeranges-object">normalized TimeRanges object</a> created based on the following steps:</p>
+ <ol>
+ <li>If <code><a href="#widl-MediaSource-activeSourceBuffers">activeSourceBuffers</a></code>.length equals 0 then return an empty <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#timeranges">TimeRanges</a></code> object and abort these steps.</li>
+ <li>Let <var>active ranges</var> be the ranges returned by <code><a href="#widl-SourceBuffer-buffered">buffered</a></code> for each <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object in <code><a href="#widl-MediaSource-activeSourceBuffers">activeSourceBuffers</a></code>.</li>
+ <li>Let <var>highest end time</var> be the largest range end time in the <var>active ranges</var>.</li>
+ <li>Let <var>intersection ranges</var> equal a <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#timeranges">TimeRange</a></code> object containing a single range from 0 to <var>highest end time</var>.</li>
+ <li>For each <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object in <code><a href="#widl-MediaSource-activeSourceBuffers">activeSourceBuffers</a></code> run the following steps:
+ <ol>
+ <li>Let <var>source ranges</var> equal the ranges returned by the <code><a href="#widl-SourceBuffer-buffered">buffered</a></code> attribute on the current <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a>.</li>
+ <li>If <code><a href="#widl-MediaSource-readyState">readyState</a></code> is <code><a href="#idl-def-ReadyState.ended">"ended"</a></code>, then set the end time on the last range in <var>source ranges</var> to
+ <var>highest end time</var>.</li>
+ <li>Let <var>new intersection ranges</var> equal the the intersection between the <var>intersection ranges</var> and the <var>source ranges</var>.</li>
+ <li>Replace the ranges in <var>intersection ranges</var> with the <var>new intersection ranges</var>.</li>
+ </ol>
+ </li>
+ <li>Return the <var>intersection ranges</var>.</li>
+ </ol>
+ </section>
+ <section id="htmlmediaelement-new-attributes">
+ <h3><span class="secno">7.2 </span>New Attributes and Behavior</h3>
+ <p>This section specifies new attributes and internal state that are being added to the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#htmlmediaelement">HTMLMediaElement</a></code>.</p>
+
+ <p>Each <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#htmlmediaelement">HTMLMediaElement</a></code> will maintain a <dfn id="total-video-frame-count">total video frame count</dfn> variable that keeps
+ track of the total number of frames that have been displayed and dropped. This variable is initialized to 0 when the
+ element is created and whenever the <a href="http://www.w3.org/TR/html5/embedded-content-0.html#media-element-load-algorithm">media element load algorithm</a> is invoked. It is incremented when a video frame is displayed
+ or when the <var><a href="#dropped-video-frame-count">dropped video frame count</a></var> is incremented.</p>
+
+ <p>Each <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#htmlmediaelement">HTMLMediaElement</a></code> will maintain a <dfn id="dropped-video-frame-count">dropped video frame count</dfn> variable that keeps
+ track of the total number of frames that have been dropped. This variable is initialized to 0 when the
+ element is created and whenever the <a href="http://www.w3.org/TR/html5/embedded-content-0.html#media-element-load-algorithm">media element load algorithm</a> is invoked. It is incremented when a video frame is dropped
+ predecode or when a frame is decoded but dropped because it missed a display deadline.</p>
+
+ <pre class="idl"><span class="idlInterface" id="idl-def-HTMLMediaElement">partial interface <span class="idlInterfaceID">HTMLMediaElement</span> {
+<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a href="#idl-def-MediaPlaybackQuality" class="idlType"><code>MediaPlaybackQuality</code></a></span> <span class="idlAttrName"><a href="#widl-HTMLMediaElement-playbackQuality">playbackQuality</a></span>;</span>
+};</span></pre><section id="attributes-4"><h4><span class="secno">7.2.1 </span>Attributes</h4><dl class="attributes"><dt id="widl-HTMLMediaElement-playbackQuality"><code>playbackQuality</code> of type <span class="idlAttrType"><a href="#idl-def-MediaPlaybackQuality" class="idlType"><code>MediaPlaybackQuality</code></a></span>, readonly </dt><dd>
+ <p>Provides the current the playback quality metrics.</p>
+ <p>On getting, run the following steps:</p>
+ <ol>
+ <li>Let <var>playbackQuality</var> be a new instance of <a href="#idl-def-MediaPlaybackQuality" class="idlType"><code>MediaPlaybackQuality</code></a>.</li>
+ <li>Set <var>playbackQuality</var>.<code><a href="#widl-MediaPlaybackQuality-creationTime">creationTime</a></code> to a new Date object that reflects the current local time.</li>
+ <li>Set <var>playbackQuality</var>.<code><a href="#widl-MediaPlaybackQuality-totalVideoFrames">totalVideoFrames</a></code> to the current value of the <var><a href="#total-video-frame-count">total video frame count</a></var>.</li>
+ <li>Set <var>playbackQuality</var>.<code><a href="#widl-MediaPlaybackQuality-droppedVideoFrames">droppedVideoFrames</a></code> to the current value of the <var><a href="#dropped-video-frame-count">dropped video frame count</a></var>.</li>
+ <li>Return <var>playbackQuality</var>.</li>
+ </ol>
+ </dd></dl></section>
+ </section>
</section>
<section id="audio-track-extensions">
- <!--OddPage--><h2><span class="secno">7. </span>AudioTrack Extensions</h2>
+ <!--OddPage--><h2><span class="secno">8. </span>AudioTrack Extensions</h2>
<p>This section specifies extensions to the HTML <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#audiotrack">AudioTrack</a></code> definition.</p>
<pre class="idl"><span class="idlInterface" id="idl-def-AudioTrack">partial interface <span class="idlInterfaceID">AudioTrack</span> {
<span class="idlAttribute"> attribute <span class="idlAttrType"><a>DOMString</a></span> <span class="idlAttrName"><a href="#widl-AudioTrack-kind">kind</a></span>;</span>
<span class="idlAttribute"> attribute <span class="idlAttrType"><a>DOMString</a></span> <span class="idlAttrName"><a href="#widl-AudioTrack-language">language</a></span>;</span>
<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a>?</span> <span class="idlAttrName"><a href="#widl-AudioTrack-sourceBuffer">sourceBuffer</a></span>;</span>
-};</span></pre><section id="attributes-3"><h3><span class="secno">7.1 </span>Attributes</h3><dl class="attributes"><dt id="widl-AudioTrack-kind"><code>kind</code> of type <span class="idlAttrType"><a>DOMString</a></span>, </dt><dd>
+};</span></pre><section id="attributes-5"><h3><span class="secno">8.1 </span>Attributes</h3><dl class="attributes"><dt id="widl-AudioTrack-kind"><code>kind</code> of type <span class="idlAttrType"><a>DOMString</a></span>, </dt><dd>
<p>Allows the web application to get and update the track <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-audiotrack-kind">kind</a></code>.</p>
<p>On getting, return the current value of the attribute. This is either the value provided when this object was created or the value provided on
the last successful set operation.</p><p>
@@ -2102,14 +2149,14 @@
</section>
<section id="video-track-extensions">
- <!--OddPage--><h2><span class="secno">8. </span>VideoTrack Extensions</h2>
+ <!--OddPage--><h2><span class="secno">9. </span>VideoTrack Extensions</h2>
<p>This section specifies extensions to the HTML <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#videotrack">VideoTrack</a></code> definition.</p>
<pre class="idl"><span class="idlInterface" id="idl-def-VideoTrack">partial interface <span class="idlInterfaceID">VideoTrack</span> {
<span class="idlAttribute"> attribute <span class="idlAttrType"><a>DOMString</a></span> <span class="idlAttrName"><a href="#widl-VideoTrack-kind">kind</a></span>;</span>
<span class="idlAttribute"> attribute <span class="idlAttrType"><a>DOMString</a></span> <span class="idlAttrName"><a href="#widl-VideoTrack-language">language</a></span>;</span>
<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a>?</span> <span class="idlAttrName"><a href="#widl-VideoTrack-sourceBuffer">sourceBuffer</a></span>;</span>
-};</span></pre><section id="attributes-4"><h3><span class="secno">8.1 </span>Attributes</h3><dl class="attributes"><dt id="widl-VideoTrack-kind"><code>kind</code> of type <span class="idlAttrType"><a>DOMString</a></span>, </dt><dd>
+};</span></pre><section id="attributes-6"><h3><span class="secno">9.1 </span>Attributes</h3><dl class="attributes"><dt id="widl-VideoTrack-kind"><code>kind</code> of type <span class="idlAttrType"><a>DOMString</a></span>, </dt><dd>
<p>Allows the web application to get and update the track <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-videotrack-kind">kind</a></code>.</p>
<p>On getting, return the current value of the attribute. This is either the value provided when this object was created or the value provided on
the last successful set operation.</p><p>
@@ -2146,14 +2193,14 @@
</dd></dl></section></section>
<section id="text-track-extensions">
- <!--OddPage--><h2><span class="secno">9. </span>TextTrack Extensions</h2>
+ <!--OddPage--><h2><span class="secno">10. </span>TextTrack Extensions</h2>
<p>This section specifies extensions to the HTML <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#texttrack">TextTrack</a></code> definition.</p>
<pre class="idl"><span class="idlInterface" id="idl-def-TextTrack">partial interface <span class="idlInterfaceID">TextTrack</span> {
<span class="idlAttribute"> attribute <span class="idlAttrType"><a>DOMString</a></span> <span class="idlAttrName"><a href="#widl-TextTrack-kind">kind</a></span>;</span>
<span class="idlAttribute"> attribute <span class="idlAttrType"><a>DOMString</a></span> <span class="idlAttrName"><a href="#widl-TextTrack-language">language</a></span>;</span>
<span class="idlAttribute"> readonly attribute <span class="idlAttrType"><a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a>?</span> <span class="idlAttrName"><a href="#widl-TextTrack-sourceBuffer">sourceBuffer</a></span>;</span>
-};</span></pre><section id="attributes-5"><h3><span class="secno">9.1 </span>Attributes</h3><dl class="attributes"><dt id="widl-TextTrack-kind"><code>kind</code> of type <span class="idlAttrType"><a>DOMString</a></span>, </dt><dd>
+};</span></pre><section id="attributes-7"><h3><span class="secno">10.1 </span>Attributes</h3><dl class="attributes"><dt id="widl-TextTrack-kind"><code>kind</code> of type <span class="idlAttrType"><a>DOMString</a></span>, </dt><dd>
<p>Allows the web application to get and update the track <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-texttrack-kind">kind</a></code>.</p>
<p>On getting, return the current value of the attribute. This is either the value provided when this object was created or the value provided on
the last successful set operation.</p><p>
@@ -2191,7 +2238,7 @@
</dd></dl></section></section>
<section id="byte-stream-formats">
- <!--OddPage--><h2><span class="secno">10. </span>Byte Stream Formats</h2>
+ <!--OddPage--><h2><span class="secno">11. </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>
<p>This section provides general requirements for all byte stream formats:</p>
<ul>
@@ -2249,11 +2296,11 @@
<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">10.1 </span>WebM Byte Streams</h3>
+ <h3><span class="secno">11.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">10.1.1 </span>Initialization Segments</h4>
+ <h4><span class="secno">11.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 following rules apply to WebM initialization segments:</p>
<ol>
@@ -2265,7 +2312,7 @@
</section>
<section id="webm-media-segments">
- <h4><span class="secno">10.1.2 </span>Media Segments</h4>
+ <h4><span class="secno">11.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 following rules apply to WebM media segments:</p>
<ol>
@@ -2281,18 +2328,18 @@
</section>
<section id="webm-random-access-points">
- <h4><span class="secno">10.1.3 </span>Random Access Points</h4>
+ <h4><span class="secno">11.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">10.2 </span>ISO Base Media File Format Byte Streams</h3>
+ <h3><span class="secno">11.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">10.2.1 </span>Initialization Segments</h4>
+ <h4><span class="secno">11.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>).
The tracks in the Movie Header Box must not contain any 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> and <span class="iso-box">stco</span> boxes must be set to zero). A Movie
@@ -2305,7 +2352,7 @@
</section>
<section id="iso-media-segments">
- <h4><span class="secno">10.2.2 </span>Media Segments</h4>
+ <h4><span class="secno">11.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>,
@@ -2326,18 +2373,18 @@
</section>
<section id="iso-random-access-points">
- <h4><span class="secno">10.2.3 </span>Random Access Points</h4>
+ <h4><span class="secno">11.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">10.3 </span>MPEG-2 Transport Stream Byte Streams</h3>
+ <h3><span class="secno">11.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">10.3.1 </span>General</h4>
+ <h4><span class="secno">11.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 following rules must apply to all MPEG-2 TS segments:</p>
<ol>
@@ -2348,13 +2395,13 @@
</ol>
</section>
<section id="mpeg2ts-init-segments">
- <h4><span class="secno">10.3.2 </span>Initialization Segments</h4>
+ <h4><span class="secno">11.3.2 </span>Initialization Segments</h4>
<p>An MPEG-2 TS initialization segment must contain a single PAT and a single PMT. Other SI, such as CAT, that are invariant for all subsequent
media segments, may be present.</p>
</section>
<section id="mpeg2ts-media-segments">
- <h4><span class="secno">10.3.3 </span>Media Segments</h4>
+ <h4><span class="secno">11.3.3 </span>Media Segments</h4>
<p>The following rules apply to all MPEG-2 TS media segments:</p>
<ol>
<li>PSI that is identical to the information in the initialization segment may appear repeatedly throughout the segment.</li>
@@ -2367,12 +2414,12 @@
</section>
<section id="mpeg2ts-random-access-points">
- <h4><span class="secno">10.3.4 </span>Random Access Points</h4>
+ <h4><span class="secno">11.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">10.3.5 </span>Timestamp Rollover & Discontinuities</h4>
+ <h4><span class="secno">11.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
@@ -2397,7 +2444,7 @@
<section id="examples">
- <!--OddPage--><h2><span class="secno">11. </span>Examples</h2>
+ <!--OddPage--><h2><span class="secno">12. </span>Examples</h2>
<p>Example use of the Media Source Extensions</p>
<div class="block">
<div class="blockContent">
@@ -2487,7 +2534,7 @@
</section>
<section id="revision-history">
- <!--OddPage--><h2><span class="secno">12. </span>Revision History</h2>
+ <!--OddPage--><h2><span class="secno">13. </span>Revision History</h2>
<table class="old-table">
<thead>
<tr>
@@ -2496,7 +2543,17 @@
</tr>
</thead>
<tbody>
- <tr><td>08 April 2013</td>
+ <tr><td>24 April 2013</td>
+ <td>
+ <ul>
+ <li>Bug 21796 - Removed issue box from 'Append Error' algorithm.</li>
+ <li>Bug 21703 - Changed appendWindowEnd to 'unrestricted double'.</li>
+ <li>Bug 20760 - Adding MediaPlaybackQuality object.</li>
+ <li>Bug 21536 - Specify the origin of media data appended.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr><td><a href="https://dvcs.w3.org/hg/html-media/raw-file/f7f2b7226543/media-source/media-source.html">08 April 2013</a></td>
<td>
<ul>
<li>Bug 21327 - Crossfade clarifications.</li>
@@ -2767,4 +2824,4 @@
<section id="references" class="appendix"><!--OddPage--><h2><span class="secno">A. </span>References</h2><section id="informative-references"><h3><span class="secno">A.1 </span>Informative references</h3><dl class="bibliography"><dt id="bib-BCP47">[BCP47]</dt><dd>A. Phillips; M. Davis. <a href="http://tools.ietf.org/html/bcp47"><cite>Tags for Identifying Languages</cite></a>. September 2009. IETF Best Current Practice. URL: <a href="http://tools.ietf.org/html/bcp47">http://tools.ietf.org/html/bcp47</a>
</dd><dt id="bib-FILE-API">[FILE-API]</dt><dd>Arun Ranganathan; Jonas Sicking. <a href="http://www.w3.org/TR/2012/WD-FileAPI-20121025"><cite>File API</cite></a>. 25 October 2012. W3C Working Draft. URL: <a href="http://www.w3.org/TR/2012/WD-FileAPI-20121025">http://www.w3.org/TR/2012/WD-FileAPI-20121025</a>
</dd><dt id="bib-STREAMS-API">[STREAMS-API]</dt><dd>Feras Moussa. <a href="http://dvcs.w3.org/hg/streams-api/raw-file/tip/Overview.htm"><cite>Streams API</cite></a>. 25 October 2012. W3C Editor's Draft. URL: <a href="http://dvcs.w3.org/hg/streams-api/raw-file/tip/Overview.htm">http://dvcs.w3.org/hg/streams-api/raw-file/tip/Overview.htm</a>
-</dd></dl></section></section></body></html>
\ No newline at end of file
+</dd></dl></section></section></body></html>
--- a/media-source/media-source.js Wed Apr 24 10:23:52 2013 -0700
+++ b/media-source/media-source.js Wed Apr 24 11:38:22 2013 -0700
@@ -93,6 +93,9 @@
'appendWindowStart': { func: idlref_helper, fragment: 'widl-SourceBuffer-appendWindowStart', link_text: 'appendWindowStart', },
'appendWindowEnd': { func: idlref_helper, fragment: 'widl-SourceBuffer-appendWindowEnd', link_text: 'appendWindowEnd', },
'length': { func: idlref_helper, fragment: 'widl-SourceBufferList-length', link_text: 'length', },
+ 'creationTime': { func: idlref_helper, fragment: 'widl-MediaPlaybackQuality-creationTime', link_text: 'creationTime', },
+ 'totalVideoFrames': { func: idlref_helper, fragment: 'widl-MediaPlaybackQuality-totalVideoFrames', link_text: 'totalVideoFrames', },
+ 'droppedVideoFrames': { func: idlref_helper, fragment: 'widl-MediaPlaybackQuality-droppedVideoFrames', link_text: 'droppedVideoFrames', },
'createObjectURL': { func: idlref_helper, fragment: 'widl-URL-createObjectURL-DOMString-MediaSource-mediaSource', link_text: 'createObjectURL()', },
'open': { func: idlref_helper, fragment: 'idl-def-ReadyState.open', link_text: '"open"', },
'closed': { func: idlref_helper, fragment: 'idl-def-ReadyState.closed', link_text: '"closed"', },
@@ -166,6 +169,7 @@
'blob-origin': { func: fileapi_helper, fragment: 'originOfBlob', link_text: 'Origin of Blob URIs', },
'File': { func: fileapi_helper, fragment: 'dfn-file', link_text: 'File', },
'Blob': { func: fileapi_helper, fragment: 'dfn-Blob', link_text: 'Blob', },
+ 'URL': { func: fileapi_helper, fragment: 'URL-object', link_text: 'URL', },
'file-createObjectURL': { func: fileapi_helper, fragment: 'dfn-createObjectURL', link_text: 'createObjectURL()', },
'file-revokeObjectURL': { func: fileapi_helper, fragment: 'dfn-revokeObjectURL', link_text: 'revokeObjectURL()', },
@@ -175,6 +179,7 @@
'videoref': { func: videoref_helper, fragment: '', link_text: '', },
'media-timeline': { func: videoref_helper, fragment: 'media-timeline', link_text: 'media timeline', },
+ 'media-element-load-algorithm': { func: videoref_helper, fragment: 'media-element-load-algorithm', link_text: 'media element load algorithm', },
'resource-fetch-algorithm': { func: videoref_helper, fragment: 'concept-media-load-resource', link_text: 'resource fetch algorithm', },
'intrinsic-width-and-height': { func: videoref_helper, fragment: 'concept-video-intrinsic-width', link_text: 'intrinsic width and height', },
'normalized-timeranges-object': { func: videoref_helper, fragment: 'normalized-timeranges-object', link_text: 'normalized TimeRanges object', },
@@ -220,11 +225,15 @@
'loadeddata': { func: code_videoref_helper, fragment: 'event-media-loadeddata', link_text: 'loadeddata', },
'canplay': { func: code_videoref_helper, fragment: 'event-media-canplay', link_text: 'canplay', },
'canplaythrough': { func: code_videoref_helper, fragment: 'event-media-canplaythrough', link_text: 'canplaythrough', },
+ 'htmlmediaelement': { func: code_videoref_helper, fragment: 'htmlmediaelement', link_text: 'HTMLMediaElement', },
'hme-duration': { func: code_videoref_helper, fragment: 'media-controller-duration', link_text: 'media controller duration', },
'hme-buffered': { func: code_videoref_helper, fragment: 'dom-media-buffered', link_text: 'HTMLMediaElement.buffered', },
'hme-seek-algorithm': { func: videoref_helper, fragment: 'dom-media-seek', link_text: 'seek algorithm', },
'hme-duration-change-algorithm': { func: videoref_helper, fragment: 'durationChange', link_text: 'HTMLMediaElement duration change algorithm', },
+ 'total-video-frame-count': { func: var_helper, fragment: '#total-video-frame-count', link_text: 'total video frame count', },
+ 'dropped-video-frame-count': { func: var_helper, fragment: '#dropped-video-frame-count', link_text: 'dropped video frame count', },
+
'invalid-access-err': { func: exception_helper, fragment: 'invalid_access_err', link_text: 'INVALID_ACCESS_ERR', },
'invalid-state-err': { func: exception_helper, fragment: 'invalid_state_err', link_text: 'INVALID_STATE_ERR', },
'not-found-err': { func: exception_helper, fragment: 'not_found_err', link_text: 'NOT_FOUND_ERR', },