[MSE] Bug 24370 - Add TrackDefault object and remove kind/language overloads.
authorAaron Colwell <acolwell@chromium.org>
Tue, 20 May 2014 15:00:59 -0700
changeset 316 01c9e30d71b0
parent 315 3e8dfccbfded
child 317 a3759a1510ea
[MSE] Bug 24370 - Add TrackDefault object and remove kind/language overloads.
media-source/media-source-respec.html
media-source/media-source.html
media-source/media-source.js
--- a/media-source/media-source-respec.html	Tue May 20 09:55:22 2014 -0700
+++ b/media-source/media-source-respec.html	Tue May 20 15:00:59 2014 -0700
@@ -1016,6 +1016,12 @@
        </ol>
 
         </dd>
+        <dt>attribute TrackDefaultList trackDefaults</dt>
+        <dd>
+          <p>Specifies the default values to use if kind and/or language information is not available in the
+            <a def-id="init-segment"></a> when the <a def-id="init-segment-received-algorithm"></a> needs
+            to create track objects.</p>
+        </dd>
       </dl>
 
       <section id="track-buffers">
@@ -1330,24 +1336,52 @@
                 <li>
                   <p>For each audio track in the <a def-id="init-segment"></a>, run following steps:</p>
                   <ol>
-                    <li>Let <var>new audio track</var> be a new <a def-id="audio-track"></a> object.</li>
-                    <li>Generate a unique ID and assign it to the <a def-id="audiotrack-id"></a> property on <var>new audio track</var>.</li>
-                    <li>
-                      <p>
-                        If <a def-id="audiotracks"></a>.<a def-id="audiotracklist-length"></a> equals 0, then run
-                          the following steps:
-                      </p>
+                    <li>Let <var>audio byte stream track ID</var> be the
+                      <a def-id="track-id"></a> for the current track being processed.</li>
+                    <li>Let <var>audio language</var> be a BCP 47 language tag for the language
+                      specified in the <a def-id="init-segment"></a> for this track or an empty string if no
+                      language info is present.</li>
+                    <li>If <var>audio language</var> equals an empty string, then run the
+                      <a def-id="default-track-language-algorithm"></a> with <var>byteStreamTrackID</var>
+                      set to <var>audio byte stream track ID</var> and <var>type</var> set to
+                      <a def-id="TrackDefaultType-audio"></a> and assign the value returned by the
+                      algorithm to <var>audio language</var>.</li>
+                    <li>Let <var>audio kinds</var> be an array of kind strings specified in the
+                      <a def-id="init-segment"></a> for this track or an empty array if no kind information
+                      is provided.</li>
+                    <li>If <var>audio kinds</var> equals an empty array, then run the
+                      <a def-id="default-track-kinds-algorithm"></a> with <var>byteStreamTrackID</var>
+                      set to <var>audio byte stream track ID</var> and <var>type</var> set to
+                      <a def-id="TrackDefaultType-audio"></a> and assign the value returned by the
+                      algorithm to <var>audio kinds</var>.</li>
+                    <li>For each value in <var>audio kinds</var>, run the following steps:
                       <ol>
-                        <li>Set the <a def-id="audiotrack-enabled"></a> property on <var>new audio track</var> to true.</li>
-                        <li>Set <var>active track flag</var> to true.</li>
+                        <li>Let <var>current audio kind</var> equal the value from <var>audio kinds</var>
+                          for this iteration of the loop.</li>
+                        <li>Let <var>new audio track</var> be a new <a def-id="audio-track"></a> object.</li>
+                        <li>Generate a unique ID and assign it to the <a def-id="audiotrack-id"></a> property on <var>new audio track</var>.</li>
+                        <li>Assign <var>audio language</var> to the <a def-id="audiotrack-language"></a>
+                          property on <var>new audio track</var>.</li>
+                        <li>Assign <var>current audio kind</var> to the <a def-id="audiotrack-kind"></a>
+                          property on <var>new audio track</var>.</li>
+                        <li>
+                          <p>
+                            If <a def-id="audiotracks"></a>.<a def-id="audiotracklist-length"></a> equals 0, then run
+                            the following steps:
+                          </p>
+                          <ol>
+                            <li>Set the <a def-id="audiotrack-enabled"></a> property on <var>new audio track</var> to true.</li>
+                            <li>Set <var>active track flag</var> to true.</li>
+                          </ol>
+                        </li>
+                        <li>Add <var>new audio track</var> to the <a def-id="sourcebuffer-audioTracks"></a> attribute on this <a>SourceBuffer</a> object.</li>
+                        <li><a def-id="Queue-and-fire-addtrack"></a> at the <a def-id="audio-track-list"></a> object referenced by the
+                          <a def-id="sourcebuffer-audioTracks"></a> attribute on this <a>SourceBuffer</a> object.</li>
+                        <li>Add <var>new audio track</var> to the <a def-id="audiotracks"></a> attribute on the HTMLMediaElement.</li>
+                        <li><a def-id="Queue-and-fire-addtrack"></a> at the <a def-id="audio-track-list"></a> object referenced by the <a def-id="audiotracks"></a>
+                          attribute on the HTMLMediaElement.</li>
                       </ol>
                     </li>
-                    <li>Add <var>new audio track</var> to the <a def-id="sourcebuffer-audioTracks"></a> attribute on this <a>SourceBuffer</a> object.</li>
-                    <li><a def-id="Queue-and-fire-addtrack"></a> at the <a def-id="audio-track-list"></a> object referenced by the
-                      <a def-id="sourcebuffer-audioTracks"></a> attribute on this <a>SourceBuffer</a> object.</li>
-                    <li>Add <var>new audio track</var> to the <a def-id="audiotracks"></a> attribute on the HTMLMediaElement.</li>
-                    <li><a def-id="Queue-and-fire-addtrack"></a> at the <a def-id="audio-track-list"></a> object referenced by the <a def-id="audiotracks"></a>
-                      attribute on the HTMLMediaElement.</li>
                     <li>Create a new <a def-id="track-buffer"></a> to store <a def-id="coded-frames"></a> for this track.</li>
                     <li>Add the <a def-id="track-description"></a> for this track to the <a def-id="track-buffer"></a>.</li>
                   </ol>
@@ -1355,24 +1389,52 @@
                 <li>
                   <p>For each video track in the <a def-id="init-segment"></a>, run following steps:</p>
                   <ol>
-                    <li>Let <var>new video track</var> be a new <a def-id="video-track"></a> object.</li>
-                    <li>Generate a unique ID and assign it to the <a def-id="videotrack-id"></a> property on <var>new video track</var>.</li>
-                    <li>
-                      <p>
-                        If <a def-id="videotracks"></a>.<a def-id="videotracklist-length"></a> equals 0, then run
-                          the following steps:
-                      </p>
+                    <li>Let <var>video byte stream track ID</var> be the
+                      <a def-id="track-id"></a> for the current track being processed.</li>
+                    <li>Let <var>video language</var> be a BCP 47 language tag for the language
+                      specified in the <a def-id="init-segment"></a> for this track or an empty string if no
+                      language info is present.</li>
+                    <li>If <var>video language</var> equals an empty string, then run the
+                      <a def-id="default-track-language-algorithm"></a> with <var>byteStreamTrackID</var>
+                      set to <var>video byte stream track ID</var> and <var>type</var> set to
+                      <a def-id="TrackDefaultType-video"></a> and assign the value returned by the
+                      algorithm to <var>video language</var>.</li>
+                    <li>Let <var>video kinds</var> be an array of kind strings specified in the
+                      <a def-id="init-segment"></a> for this track or an empty array if no kind information
+                      is provided.</li>
+                    <li>If <var>video kinds</var> equals an empty array, then run the
+                      <a def-id="default-track-kinds-algorithm"></a> with <var>byteStreamTrackID</var>
+                      set to <var>video byte stream track ID</var> and <var>type</var> set to
+                      <a def-id="TrackDefaultType-video"></a> and assign the value returned by the
+                      algorithm to <var>video kinds</var>.</li>
+                    <li>For each value in <var>video kinds</var>, run the following steps:
                       <ol>
-                        <li>Set the <a def-id="videotrack-selected"></a> property on <var>new video track</var> to true.</li>
-                        <li>Set <var>active track flag</var> to true.</li>
+                        <li>Let <var>current video kind</var> equal the value from <var>video kinds</var>
+                          for this iteration of the loop.</li>
+                        <li>Let <var>new video track</var> be a new <a def-id="video-track"></a> object.</li>
+                        <li>Generate a unique ID and assign it to the <a def-id="videotrack-id"></a> property on <var>new video track</var>.</li>
+                        <li>Assign <var>video language</var> to the <a def-id="videotrack-language"></a>
+                          property on <var>new video track</var>.</li>
+                        <li>Assign <var>current video kind</var> to the <a def-id="videotrack-kind"></a>
+                          property on <var>new video track</var>.</li>
+                        <li>
+                          <p>
+                            If <a def-id="videotracks"></a>.<a def-id="videotracklist-length"></a> equals 0, then run
+                            the following steps:
+                          </p>
+                          <ol>
+                            <li>Set the <a def-id="videotrack-selected"></a> property on <var>new video track</var> to true.</li>
+                            <li>Set <var>active track flag</var> to true.</li>
+                          </ol>
+                        </li>
+                        <li>Add <var>new video track</var> to the <a def-id="sourcebuffer-videoTracks"></a> attribute on this <a>SourceBuffer</a> object.</li>
+                        <li><a def-id="Queue-and-fire-addtrack"></a> at the <a def-id="video-track-list"></a> object referenced by the <a def-id="sourcebuffer-videoTracks"></a> attribute
+                          on this <a>SourceBuffer</a> object.</li>
+                        <li>Add <var>new video track</var> to the <a def-id="videotracks"></a> attribute on the HTMLMediaElement.</li>
+                        <li><a def-id="Queue-and-fire-addtrack"></a> at the <a def-id="video-track-list"></a> object referenced by the <a def-id="videotracks"></a> attribute on the
+                          HTMLMediaElement.</li>
                       </ol>
                     </li>
-                    <li>Add <var>new video track</var> to the <a def-id="sourcebuffer-videoTracks"></a> attribute on this <a>SourceBuffer</a> object.</li>
-                    <li><a def-id="Queue-and-fire-addtrack"></a> at the <a def-id="video-track-list"></a> object referenced by the <a def-id="sourcebuffer-videoTracks"></a> attribute
-                      on this <a>SourceBuffer</a> object.</li>
-                    <li>Add <var>new video track</var> to the <a def-id="videotracks"></a> attribute on the HTMLMediaElement.</li>
-                    <li><a def-id="Queue-and-fire-addtrack"></a> at the <a def-id="video-track-list"></a> object referenced by the <a def-id="videotracks"></a> attribute on the
-                      HTMLMediaElement.</li>
                     <li>Create a new <a def-id="track-buffer"></a> to store <a def-id="coded-frames"></a> for this track.</li>
                     <li>Add the <a def-id="track-description"></a> for this track to the <a def-id="track-buffer"></a>.</li>
                   </ol>
@@ -1380,19 +1442,49 @@
                 <li>
                   <p>For each text track in the <a def-id="init-segment"></a>, run following steps:</p>
                   <ol>
-                    <li>
-                      Let <var>new text track</var> be a new <a def-id="text-track"></a> object with its properties populated with the appropriate
-                      information from the <a def-id="init-segment"></a>.</li>
-                    <li>
-                      If the <a def-id="texttrack-mode"></a> property on <var>new text track</var> equals <a def-id="texttrack-showing"></a> or
-                      <a def-id="texttrack-hidden"></a>, then set <var>active track flag</var> to true.
+                    <li>Let <var>text byte stream track ID</var> be the 
+                      <a def-id="track-id"></a> for the current track being processed.</li>
+                    <li>Let <var>text language</var> be a BCP 47 language tag for the language
+                      specified in the <a def-id="init-segment"></a> for this track or an empty string if no
+                      language info is present.</li>
+                    <li>If <var>text language</var> equals an empty string, then run the
+                      <a def-id="default-track-language-algorithm"></a> with <var>byteStreamTrackID</var>
+                      set to <var>text byte stream track ID</var> and <var>type</var> set to
+                      <a def-id="TrackDefaultType-text"></a> and assign the value returned by the
+                      algorithm to <var>text language</var>.</li>
+                    <li>Let <var>text kinds</var> be an array of kind strings specified in the
+                      <a def-id="init-segment"></a> for this track or an empty array if no kind information
+                      is provided.</li>
+                    <li>If <var>text kinds</var> equals an empty array, then run the
+                      <a def-id="default-track-kinds-algorithm"></a> with <var>byteStreamTrackID</var>
+                      set to <var>text byte stream track ID</var> and <var>type</var> set to
+                      <a def-id="TrackDefaultType-text"></a> and assign the value returned by the
+                      algorithm to <var>text kinds</var>.</li>
+                    <li>For each value in <var>text kinds</var>, run the following steps:
+                      <ol>
+                        <li>Let <var>current text kind</var> equal the value from <var>text kinds</var>
+                          for this iteration of the loop.</li>
+                        <li>
+                          Let <var>new text track</var> be a new <a def-id="text-track"></a> object.</li>
+                        <li>Generate a unique ID and assign it to the <a def-id="texttrack-id"></a> property on <var>new text track</var>.</li>
+                        <li>Assign <var>text language</var> to the <a def-id="texttrack-language"></a>
+                          property on <var>new text track</var>.</li>
+                        <li>Assign <var>current text kind</var> to the <a def-id="texttrack-kind"></a>
+                          property on <var>new text track</var>.</li>
+                        <li>Populate the remaining properties on <var>new text track</var> with the
+                          appropriate information from the <a def-id="init-segment"></a>.
+                        <li>
+                          If the <a def-id="texttrack-mode"></a> property on <var>new text track</var> equals <a def-id="texttrack-showing"></a> or
+                          <a def-id="texttrack-hidden"></a>, then set <var>active track flag</var> to true.
+                        </li>
+                        <li>Add <var>new text track</var> to the <a def-id="sourcebuffer-textTracks"></a> attribute on this <a>SourceBuffer</a> object.</li>
+                        <li><a def-id="Queue-and-fire-addtrack"></a> at <a def-id="sourcebuffer-textTracks"></a> attribute
+                          on this <a>SourceBuffer</a> object.</li>
+                        <li>Add <var>new text track</var> to the <a def-id="texttracks"></a> attribute on the HTMLMediaElement.</li>
+                        <li><a def-id="Queue-and-fire-addtrack"></a> at the <a def-id="text-track-list"></a> object referenced by the <a def-id="texttracks"></a> attribute on the
+                          HTMLMediaElement.</li>
+                      </ol>
                     </li>
-                    <li>Add <var>new text track</var> to the <a def-id="sourcebuffer-textTracks"></a> attribute on this <a>SourceBuffer</a> object.</li>
-                    <li><a def-id="Queue-and-fire-addtrack"></a> at <a def-id="sourcebuffer-textTracks"></a> attribute
-                      on this <a>SourceBuffer</a> object.</li>
-                    <li>Add <var>new text track</var> to the <a def-id="texttracks"></a> attribute on the HTMLMediaElement.</li>
-                    <li><a def-id="Queue-and-fire-addtrack"></a> at the <a def-id="text-track-list"></a> object referenced by the <a def-id="texttracks"></a> attribute on the
-                      HTMLMediaElement.</li>
                     <li>Create a new <a def-id="track-buffer"></a> to store <a def-id="coded-frames"></a> for this track.</li>
                     <li>Add the <a def-id="track-description"></a> for this track to the <a def-id="track-buffer"></a>.</li>
                   </ol>
@@ -1423,6 +1515,57 @@
           </ol>
         </section>
 
+        <section id="sourcebuffer-default-track-language">
+          <h4>Default track language</h4>
+          <p>The following steps are run when the <a def-id="init-segment-received-algorithm"></a> needs
+            to determine what the default language for a new track should be. This algorithm is initialized
+            with <var>byteStreamTrackID</var> and <var>type</var> parameters when invoked by the
+            <a def-id="init-segment-received-algorithm"></a>.</p>
+          <ol>
+            <li>If <a def-id="trackDefaults"></a> contains a <a>TrackDefault</a> object with a
+              <a def-id="TrackDefault-type"></a> attribute equal to <var>type</var> and a
+              <a def-id="TrackDefault-byteStreamTrackID"></a> attribute equal to
+              <var>byteStreamTrackID</var>, then return the value of the
+              <a def-id="TrackDefault-language"></a> attribute on this matching object and abort these
+              steps.</li>
+
+            <li>If <a def-id="trackDefaults"></a> contains a <a>TrackDefault</a> object with a
+              <a def-id="TrackDefault-type"></a> attribute equal to <var>type</var> and a
+              <a def-id="TrackDefault-byteStreamTrackID"></a> attribute equal to
+              an empty string, then return the value of the
+              <a def-id="TrackDefault-language"></a> attribute on this matching object and abort these
+              steps.</li>
+
+            <li>Return an empty string to the caller.</li>
+          </ol>
+        </section>
+
+        <section id="sourcebuffer-default-track-kinds">
+          <h4>Default track kinds</h4>
+          <p>The following steps are run when the <a def-id="init-segment-received-algorithm"></a> needs
+            to determine what the default kinds for a new track should be. This algorithm is initialized
+            with <var>byteStreamTrackID</var> and <var>type</var> parameters when invoked by the
+            <a def-id="init-segment-received-algorithm"></a>.</p>
+          <ol>
+            <ol>
+            <li>If <a def-id="trackDefaults"></a> contains a <a>TrackDefault</a> object with a
+              <a def-id="TrackDefault-type"></a> attribute equal to <var>type</var> and a
+              <a def-id="TrackDefault-byteStreamTrackID"></a> attribute equal to
+              <var>byteStreamTrackID</var>, then return the value of the
+              <a def-id="TrackDefault-kinds"></a> attribute on this matching object and abort these
+              steps.</li>
+
+            <li>If <a def-id="trackDefaults"></a> contains a <a>TrackDefault</a> object with a
+              <a def-id="TrackDefault-type"></a> attribute equal to <var>type</var> and a
+              <a def-id="TrackDefault-byteStreamTrackID"></a> attribute equal to
+              an empty string, then return the value of the
+              <a def-id="TrackDefault-kinds"></a> attribute on this matching object and abort these
+              steps.</li>
+
+            <li>Return an array with a single empty string element in it to the caller.</li>
+          </ol>
+        </section>
+
         <section id="sourcebuffer-coded-frame-processing">
           <h4>Coded Frame Processing</h4>
           <p>When complete <a def-id="coded-frames"></a> have been parsed by the <a def-id="segment-parser-loop"></a> then the following steps are run:</p>
@@ -1890,6 +2033,127 @@
       </dl>
     </section>
 
+    <section id="trackdefault">
+      <h2>TrackDefault Object</h2>
+      <p>The TrackDefault object is used to provide kind and language information for tracks that do not
+        contain this information in the <a def-id="init-segments"></a>. This information is only consulted
+        when the <a def-id="init-segment-received-algorithm"></a> creates track objects.</p>
+
+      <dl title="enum TrackDefaultType" class="idl">
+        <dt>audio</dt>
+        <dd>
+          Indicates that the information in the <a>TrackDefault</a> object should only be used when
+          creating <a>AudioTrack</a> objects.
+        </dd>
+        <dt>video</dt>
+        <dd>
+          Indicates that the information in the  <a>TrackDefault</a> object should only be used when
+          creating <a>VideoTrack</a> objects.
+        </dd>
+        <dt>text</dt>
+        <dd>
+          Indicates that the  information in the <a>TrackDefault</a> object should only be used when
+          creating <a>TextTrack</a> objects.
+        </dd>
+      </dl>
+
+      <dl title="interface TrackDefault" class="idl">
+        <dt class="extended-attribute">
+          Constructor(TrackDefaultType type, DOMString language, sequence<DOMString> kinds, optional DOMString byteStreamTrackID = "")
+        </dt>
+        <dd>
+          <ol class="method-algorithm">
+            <li>if <var>language</var> is not an empty string or <var>language</var> is not a BCP 47
+              language tag, then throw an <a def-id="invalid-access-err"></a> and abort these steps.</li>
+            <li>
+              <dl class="switch">
+                <dt>If <var>type</var> equals <a def-id="TrackDefaultType-audio"></a>:</dt>
+                <dd>
+                  If any string in <var>kinds</var> contains a value that is not listed as applying to
+                  audio in the <a def-id="av-kind-categories-table"></a>, then throw an
+                  <a def-id="invalid-access-err"></a> and abort these steps.
+                </dd>
+                <dt>If <var>type</var> equals <a def-id="TrackDefaultType-video"></a>:</dt>
+                <dd>
+                  If any string in <var>kinds</var> contains a value that is not listed as applying to
+                  video in the <a def-id="av-kind-categories-table"></a>, then throw an
+                  <a def-id="invalid-access-err"></a> and abort these steps.
+                </dd>
+
+                <dt>If <var>type</var> equals <a def-id="TrackDefaultType-text"></a>:</dt>
+                <dd>
+                  If any string in <var>kinds</var> contains a value that is not listed in the
+                  <a def-id="text-track-kind-list"></a>, then throw an <a def-id="invalid-access-err"></a>
+                  and abort these steps.
+                </dd>
+              </dl>
+            </li>
+            <li>Set the <a def-id="TrackDefault-type"></a> attribute on this new object to <var>type</var>.</li>
+            <li>Set the <a def-id="TrackDefault-language"></a> attribute on this new object to <var>language</var>.</li>
+            <li>Set the <a def-id="TrackDefault-kinds"></a> attribute to on this new object <var>kinds</var>.</li>
+            <li>Set the <a def-id="TrackDefault-byteStreamTrackID"></a> attribute on this new object to <var>byteStreamTrackID</var>.</li>
+          </ol>
+        </dd>
+        <dt>readonly attribute TrackDefaultType type</dt>
+        <dd>
+          <p>The type of track that can be constructed using the information in this object.</p>
+        </dd>
+        <dt>readonly attribute DOMString byteStreamTrackID</dt>
+        <dd>
+          <p>The decimal string representation of the <a def-id="track-id"></a> that identifies the specific
+            track that this object should apply to. An empty string indicates that this object can be
+            used for any track of the appropriate type. (i.e. any <a>AudioTrack</a> if
+            <a def-id="TrackDefault-type"></a> equals <a def-id="TrackDefaultType-audio"></a>).</p>
+        </dd>
+        <dt>readonly attribute DOMString language</dt>
+        <dd>
+          <p>The default language to use when an <a def-id="init-segment"></a> does not contain language
+          information for a new track. See <a def-id="init-segment-received-algorithm"></a> for details.</p>
+        </dd>
+        <dt>readonly attribute DOMString[] kinds</dt>
+        <dd>
+          <p>The default kinds used when an <a def-id="init-segment"></a> does not contain kind
+          information for a new track. See <a def-id="init-segment-received-algorithm"></a> for details.</p>
+        </dd>
+      </dl>
+    </section>
+
+    <section id="trackdefaultlist">
+      <h2>TrackDefaultList Object</h2>
+      <p>TrackDefaultList is a simple container object for <a>TrackDefault</a> objects. It provides read-only array access.</p>
+
+      <dl title="interface TrackDefaultList" class="idl">
+        <dt class="extended-attribute">
+          Constructor(sequence&lt;TrackDefault&gt; trackDefaults)
+        </dt>
+        <dd>
+          <ol class="method-algorithm">
+            <li>If <var>trackDefaults</var> contains two or more <a>TrackDefault</a> objects with
+              the same <a def-id="TrackDefault-type"></a> and have
+              <a def-id="TrackDefault-byteStreamTrackID"></a> equal to an empty string, then throw an
+              <a def-id="invalid-access-err"></a> and abort these steps.
+              <p class="note">This ensures that there is only one "byteStreamTrackID independent"
+                default for each <a>TrackDefaultType</a> value.</p></li>
+            <li>Store a copy of <var>trackDefaults</var> in this new object so the values can be returned
+              by the accessor methods.</li>
+          </ol>
+        </dd>
+        <dt>readonly attribute unsigned long length</dt>
+        <dd>
+          <p>Indicates the number of <a>TrackDefault</a> objects in the list.</p>
+        </dd>
+        <dt>getter TrackDefault (unsigned long index)</dt>
+        <dd>
+          <p>Allows the TrackDefault objects in the list to be accessed with an array operator (i.e. []).</p>
+
+          <ol class="method-algorithm">
+            <li>If <var>index</var> is greater than or equal to the <a def-id="length"></a> attribute then return undefined and abort these steps.</li>
+            <li>Return the <var>index</var>'th <a>TrackDefault</a> object in the list.</li>
+          </ol>
+        </dd>
+      </dl>
+    </section>
+
     <section id="url">
       <h2>URL Object Extensions</h2>
       <p>This section specifies extensions to the <a def-id="URL"></a>[[!FILE-API]] object definition.</p>
@@ -1991,44 +2255,6 @@
       <p>This section specifies extensions to the HTML <a def-id="audio-track"></a> definition.</p>
 
       <dl title="partial interface AudioTrack" class="idl">
-        <dt>attribute DOMString kind</dt>
-        <dd>
-          <p>Allows the web application to get and update the track <a def-id="audiotrack-kind"></a>.</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>On setting, run the following steps:</p>
-          <ol>
-            <li>If the value being assigned to this attribute does not match one of the <a def-id="videoref" name="dom-TrackList-getKind-categories">kind categories</a>, then abort these steps.</li>
-            <li>Update this attribute to the new value.</li>
-            <li>If the <a def-id="audiotrack-sourceBuffer"></a> attribute on this track is not null, then
-              <a def-id="queue-a-task-to-fire-an-event-named"></a> <a def-id="tracklist-change"></a> at
-              <a def-id="audiotrack-sourceBuffer"></a>.<a def-id="sourcebuffer-audioTracks"></a>.
-            </li>
-            <li><a def-id="Queue-a-task-to-fire-an-event-named"></a> <a def-id="tracklist-change"></a> at the <a def-id="audio-track-list"></a> object referenced by the <a def-id="audiotracks"></a> attribute on the
-              HTMLMediaElement.
-            </li>
-          </ol>
-        </dd>
-
-        <dt>attribute DOMString language</dt>
-        <dd>
-          <p>Allows the web application to get and update the track <a def-id="audiotrack-language"></a>.</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>On setting, run the following steps:</p>
-          <ol>
-            <li>If the value being assigned to this attribute is not an empty string or a BCP 47 language tag[[!BCP47]], then abort these steps.</li>
-            <li>Update this attribute to the new value.</li>
-            <li>If the <a def-id="audiotrack-sourceBuffer"></a> attribute on this track is not null, then
-              <a def-id="queue-a-task-to-fire-an-event-named"></a> <a def-id="tracklist-change"></a> at
-              <a def-id="audiotrack-sourceBuffer"></a>.<a def-id="sourcebuffer-audioTracks"></a>.
-            </li>
-            <li><a def-id="Queue-a-task-to-fire-an-event-named"></a> <a def-id="tracklist-change"></a> at the <a def-id="audio-track-list"></a> object referenced by the <a def-id="audiotracks"></a> attribute on the
-              HTMLMediaElement.
-            </li>
-          </ol>
-        </dd>
-
         <dt>readonly attribute SourceBuffer? sourceBuffer</dt>
         <dd>
           <p>Returns the <a>SourceBuffer</a> that created this track. Returns null if this track was not created by a <a>SourceBuffer</a> or the <a>SourceBuffer</a> has been removed from the <a def-id="sourceBuffers"></a> attribute of its <a def-id="parent-media-source"></a>.</p>
@@ -2041,48 +2267,11 @@
       <p>This section specifies extensions to the HTML <a def-id="video-track"></a> definition.</p>
 
       <dl title="partial interface VideoTrack" class="idl">
-        <dt>attribute DOMString kind</dt>
-        <dd>
-          <p>Allows the web application to get and update the track <a def-id="videotrack-kind"></a>.</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>On setting, run the following steps:</p>
-          <ol>
-            <li>If the value being assigned to this attribute does not match one of the <a def-id="videoref" name="dom-TrackList-getKind-categories">kind categories</a>, then abort these steps.</li>
-            <li>Update this attribute to the new value.</li>
-            <li>If the <a def-id="videotrack-sourceBuffer"></a> attribute on this track is not null, then
-              <a def-id="queue-a-task-to-fire-an-event-named"></a> <a def-id="tracklist-change"></a> at
-              <a def-id="videotrack-sourceBuffer"></a>.<a def-id="sourcebuffer-videoTracks"></a>.
-            </li>
-            <li><a def-id="Queue-a-task-to-fire-an-event-named"></a> <a def-id="tracklist-change"></a> at the <a def-id="video-track-list"></a> object referenced by the <a def-id="videotracks"></a> attribute on the
-              HTMLMediaElement.
-            </li>
-          </ol>
-        </dd>
-
-        <dt>attribute DOMString language</dt>
-        <dd>
-          <p>Allows the web application to get and update the track <a def-id="videotrack-language"></a>.</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>On setting, run the following steps:</p>
-          <ol>
-            <li>If the value being assigned to this attribute is not an empty string or a BCP 47 language tag[[!BCP47]], then abort these steps.</li>
-            <li>Update this attribute to the new value.</li>
-            <li>If the <a def-id="videotrack-sourceBuffer"></a> attribute on this track is not null, then
-              <a def-id="queue-a-task-to-fire-an-event-named"></a> <a def-id="tracklist-change"></a> at
-              <a def-id="videotrack-sourceBuffer"></a>.<a def-id="sourcebuffer-videoTracks"></a>.
-            </li>
-            <li><a def-id="Queue-a-task-to-fire-an-event-named"></a> <a def-id="tracklist-change"></a> at the <a def-id="video-track-list"></a> object referenced by the <a def-id="videotracks"></a> attribute on the
-              HTMLMediaElement.
-            </li>
-          </ol>
-        </dd>
-
         <dt>readonly attribute SourceBuffer? sourceBuffer</dt>
         <dd>
           <p>Returns the <a>SourceBuffer</a> that created this track. Returns null if this track was not created by a <a>SourceBuffer</a> or the <a>SourceBuffer</a> has been removed from the <a def-id="sourceBuffers"></a> attribute of its <a def-id="parent-media-source"></a>.</p>
         </dd>
+      </dl>
     </section>
 
     <section id="text-track-extensions">
@@ -2090,49 +2279,11 @@
       <p>This section specifies extensions to the HTML <a def-id="text-track"></a> definition.</p>
 
       <dl title="partial interface TextTrack" class="idl">
-        <dt>attribute DOMString kind</dt>
-        <dd>
-          <p>Allows the web application to get and update the track <a def-id="texttrack-kind"></a>.</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>On setting, run the following steps:</p>
-          <ol>
-            <li>If the value being assigned to this attribute does not match one of the <a def-id="videoref" name="text-track-kind">text track kinds</a>, then abort these steps.</li>
-            <li>Update this attribute to the new value.</li>
-            <li>If the <a def-id="texttrack-sourceBuffer"></a> attribute on this track is not null, then
-              <a def-id="queue-a-task-to-fire-an-event-named"></a> <a def-id="tracklist-change"></a> at
-              <a def-id="texttrack-sourceBuffer"></a>.<a def-id="sourcebuffer-textTracks"></a>.
-            </li>
-            <li><a def-id="Queue-a-task-to-fire-an-event-named"></a> <a def-id="tracklist-change"></a> at the <a def-id="text-track-list"></a> object referenced by the <a def-id="texttracks"></a> attribute on the
-              HTMLMediaElement.
-            </li>
-          </ol>
-        </dd>
-
-        <dt>attribute DOMString language</dt>
-        <dd>
-          <p>Allows the web application to get and update the track <a def-id="texttrack-language"></a>.</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>On setting, run the following steps:</p>
-          <ol>
-            <li>If the value being assigned to this attribute is not an valid <a def-id="videoref" name="text-track-language">text track language</a>, 
-              then abort these steps.</li>
-            <li>Update this attribute to the new value.</li>
-            <li>If the <a def-id="texttrack-sourceBuffer"></a> attribute on this track is not null, then
-              <a def-id="queue-a-task-to-fire-an-event-named"></a> <a def-id="tracklist-change"></a> at
-              <a def-id="texttrack-sourceBuffer"></a>.<a def-id="sourcebuffer-textTracks"></a>.
-            </li>
-            <li><a def-id="Queue-a-task-to-fire-an-event-named"></a> <a def-id="tracklist-change"></a> at the <a def-id="text-track-list"></a> object referenced by the <a def-id="texttracks"></a> attribute on the
-              HTMLMediaElement.
-            </li>
-          </ol>
-        </dd>
-
         <dt>readonly attribute SourceBuffer? sourceBuffer</dt>
         <dd>
           <p>Returns the <a>SourceBuffer</a> that created this track. Returns null if this track was not created by a <a>SourceBuffer</a> or the <a>SourceBuffer</a> has been removed from the <a def-id="sourceBuffers"></a> attribute of its <a def-id="parent-media-source"></a>.</p>
         </dd>
+      </dl>
     </section>
 
     <section id="byte-stream-formats">
@@ -2325,7 +2476,15 @@
         </thead>
         <tbody>
           <tr>
-            <td>20 May 2014</td>
+            <td>21 May 2014</td>
+            <td>
+              <ul>
+                <li>Bug 24370 - Add TrackDefault object and remove kind/language overloads.</li>
+              </ul>
+            </td>
+          </tr>
+          <tr>
+            <td><a href="https://dvcs.w3.org/hg/html-media/raw-file/3e8dfccbfded/media-source/media-source.html">20 May 2014</a></td>
             <td>
               <ul>
                 <li>Bug 25518 - Make remove() end parameter an unrestricted double.</li>
--- a/media-source/media-source.html	Tue May 20 09:55:22 2014 -0700
+++ b/media-source/media-source.html	Tue May 20 15:00:59 2014 -0700
@@ -400,7 +400,7 @@
   </p>
   <h1 class="title p-name" id="title" property="dcterms:title">Media Source Extensions</h1>
   
-  <h2 property="dcterms:issued" datatype="xsd:dateTime" content="2014-05-21T01:11:24.000Z" id="w3c-editor-s-draft-20-may-2014"><abbr title="World Wide Web Consortium">W3C</abbr> Editor's Draft <time class="dt-published" datetime="2014-05-20">20 May 2014</time></h2>
+  <h2 property="dcterms:issued" datatype="xsd:dateTime" content="2014-05-21T07:19:37.000Z" id="w3c-editor-s-draft-21-may-2014"><abbr title="World Wide Web Consortium">W3C</abbr> Editor's Draft <time class="dt-published" datetime="2014-05-21">21 May 2014</time></h2>
   <dl>
     
       <dt>This version:</dt>
@@ -541,7 +541,7 @@
       
     
   
-</section><section id="toc"><h2 class="introductory" aria-level="1" role="heading" id="h2_toc">Table of Contents</h2><ul class="toc" role="directory" id="respecContents"><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="#normative-references" class="tocxref"><span class="secno">A.1 </span>Normative references</a></li><li class="tocline"><a href="#informative-references" class="tocxref"><span class="secno">A.2 </span>Informative references</a></li></ul></li></ul></section>
+</section><section id="toc"><h2 class="introductory" aria-level="1" role="heading" id="h2_toc">Table of Contents</h2><ul class="toc" role="directory" id="respecContents"><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-default-track-language" class="tocxref"><span class="secno">3.5.8 </span>Default track language</a></li><li class="tocline"><a href="#sourcebuffer-default-track-kinds" class="tocxref"><span class="secno">3.5.9 </span>Default track kinds</a></li><li class="tocline"><a href="#sourcebuffer-coded-frame-processing" class="tocxref"><span class="secno">3.5.10 </span>Coded Frame Processing</a></li><li class="tocline"><a href="#sourcebuffer-coded-frame-removal" class="tocxref"><span class="secno">3.5.11 </span>Coded Frame Removal Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-coded-frame-eviction" class="tocxref"><span class="secno">3.5.12 </span>Coded Frame Eviction Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-audio-splice-frame-algorithm" class="tocxref"><span class="secno">3.5.13 </span>Audio Splice Frame Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-audio-splice-rendering-algorithm" class="tocxref"><span class="secno">3.5.14 </span>Audio Splice Rendering Algorithm</a></li><li class="tocline"><a href="#sourcebuffer-text-splice-frame-algorithm" class="tocxref"><span class="secno">3.5.15 </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="#trackdefault" class="tocxref"><span class="secno">6. </span>TrackDefault Object</a><ul class="toc"><li class="tocline"><a href="#constructors" class="tocxref"><span class="secno">6.1 </span>Constructors</a></li><li class="tocline"><a href="#attributes-4" class="tocxref"><span class="secno">6.2 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#trackdefaultlist" class="tocxref"><span class="secno">7. </span>TrackDefaultList Object</a><ul class="toc"><li class="tocline"><a href="#constructors-1" class="tocxref"><span class="secno">7.1 </span>Constructors</a></li><li class="tocline"><a href="#attributes-5" class="tocxref"><span class="secno">7.2 </span>Attributes</a></li><li class="tocline"><a href="#methods-3" class="tocxref"><span class="secno">7.3 </span>Methods</a></li></ul></li><li class="tocline"><a href="#url" class="tocxref"><span class="secno">8. </span>URL Object 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="#htmlmediaelement-extensions" class="tocxref"><span class="secno">9. </span>HTMLMediaElement Extensions</a></li><li class="tocline"><a href="#htmlvideoelement-extensions" class="tocxref"><span class="secno">10. </span>HTMLVideoElement Extensions</a><ul class="toc"><li class="tocline"><a href="#methods-5" class="tocxref"><span class="secno">10.1 </span>Methods</a></li></ul></li><li class="tocline"><a href="#audio-track-extensions" class="tocxref"><span class="secno">11. </span>AudioTrack 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="#video-track-extensions" class="tocxref"><span class="secno">12. </span>VideoTrack Extensions</a><ul class="toc"><li class="tocline"><a href="#attributes-7" class="tocxref"><span class="secno">12.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#text-track-extensions" class="tocxref"><span class="secno">13. </span>TextTrack Extensions</a><ul class="toc"><li class="tocline"><a href="#attributes-8" class="tocxref"><span class="secno">13.1 </span>Attributes</a></li></ul></li><li class="tocline"><a href="#byte-stream-formats" class="tocxref"><span class="secno">14. </span>Byte Stream Formats</a></li><li class="tocline"><a href="#examples" class="tocxref"><span class="secno">15. </span>Examples</a></li><li class="tocline"><a href="#acknowledgements" class="tocxref"><span class="secno">16. </span>Acknowledgments</a></li><li class="tocline"><a href="#revision-history" class="tocxref"><span class="secno">17. </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="#normative-references" class="tocxref"><span class="secno">A.1 </span>Normative references</a></li><li class="tocline"><a href="#informative-references" class="tocxref"><span class="secno">A.2 </span>Informative references</a></li></ul></li></ul></section>
 
 
     <section id="introduction" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
@@ -1221,6 +1221,7 @@
 <span class="idlMethod">    <span class="idlMethType">void</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">Stream</span> <span class="idlParamName">stream</span></span>, <span class="idlParam">[<span class="extAttr">EnforceRange</span>] optional <span class="idlParamType">unsigned long long</span> <span class="idlParamName">maxSize</span></span>);</span>
 <span class="idlMethod">    <span class="idlMethType">void</span> <span class="idlMethName"><a href="#widl-SourceBuffer-abort-void">abort</a></span> ();</span>
 <span class="idlMethod">    <span class="idlMethType">void</span> <span class="idlMethName"><a href="#widl-SourceBuffer-remove-void-double-start-unrestricted-double-end">remove</a></span> (<span class="idlParam"><span class="idlParamType">double</span> <span class="idlParamName">start</span></span>, <span class="idlParam"><span class="idlParamType">unrestricted double</span> <span class="idlParamName">end</span></span>);</span>
+<span class="idlAttribute">                attribute <span class="idlAttrType"><a href="#idl-def-TrackDefaultList" class="idlType"><code>TrackDefaultList</code></a></span>    <span class="idlAttrName"><a href="#widl-SourceBuffer-trackDefaults">trackDefaults</a></span>;</span>
 };</span></pre><section id="attributes-1"><h3 aria-level="2" role="heading" id="h3_attributes-1"><span class="secno">3.1 </span>Attributes</h3><dl class="attributes"><dt id="widl-SourceBuffer-appendWindowEnd"><code>appendWindowEnd</code> of type <span class="idlAttrType">unrestricted double</span>,            </dt><dd>
           <p>The <a href="#presentation-timestamp">presentation timestamp</a> 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>
@@ -1299,6 +1300,10 @@
             <li>If the <code><a href="#widl-SourceBuffer-mode">mode</a></code> attribute equals <code><a href="#idl-def-AppendMode.sequence">"sequence"</a></code>, then set the <var><a href="#sourcebuffer-group-start-timestamp">group start timestamp</a></var> to <var>new timestamp offset</var>.</li>
             <li>Update the attribute to <var>new timestamp offset</var>.</li>
           </ol>
+        </dd><dt id="widl-SourceBuffer-trackDefaults"><code>trackDefaults</code> of type <span class="idlAttrType"><a href="#idl-def-TrackDefaultList" class="idlType"><code>TrackDefaultList</code></a></span>,            </dt><dd>
+          <p>Specifies the default values to use if kind and/or language information is not available in the
+            <a href="#init-segment">initialization segment</a> when the <a href="#sourcebuffer-init-segment-received">initialization segment received algorithm</a> needs
+            to create track objects.</p>
         </dd><dt id="widl-SourceBuffer-updating"><code>updating</code> of type <span class="idlAttrType">boolean</span>, readonly   </dt><dd>
           <p>Indicates whether the asynchronous continuation of an <code><a href="#widl-SourceBuffer-appendBuffer-void-ArrayBufferView-data">appendBuffer()</a></code>, <code><a href="#widl-SourceBuffer-appendStream-void-Stream-stream-unsigned-long-long-maxSize">appendStream()</a></code>, or <code><a href="#widl-SourceBuffer-remove-void-double-start-unrestricted-double-end">remove()</a></code>
             operation is still being processed. This attribute is initially set to false when the object is created.</p>
@@ -1683,24 +1688,52 @@
                 <li>
                   <p>For each audio track in the <a href="#init-segment">initialization segment</a>, run following steps:</p>
                   <ol>
-                    <li>Let <var>new audio track</var> be a new <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#audiotrack">AudioTrack</a></code> object.</li>
-                    <li>Generate a unique ID and assign it to the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-audiotrack-id">id</a></code> property on <var>new audio track</var>.</li>
-                    <li>
-                      <p>
-                        If <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-audiotracks">audioTracks</a></code>.<code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-audiotracklist-length">length</a></code> equals 0, then run
-                          the following steps:
-                      </p>
+                    <li>Let <var>audio byte stream track ID</var> be the
+                      <a href="#track-id">Track ID</a> for the current track being processed.</li>
+                    <li>Let <var>audio language</var> be a BCP 47 language tag for the language
+                      specified in the <a href="#init-segment">initialization segment</a> for this track or an empty string if no
+                      language info is present.</li>
+                    <li>If <var>audio language</var> equals an empty string, then run the
+                      <a href="#sourcebuffer-default-track-language">default track language algorithm</a> with <var>byteStreamTrackID</var>
+                      set to <var>audio byte stream track ID</var> and <var>type</var> set to
+                      <code><a href="#idl-def-TrackDefaultType.audio">"audio"</a></code> and assign the value returned by the
+                      algorithm to <var>audio language</var>.</li>
+                    <li>Let <var>audio kinds</var> be an array of kind strings specified in the
+                      <a href="#init-segment">initialization segment</a> for this track or an empty array if no kind information
+                      is provided.</li>
+                    <li>If <var>audio kinds</var> equals an empty array, then run the
+                      <a href="#sourcebuffer-default-track-kinds">default track kinds algorithm</a> with <var>byteStreamTrackID</var>
+                      set to <var>audio byte stream track ID</var> and <var>type</var> set to
+                      <code><a href="#idl-def-TrackDefaultType.audio">"audio"</a></code> and assign the value returned by the
+                      algorithm to <var>audio kinds</var>.</li>
+                    <li>For each value in <var>audio kinds</var>, run the following steps:
                       <ol>
-                        <li>Set the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-audiotrack-enabled">enabled</a></code> property on <var>new audio track</var> to true.</li>
-                        <li>Set <var>active track flag</var> to true.</li>
+                        <li>Let <var>current audio kind</var> equal the value from <var>audio kinds</var>
+                          for this iteration of the loop.</li>
+                        <li>Let <var>new audio track</var> be a new <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#audiotrack">AudioTrack</a></code> object.</li>
+                        <li>Generate a unique ID and assign it to the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-audiotrack-id">id</a></code> property on <var>new audio track</var>.</li>
+                        <li>Assign <var>audio language</var> to the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-audiotrack-language">language</a></code>
+                          property on <var>new audio track</var>.</li>
+                        <li>Assign <var>current audio kind</var> to the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-audiotrack-kind">kind</a></code>
+                          property on <var>new audio track</var>.</li>
+                        <li>
+                          <p>
+                            If <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-audiotracks">audioTracks</a></code>.<code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-audiotracklist-length">length</a></code> equals 0, then run
+                            the following steps:
+                          </p>
+                          <ol>
+                            <li>Set the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-audiotrack-enabled">enabled</a></code> property on <var>new audio track</var> to true.</li>
+                            <li>Set <var>active track flag</var> to true.</li>
+                          </ol>
+                        </li>
+                        <li>Add <var>new audio track</var> to the <code><a href="#widl-SourceBuffer-audioTracks">audioTracks</a></code> attribute on this <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object.</li>
+                        <li><a href="http://www.w3.org/TR/html5/webappapis.html#queue-a-task">Queue a task</a> to fire a <a href="http://www.w3.org/TR/html5/infrastructure.html#concept-events-trusted">trusted event</a> named <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onaddtrack">addtrack</a></code>, that does not bubble and is not cancelable, and that uses the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#trackevent">TrackEvent</a></code> interface, at the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#audiotracklist">AudioTrackList</a></code> object referenced by the
+                          <code><a href="#widl-SourceBuffer-audioTracks">audioTracks</a></code> attribute on this <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object.</li>
+                        <li>Add <var>new audio track</var> to the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-audiotracks">audioTracks</a></code> attribute on the HTMLMediaElement.</li>
+                        <li><a href="http://www.w3.org/TR/html5/webappapis.html#queue-a-task">Queue a task</a> to fire a <a href="http://www.w3.org/TR/html5/infrastructure.html#concept-events-trusted">trusted event</a> named <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onaddtrack">addtrack</a></code>, that does not bubble and is not cancelable, and that uses the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#trackevent">TrackEvent</a></code> interface, at the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#audiotracklist">AudioTrackList</a></code> object referenced by the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-audiotracks">audioTracks</a></code>
+                          attribute on the HTMLMediaElement.</li>
                       </ol>
                     </li>
-                    <li>Add <var>new audio track</var> to the <code><a href="#widl-SourceBuffer-audioTracks">audioTracks</a></code> attribute on this <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object.</li>
-                    <li><a href="http://www.w3.org/TR/html5/webappapis.html#queue-a-task">Queue a task</a> to fire a <a href="http://www.w3.org/TR/html5/infrastructure.html#concept-events-trusted">trusted event</a> named <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onaddtrack">addtrack</a></code>, that does not bubble and is not cancelable, and that uses the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#trackevent">TrackEvent</a></code> interface, at the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#audiotracklist">AudioTrackList</a></code> object referenced by the
-                      <code><a href="#widl-SourceBuffer-audioTracks">audioTracks</a></code> attribute on this <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object.</li>
-                    <li>Add <var>new audio track</var> to the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-audiotracks">audioTracks</a></code> attribute on the HTMLMediaElement.</li>
-                    <li><a href="http://www.w3.org/TR/html5/webappapis.html#queue-a-task">Queue a task</a> to fire a <a href="http://www.w3.org/TR/html5/infrastructure.html#concept-events-trusted">trusted event</a> named <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onaddtrack">addtrack</a></code>, that does not bubble and is not cancelable, and that uses the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#trackevent">TrackEvent</a></code> interface, at the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#audiotracklist">AudioTrackList</a></code> object referenced by the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-audiotracks">audioTracks</a></code>
-                      attribute on the HTMLMediaElement.</li>
                     <li>Create a new <a href="#track-buffer">track buffer</a> to store <a href="#coded-frame">coded frames</a> for this track.</li>
                     <li>Add the <a href="#track-description">track description</a> for this track to the <a href="#track-buffer">track buffer</a>.</li>
                   </ol>
@@ -1708,24 +1741,52 @@
                 <li>
                   <p>For each video track in the <a href="#init-segment">initialization segment</a>, run following steps:</p>
                   <ol>
-                    <li>Let <var>new video track</var> be a new <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#videotrack">VideoTrack</a></code> object.</li>
-                    <li>Generate a unique ID and assign it to the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-videotrack-id">id</a></code> property on <var>new video track</var>.</li>
-                    <li>
-                      <p>
-                        If <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-videotracks">videoTracks</a></code>.<code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-videotracklist-length">length</a></code> equals 0, then run
-                          the following steps:
-                      </p>
+                    <li>Let <var>video byte stream track ID</var> be the
+                      <a href="#track-id">Track ID</a> for the current track being processed.</li>
+                    <li>Let <var>video language</var> be a BCP 47 language tag for the language
+                      specified in the <a href="#init-segment">initialization segment</a> for this track or an empty string if no
+                      language info is present.</li>
+                    <li>If <var>video language</var> equals an empty string, then run the
+                      <a href="#sourcebuffer-default-track-language">default track language algorithm</a> with <var>byteStreamTrackID</var>
+                      set to <var>video byte stream track ID</var> and <var>type</var> set to
+                      <code><a href="#idl-def-TrackDefaultType.video">"video"</a></code> and assign the value returned by the
+                      algorithm to <var>video language</var>.</li>
+                    <li>Let <var>video kinds</var> be an array of kind strings specified in the
+                      <a href="#init-segment">initialization segment</a> for this track or an empty array if no kind information
+                      is provided.</li>
+                    <li>If <var>video kinds</var> equals an empty array, then run the
+                      <a href="#sourcebuffer-default-track-kinds">default track kinds algorithm</a> with <var>byteStreamTrackID</var>
+                      set to <var>video byte stream track ID</var> and <var>type</var> set to
+                      <code><a href="#idl-def-TrackDefaultType.video">"video"</a></code> and assign the value returned by the
+                      algorithm to <var>video kinds</var>.</li>
+                    <li>For each value in <var>video kinds</var>, run the following steps:
                       <ol>
-                        <li>Set the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-videotrack-selected">selected</a></code> property on <var>new video track</var> to true.</li>
-                        <li>Set <var>active track flag</var> to true.</li>
+                        <li>Let <var>current video kind</var> equal the value from <var>video kinds</var>
+                          for this iteration of the loop.</li>
+                        <li>Let <var>new video track</var> be a new <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#videotrack">VideoTrack</a></code> object.</li>
+                        <li>Generate a unique ID and assign it to the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-videotrack-id">id</a></code> property on <var>new video track</var>.</li>
+                        <li>Assign <var>video language</var> to the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-videotrack-language">language</a></code>
+                          property on <var>new video track</var>.</li>
+                        <li>Assign <var>current video kind</var> to the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-videotrack-kind">kind</a></code>
+                          property on <var>new video track</var>.</li>
+                        <li>
+                          <p>
+                            If <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-videotracks">videoTracks</a></code>.<code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-videotracklist-length">length</a></code> equals 0, then run
+                            the following steps:
+                          </p>
+                          <ol>
+                            <li>Set the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-videotrack-selected">selected</a></code> property on <var>new video track</var> to true.</li>
+                            <li>Set <var>active track flag</var> to true.</li>
+                          </ol>
+                        </li>
+                        <li>Add <var>new video track</var> to the <code><a href="#widl-SourceBuffer-videoTracks">videoTracks</a></code> attribute on this <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object.</li>
+                        <li><a href="http://www.w3.org/TR/html5/webappapis.html#queue-a-task">Queue a task</a> to fire a <a href="http://www.w3.org/TR/html5/infrastructure.html#concept-events-trusted">trusted event</a> named <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onaddtrack">addtrack</a></code>, that does not bubble and is not cancelable, and that uses the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#trackevent">TrackEvent</a></code> interface, at the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#videotracklist">VideoTrackList</a></code> object referenced by the <code><a href="#widl-SourceBuffer-videoTracks">videoTracks</a></code> attribute
+                          on this <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object.</li>
+                        <li>Add <var>new video track</var> to the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-videotracks">videoTracks</a></code> attribute on the HTMLMediaElement.</li>
+                        <li><a href="http://www.w3.org/TR/html5/webappapis.html#queue-a-task">Queue a task</a> to fire a <a href="http://www.w3.org/TR/html5/infrastructure.html#concept-events-trusted">trusted event</a> named <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onaddtrack">addtrack</a></code>, that does not bubble and is not cancelable, and that uses the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#trackevent">TrackEvent</a></code> interface, at the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#videotracklist">VideoTrackList</a></code> object referenced by the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-videotracks">videoTracks</a></code> attribute on the
+                          HTMLMediaElement.</li>
                       </ol>
                     </li>
-                    <li>Add <var>new video track</var> to the <code><a href="#widl-SourceBuffer-videoTracks">videoTracks</a></code> attribute on this <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object.</li>
-                    <li><a href="http://www.w3.org/TR/html5/webappapis.html#queue-a-task">Queue a task</a> to fire a <a href="http://www.w3.org/TR/html5/infrastructure.html#concept-events-trusted">trusted event</a> named <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onaddtrack">addtrack</a></code>, that does not bubble and is not cancelable, and that uses the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#trackevent">TrackEvent</a></code> interface, at the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#videotracklist">VideoTrackList</a></code> object referenced by the <code><a href="#widl-SourceBuffer-videoTracks">videoTracks</a></code> attribute
-                      on this <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object.</li>
-                    <li>Add <var>new video track</var> to the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-videotracks">videoTracks</a></code> attribute on the HTMLMediaElement.</li>
-                    <li><a href="http://www.w3.org/TR/html5/webappapis.html#queue-a-task">Queue a task</a> to fire a <a href="http://www.w3.org/TR/html5/infrastructure.html#concept-events-trusted">trusted event</a> named <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onaddtrack">addtrack</a></code>, that does not bubble and is not cancelable, and that uses the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#trackevent">TrackEvent</a></code> interface, at the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#videotracklist">VideoTrackList</a></code> object referenced by the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-videotracks">videoTracks</a></code> attribute on the
-                      HTMLMediaElement.</li>
                     <li>Create a new <a href="#track-buffer">track buffer</a> to store <a href="#coded-frame">coded frames</a> for this track.</li>
                     <li>Add the <a href="#track-description">track description</a> for this track to the <a href="#track-buffer">track buffer</a>.</li>
                   </ol>
@@ -1733,19 +1794,49 @@
                 <li>
                   <p>For each text track in the <a href="#init-segment">initialization segment</a>, run following steps:</p>
                   <ol>
-                    <li>
-                      Let <var>new text track</var> be a new <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#texttrack">TextTrack</a></code> object with its properties populated with the appropriate
-                      information from the <a href="#init-segment">initialization segment</a>.</li>
-                    <li>
-                      If the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-texttrack-mode">mode</a></code> property on <var>new text track</var> equals <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-texttrack-showing">"showing"</a></code> or
-                      <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-texttrack-hidden">"hidden"</a></code>, then set <var>active track flag</var> to true.
+                    <li>Let <var>text byte stream track ID</var> be the 
+                      <a href="#track-id">Track ID</a> for the current track being processed.</li>
+                    <li>Let <var>text language</var> be a BCP 47 language tag for the language
+                      specified in the <a href="#init-segment">initialization segment</a> for this track or an empty string if no
+                      language info is present.</li>
+                    <li>If <var>text language</var> equals an empty string, then run the
+                      <a href="#sourcebuffer-default-track-language">default track language algorithm</a> with <var>byteStreamTrackID</var>
+                      set to <var>text byte stream track ID</var> and <var>type</var> set to
+                      <code><a href="#idl-def-TrackDefaultType.text">"text"</a></code> and assign the value returned by the
+                      algorithm to <var>text language</var>.</li>
+                    <li>Let <var>text kinds</var> be an array of kind strings specified in the
+                      <a href="#init-segment">initialization segment</a> for this track or an empty array if no kind information
+                      is provided.</li>
+                    <li>If <var>text kinds</var> equals an empty array, then run the
+                      <a href="#sourcebuffer-default-track-kinds">default track kinds algorithm</a> with <var>byteStreamTrackID</var>
+                      set to <var>text byte stream track ID</var> and <var>type</var> set to
+                      <code><a href="#idl-def-TrackDefaultType.text">"text"</a></code> and assign the value returned by the
+                      algorithm to <var>text kinds</var>.</li>
+                    <li>For each value in <var>text kinds</var>, run the following steps:
+                      <ol>
+                        <li>Let <var>current text kind</var> equal the value from <var>text kinds</var>
+                          for this iteration of the loop.</li>
+                        <li>
+                          Let <var>new text track</var> be a new <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#texttrack">TextTrack</a></code> object.</li>
+                        <li>Generate a unique ID and assign it to the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-texttrack-id">id</a></code> property on <var>new text track</var>.</li>
+                        <li>Assign <var>text language</var> to the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-texttrack-language">language</a></code>
+                          property on <var>new text track</var>.</li>
+                        <li>Assign <var>current text kind</var> to the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-texttrack-kind">kind</a></code>
+                          property on <var>new text track</var>.</li>
+                        <li>Populate the remaining properties on <var>new text track</var> with the
+                          appropriate information from the <a href="#init-segment">initialization segment</a>.
+                        </li><li>
+                          If the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-texttrack-mode">mode</a></code> property on <var>new text track</var> equals <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-texttrack-showing">"showing"</a></code> or
+                          <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-texttrack-hidden">"hidden"</a></code>, then set <var>active track flag</var> to true.
+                        </li>
+                        <li>Add <var>new text track</var> to the <code><a href="#widl-SourceBuffer-textTracks">textTracks</a></code> attribute on this <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object.</li>
+                        <li><a href="http://www.w3.org/TR/html5/webappapis.html#queue-a-task">Queue a task</a> to fire a <a href="http://www.w3.org/TR/html5/infrastructure.html#concept-events-trusted">trusted event</a> named <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onaddtrack">addtrack</a></code>, that does not bubble and is not cancelable, and that uses the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#trackevent">TrackEvent</a></code> interface, at <code><a href="#widl-SourceBuffer-textTracks">textTracks</a></code> attribute
+                          on this <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object.</li>
+                        <li>Add <var>new text track</var> to the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-texttracks">textTracks</a></code> attribute on the HTMLMediaElement.</li>
+                        <li><a href="http://www.w3.org/TR/html5/webappapis.html#queue-a-task">Queue a task</a> to fire a <a href="http://www.w3.org/TR/html5/infrastructure.html#concept-events-trusted">trusted event</a> named <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onaddtrack">addtrack</a></code>, that does not bubble and is not cancelable, and that uses the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#trackevent">TrackEvent</a></code> interface, at the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#texttracklist">TextTrackList</a></code> object referenced by the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-texttracks">textTracks</a></code> attribute on the
+                          HTMLMediaElement.</li>
+                      </ol>
                     </li>
-                    <li>Add <var>new text track</var> to the <code><a href="#widl-SourceBuffer-textTracks">textTracks</a></code> attribute on this <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object.</li>
-                    <li><a href="http://www.w3.org/TR/html5/webappapis.html#queue-a-task">Queue a task</a> to fire a <a href="http://www.w3.org/TR/html5/infrastructure.html#concept-events-trusted">trusted event</a> named <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onaddtrack">addtrack</a></code>, that does not bubble and is not cancelable, and that uses the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#trackevent">TrackEvent</a></code> interface, at <code><a href="#widl-SourceBuffer-textTracks">textTracks</a></code> attribute
-                      on this <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> object.</li>
-                    <li>Add <var>new text track</var> to the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-texttracks">textTracks</a></code> attribute on the HTMLMediaElement.</li>
-                    <li><a href="http://www.w3.org/TR/html5/webappapis.html#queue-a-task">Queue a task</a> to fire a <a href="http://www.w3.org/TR/html5/infrastructure.html#concept-events-trusted">trusted event</a> named <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onaddtrack">addtrack</a></code>, that does not bubble and is not cancelable, and that uses the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#trackevent">TrackEvent</a></code> interface, at the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#texttracklist">TextTrackList</a></code> object referenced by the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-texttracks">textTracks</a></code> attribute on the
-                      HTMLMediaElement.</li>
                     <li>Create a new <a href="#track-buffer">track buffer</a> to store <a href="#coded-frame">coded frames</a> for this track.</li>
                     <li>Add the <a href="#track-description">track description</a> for this track to the <a href="#track-buffer">track buffer</a>.</li>
                   </ol>
@@ -1776,8 +1867,59 @@
           </ol>
         </section>
 
+        <section id="sourcebuffer-default-track-language" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
+          <h4 aria-level="3" role="heading" id="h4_sourcebuffer-default-track-language"><span class="secno">3.5.8 </span>Default track language</h4>
+          <p>The following steps are run when the <a href="#sourcebuffer-init-segment-received">initialization segment received algorithm</a> needs
+            to determine what the default language for a new track should be. This algorithm is initialized
+            with <var>byteStreamTrackID</var> and <var>type</var> parameters when invoked by the
+            <a href="#sourcebuffer-init-segment-received">initialization segment received algorithm</a>.</p>
+          <ol>
+            <li>If <code><a href="#widl-SourceBuffer-trackDefaults">trackDefaults</a></code> contains a <a href="#idl-def-TrackDefault" class="idlType"><code>TrackDefault</code></a> object with a
+              <code><a href="#widl-TrackDefault-type">type</a></code> attribute equal to <var>type</var> and a
+              <code><a href="#widl-TrackDefault-byteStreamTrackID">byteStreamTrackID</a></code> attribute equal to
+              <var>byteStreamTrackID</var>, then return the value of the
+              <code><a href="#widl-TrackDefault-language">language</a></code> attribute on this matching object and abort these
+              steps.</li>
+
+            <li>If <code><a href="#widl-SourceBuffer-trackDefaults">trackDefaults</a></code> contains a <a href="#idl-def-TrackDefault" class="idlType"><code>TrackDefault</code></a> object with a
+              <code><a href="#widl-TrackDefault-type">type</a></code> attribute equal to <var>type</var> and a
+              <code><a href="#widl-TrackDefault-byteStreamTrackID">byteStreamTrackID</a></code> attribute equal to
+              an empty string, then return the value of the
+              <code><a href="#widl-TrackDefault-language">language</a></code> attribute on this matching object and abort these
+              steps.</li>
+
+            <li>Return an empty string to the caller.</li>
+          </ol>
+        </section>
+
+        <section id="sourcebuffer-default-track-kinds" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
+          <h4 aria-level="3" role="heading" id="h4_sourcebuffer-default-track-kinds"><span class="secno">3.5.9 </span>Default track kinds</h4>
+          <p>The following steps are run when the <a href="#sourcebuffer-init-segment-received">initialization segment received algorithm</a> needs
+            to determine what the default kinds for a new track should be. This algorithm is initialized
+            with <var>byteStreamTrackID</var> and <var>type</var> parameters when invoked by the
+            <a href="#sourcebuffer-init-segment-received">initialization segment received algorithm</a>.</p>
+          <ol>
+            <ol>
+            <li>If <code><a href="#widl-SourceBuffer-trackDefaults">trackDefaults</a></code> contains a <a href="#idl-def-TrackDefault" class="idlType"><code>TrackDefault</code></a> object with a
+              <code><a href="#widl-TrackDefault-type">type</a></code> attribute equal to <var>type</var> and a
+              <code><a href="#widl-TrackDefault-byteStreamTrackID">byteStreamTrackID</a></code> attribute equal to
+              <var>byteStreamTrackID</var>, then return the value of the
+              <code><a href="#widl-TrackDefault-kinds">kinds</a></code> attribute on this matching object and abort these
+              steps.</li>
+
+            <li>If <code><a href="#widl-SourceBuffer-trackDefaults">trackDefaults</a></code> contains a <a href="#idl-def-TrackDefault" class="idlType"><code>TrackDefault</code></a> object with a
+              <code><a href="#widl-TrackDefault-type">type</a></code> attribute equal to <var>type</var> and a
+              <code><a href="#widl-TrackDefault-byteStreamTrackID">byteStreamTrackID</a></code> attribute equal to
+              an empty string, then return the value of the
+              <code><a href="#widl-TrackDefault-kinds">kinds</a></code> attribute on this matching object and abort these
+              steps.</li>
+
+            <li>Return an array with a single empty string element in it to the caller.</li>
+          </ol>
+        </ol></section>
+
         <section id="sourcebuffer-coded-frame-processing" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
-          <h4 aria-level="3" role="heading" id="h4_sourcebuffer-coded-frame-processing"><span class="secno">3.5.8 </span>Coded Frame Processing</h4>
+          <h4 aria-level="3" role="heading" id="h4_sourcebuffer-coded-frame-processing"><span class="secno">3.5.10 </span>Coded Frame Processing</h4>
           <p>When complete <a href="#coded-frame">coded frames</a> have been parsed by the <a href="#sourcebuffer-segment-parser-loop">segment parser loop</a> then the following steps are run:</p>
           <ol>
             <li>
@@ -1987,7 +2129,7 @@
         </section>
 
         <section id="sourcebuffer-coded-frame-removal" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
-          <h4 aria-level="3" role="heading" id="h4_sourcebuffer-coded-frame-removal"><span class="secno">3.5.9 </span>Coded Frame Removal Algorithm</h4>
+          <h4 aria-level="3" role="heading" id="h4_sourcebuffer-coded-frame-removal"><span class="secno">3.5.11 </span>Coded Frame Removal Algorithm</h4>
           <p>Follow these steps when <a href="#coded-frame">coded frames</a> for a specific time range need to be removed from the SourceBuffer:</p>
           <ol>
             <li>Let <var>start</var> be the starting <a href="#presentation-timestamp">presentation timestamp</a> for the removal range.</li>
@@ -2018,7 +2160,7 @@
         </section>
 
         <section id="sourcebuffer-coded-frame-eviction" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
-          <h4 aria-level="3" role="heading" id="h4_sourcebuffer-coded-frame-eviction"><span class="secno">3.5.10 </span>Coded Frame Eviction Algorithm</h4>
+          <h4 aria-level="3" role="heading" id="h4_sourcebuffer-coded-frame-eviction"><span class="secno">3.5.12 </span>Coded Frame Eviction Algorithm</h4>
           <p>This algorithm is run to free up space in this source buffer when new data is appended.</p>
           <ol>
             <li>Let <var>new data</var> equal the data that is about to be appended to this SourceBuffer.</li>
@@ -2035,7 +2177,7 @@
         </section>
 
         <section id="sourcebuffer-audio-splice-frame-algorithm" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
-          <h4 aria-level="3" role="heading" id="h4_sourcebuffer-audio-splice-frame-algorithm"><span class="secno">3.5.11 </span>Audio Splice Frame Algorithm</h4>
+          <h4 aria-level="3" role="heading" id="h4_sourcebuffer-audio-splice-frame-algorithm"><span class="secno">3.5.13 </span>Audio Splice Frame Algorithm</h4>
           <p>Follow these steps when the <a href="#sourcebuffer-coded-frame-processing">coded frame processing algorithm</a> needs to generate a splice frame for two overlapping audio
             <a href="#coded-frame">coded frames</a>:</p>
           <ol>
@@ -2105,7 +2247,7 @@
           </ol>
         </section>
         <section id="sourcebuffer-audio-splice-rendering-algorithm" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
-          <h4 aria-level="3" role="heading" id="h4_sourcebuffer-audio-splice-rendering-algorithm"><span class="secno">3.5.12 </span>Audio Splice Rendering Algorithm</h4>
+          <h4 aria-level="3" role="heading" id="h4_sourcebuffer-audio-splice-rendering-algorithm"><span class="secno">3.5.14 </span>Audio Splice Rendering Algorithm</h4>
           <p>The following steps are run when a spliced frame, generated by the <a href="#sourcebuffer-audio-splice-frame-algorithm">audio splice frame algorithm</a>, needs to be rendered by the
             media element:</p>
           <ol>
@@ -2138,7 +2280,7 @@
           </div></div>
         </section>
         <section id="sourcebuffer-text-splice-frame-algorithm" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
-          <h4 aria-level="3" role="heading" id="h4_sourcebuffer-text-splice-frame-algorithm"><span class="secno">3.5.13 </span>Text Splice Frame Algorithm</h4>
+          <h4 aria-level="3" role="heading" id="h4_sourcebuffer-text-splice-frame-algorithm"><span class="secno">3.5.15 </span>Text Splice Frame Algorithm</h4>
           <p>Follow these steps when the <a href="#sourcebuffer-coded-frame-processing">coded frame processing algorithm</a> needs to generate a splice frame for two overlapping timed text
             <a href="#coded-frame">coded frames</a>:</p>
           <ol>
@@ -2232,17 +2374,123 @@
         </dd></dl></section>
     </section>
 
+    <section id="trackdefault" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
+      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_trackdefault"><span class="secno">6. </span>TrackDefault Object</h2>
+      <p>The TrackDefault object is used to provide kind and language information for tracks that do not
+        contain this information in the <a href="#init-segment">initialization segments</a>. This information is only consulted
+        when the <a href="#sourcebuffer-init-segment-received">initialization segment received algorithm</a> creates track objects.</p>
+
+      <pre class="idl"><span class="idlEnum" id="idl-def-TrackDefaultType">enum <span class="idlEnumID">TrackDefaultType</span> {
+    "<a href="#idl-def-TrackDefaultType.audio" class="idlEnumItem">audio</a>",
+    "<a href="#idl-def-TrackDefaultType.video" class="idlEnumItem">video</a>",
+    "<a href="#idl-def-TrackDefaultType.text" class="idlEnumItem">text</a>"
+};</span></pre><table class="simple"><tbody><tr><th colspan="2">Enumeration description</th></tr><tr><td><code id="idl-def-TrackDefaultType.audio">audio</code></td><td>
+          Indicates that the information in the <a href="#idl-def-TrackDefault" class="idlType"><code>TrackDefault</code></a> object should only be used when
+          creating <a href="#idl-def-AudioTrack" class="idlType"><code>AudioTrack</code></a> objects.
+        </td></tr><tr><td><code id="idl-def-TrackDefaultType.video">video</code></td><td>
+          Indicates that the information in the  <a href="#idl-def-TrackDefault" class="idlType"><code>TrackDefault</code></a> object should only be used when
+          creating <a href="#idl-def-VideoTrack" class="idlType"><code>VideoTrack</code></a> objects.
+        </td></tr><tr><td><code id="idl-def-TrackDefaultType.text">text</code></td><td>
+          Indicates that the  information in the <a href="#idl-def-TrackDefault" class="idlType"><code>TrackDefault</code></a> object should only be used when
+          creating <a href="#idl-def-TextTrack" class="idlType"><code>TextTrack</code></a> objects.
+        </td></tr></tbody></table>
+
+      <pre class="idl"><span class="idlInterface" id="idl-def-TrackDefault">[<span class="idlCtor"> <span class="idlCtorKeyword"></span><span class="idlCtorName"><a href="#widl-ctor-TrackDefault--TrackDefaultType-type-DOMString-language-sequence-kinds-DOMString-byteStreamTrackID">Constructor</a></span> (<span class="idlParam"><span class="idlParamType"><a href="#idl-def-TrackDefaultType" class="idlType"><code>TrackDefaultType</code></a></span> <span class="idlParamName">type</span></span>, <span class="idlParam"><span class="idlParamType">DOMString</span> <span class="idlParamName">language</span></span>, <span class="idlParam"><span class="idlParamType">sequence</span> <span class="idlParamName">kinds</span></span>, <span class="idlParam">optional <span class="idlParamType">DOMString</span> <span class="idlParamName">byteStreamTrackID</span> = <span class="idlDefaultValue">""</span></span>)</span>]
+interface <span class="idlInterfaceID">TrackDefault</span> {
+<span class="idlAttribute">    readonly    attribute <span class="idlAttrType"><a href="#idl-def-TrackDefaultType" class="idlType"><code>TrackDefaultType</code></a></span> <span class="idlAttrName"><a href="#widl-TrackDefault-type">type</a></span>;</span>
+<span class="idlAttribute">    readonly    attribute <span class="idlAttrType">DOMString</span>        <span class="idlAttrName"><a href="#widl-TrackDefault-byteStreamTrackID">byteStreamTrackID</a></span>;</span>
+<span class="idlAttribute">    readonly    attribute <span class="idlAttrType">DOMString</span>        <span class="idlAttrName"><a href="#widl-TrackDefault-language">language</a></span>;</span>
+<span class="idlAttribute">    readonly    attribute <span class="idlAttrType">DOMString[]</span>      <span class="idlAttrName"><a href="#widl-TrackDefault-kinds">kinds</a></span>;</span>
+};</span></pre><section id="constructors"><h3 aria-level="2" role="heading" id="h3_constructors"><span class="secno">6.1 </span>Constructors</h3><dl class="constructors"><dt id="widl-ctor-TrackDefault--TrackDefaultType-type-DOMString-language-sequence-kinds-DOMString-byteStreamTrackID"><code>TrackDefault</code></dt><dd>
+          
+        <table class="parameters"><tbody><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">type</td><td class="prmType"><code><a href="#idl-def-TrackDefaultType" class="idlType"><code>TrackDefaultType</code></a></code></td><td class="prmNullFalse"><span role="img" aria-label="False">✘</span></td><td class="prmOptFalse"><span role="img" aria-label="False">✘</span></td><td class="prmDesc"></td></tr><tr><td class="prmName">language</td><td class="prmType"><code>DOMString</code></td><td class="prmNullFalse"><span role="img" aria-label="False">✘</span></td><td class="prmOptFalse"><span role="img" aria-label="False">✘</span></td><td class="prmDesc"></td></tr><tr><td class="prmName">kinds</td><td class="prmType"><code>sequence</code></td><td class="prmNullFalse"><span role="img" aria-label="False">✘</span></td><td class="prmOptFalse"><span role="img" aria-label="False">✘</span></td><td class="prmDesc"></td></tr><tr><td class="prmName">byteStreamTrackID</td><td class="prmType"><code>DOMString = ""</code></td><td class="prmNullFalse"><span role="img" aria-label="False">✘</span></td><td class="prmOptTrue"><span role="img" aria-label="True">✔</span></td><td class="prmDesc"></td></tr></tbody></table><p>When this method is invoked, the user agent must run the following steps:</p><ol class="method-algorithm">
+            <li>if <var>language</var> is not an empty string or <var>language</var> is not a BCP 47
+              language tag, then throw an <code><a href="http://dom.spec.whatwg.org/#dom-domexception-invalid_access_err">INVALID_ACCESS_ERR</a></code> and abort these steps.</li>
+            <li>
+              <dl class="switch">
+                <dt>If <var>type</var> equals <code><a href="#idl-def-TrackDefaultType.audio">"audio"</a></code>:</dt>
+                <dd>
+                  If any string in <var>kinds</var> contains a value that is not listed as applying to
+                  audio in the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-TrackList-getKind-categories">kind categories table</a></code>, then throw an
+                  <code><a href="http://dom.spec.whatwg.org/#dom-domexception-invalid_access_err">INVALID_ACCESS_ERR</a></code> and abort these steps.
+                </dd>
+                <dt>If <var>type</var> equals <code><a href="#idl-def-TrackDefaultType.video">"video"</a></code>:</dt>
+                <dd>
+                  If any string in <var>kinds</var> contains a value that is not listed as applying to
+                  video in the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-TrackList-getKind-categories">kind categories table</a></code>, then throw an
+                  <code><a href="http://dom.spec.whatwg.org/#dom-domexception-invalid_access_err">INVALID_ACCESS_ERR</a></code> and abort these steps.
+                </dd>
+
+                <dt>If <var>type</var> equals <code><a href="#idl-def-TrackDefaultType.text">"text"</a></code>:</dt>
+                <dd>
+                  If any string in <var>kinds</var> contains a value that is not listed in the
+                  <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#text-track-kind">text track kind list</a></code>, then throw an <code><a href="http://dom.spec.whatwg.org/#dom-domexception-invalid_access_err">INVALID_ACCESS_ERR</a></code>
+                  and abort these steps.
+                </dd>
+              </dl>
+            </li>
+            <li>Set the <code><a href="#widl-TrackDefault-type">type</a></code> attribute on this new object to <var>type</var>.</li>
+            <li>Set the <code><a href="#widl-TrackDefault-language">language</a></code> attribute on this new object to <var>language</var>.</li>
+            <li>Set the <code><a href="#widl-TrackDefault-kinds">kinds</a></code> attribute to on this new object <var>kinds</var>.</li>
+            <li>Set the <code><a href="#widl-TrackDefault-byteStreamTrackID">byteStreamTrackID</a></code> attribute on this new object to <var>byteStreamTrackID</var>.</li>
+          </ol></dd></dl></section><section id="attributes-4"><h3 aria-level="2" role="heading" id="h3_attributes-4"><span class="secno">6.2 </span>Attributes</h3><dl class="attributes"><dt id="widl-TrackDefault-byteStreamTrackID"><code>byteStreamTrackID</code> of type <span class="idlAttrType">DOMString</span>, readonly   </dt><dd>
+          <p>The decimal string representation of the <a href="#track-id">Track ID</a> that identifies the specific
+            track that this object should apply to. An empty string indicates that this object can be
+            used for any track of the appropriate type. (i.e. any <a href="#idl-def-AudioTrack" class="idlType"><code>AudioTrack</code></a> if
+            <code><a href="#widl-TrackDefault-type">type</a></code> equals <code><a href="#idl-def-TrackDefaultType.audio">"audio"</a></code>).</p>
+        </dd><dt id="widl-TrackDefault-kinds"><code>kinds</code> of type array of <span class="idlAttrType">DOMString</span>, readonly   </dt><dd>
+          <p>The default kinds used when an <a href="#init-segment">initialization segment</a> does not contain kind
+          information for a new track. See <a href="#sourcebuffer-init-segment-received">initialization segment received algorithm</a> for details.</p>
+        </dd><dt id="widl-TrackDefault-language"><code>language</code> of type <span class="idlAttrType">DOMString</span>, readonly   </dt><dd>
+          <p>The default language to use when an <a href="#init-segment">initialization segment</a> does not contain language
+          information for a new track. See <a href="#sourcebuffer-init-segment-received">initialization segment received algorithm</a> for details.</p>
+        </dd><dt id="widl-TrackDefault-type"><code>type</code> of type <span class="idlAttrType"><a href="#idl-def-TrackDefaultType" class="idlType"><code>TrackDefaultType</code></a></span>, readonly   </dt><dd>
+          <p>The type of track that can be constructed using the information in this object.</p>
+        </dd></dl></section>
+    </section>
+
+    <section id="trackdefaultlist" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
+      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_trackdefaultlist"><span class="secno">7. </span>TrackDefaultList Object</h2>
+      <p>TrackDefaultList is a simple container object for <a href="#idl-def-TrackDefault" class="idlType"><code>TrackDefault</code></a> objects. It provides read-only array access.</p>
+
+      <pre class="idl"><span class="idlInterface" id="idl-def-TrackDefaultList">[<span class="idlCtor"> <span class="idlCtorKeyword"></span><span class="idlCtorName"><a href="#widl-ctor-TrackDefaultList--sequence-TrackDefault--trackDefaults">Constructor</a></span> (<span class="idlParam"><span class="idlParamType">sequence&lt;<a href="#idl-def-TrackDefault" class="idlType"><code>TrackDefault</code></a>&gt;</span> <span class="idlParamName">trackDefaults</span></span>)</span>]
+interface <span class="idlInterfaceID">TrackDefaultList</span> {
+<span class="idlAttribute">    readonly    attribute <span class="idlAttrType">unsigned long</span> <span class="idlAttrName"><a href="#widl-TrackDefaultList-length">length</a></span>;</span>
+<span class="idlMethod">    <span class="idlMethType">getter</span> <span class="idlMethName"><a href="#widl-TrackDefaultList-TrackDefault-getter-unsigned-long-index">TrackDefault</a></span> (<span class="idlParam"><span class="idlParamType">unsigned long</span> <span class="idlParamName">index</span></span>);</span>
+};</span></pre><section id="constructors-1"><h3 aria-level="2" role="heading" id="h3_constructors-1"><span class="secno">7.1 </span>Constructors</h3><dl class="constructors"><dt id="widl-ctor-TrackDefaultList--sequence-TrackDefault--trackDefaults"><code>TrackDefaultList</code></dt><dd>
+          
+        <table class="parameters"><tbody><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">trackDefaults</td><td class="prmType"><code>sequence&lt;<a href="#idl-def-TrackDefault" class="idlType"><code>TrackDefault</code></a>&gt;</code></td><td class="prmNullFalse"><span role="img" aria-label="False">✘</span></td><td class="prmOptFalse"><span role="img" aria-label="False">✘</span></td><td class="prmDesc"></td></tr></tbody></table><p>When this method is invoked, the user agent must run the following steps:</p><ol class="method-algorithm">
+            <li>If <var>trackDefaults</var> contains two or more <a href="#idl-def-TrackDefault" class="idlType"><code>TrackDefault</code></a> objects with
+              the same <code><a href="#widl-TrackDefault-type">type</a></code> and have
+              <code><a href="#widl-TrackDefault-byteStreamTrackID">byteStreamTrackID</a></code> equal to an empty string, then throw an
+              <code><a href="http://dom.spec.whatwg.org/#dom-domexception-invalid_access_err">INVALID_ACCESS_ERR</a></code> and abort these steps.
+              <div class="note"><div class="note-title" aria-level="3" role="heading" id="h_note_38"><span>Note</span></div><p class="">This ensures that there is only one "byteStreamTrackID independent"
+                default for each <a href="#idl-def-TrackDefaultType" class="idlType"><code>TrackDefaultType</code></a> value.</p></div></li>
+            <li>Store a copy of <var>trackDefaults</var> in this new object so the values can be returned
+              by the accessor methods.</li>
+          </ol></dd></dl></section><section id="attributes-5"><h3 aria-level="2" role="heading" id="h3_attributes-5"><span class="secno">7.2 </span>Attributes</h3><dl class="attributes"><dt id="widl-TrackDefaultList-length"><code>length</code> of type <span class="idlAttrType">unsigned long</span>, readonly   </dt><dd>
+          <p>Indicates the number of <a href="#idl-def-TrackDefault" class="idlType"><code>TrackDefault</code></a> objects in the list.</p>
+        </dd></dl></section><section id="methods-3"><h3 aria-level="2" role="heading" id="h3_methods-3"><span class="secno">7.3 </span>Methods</h3><dl class="methods"><dt id="widl-TrackDefaultList-TrackDefault-getter-unsigned-long-index"><code>TrackDefault</code></dt><dd>
+          <p>Allows the TrackDefault objects in the list to be accessed with an array operator (i.e. []).</p>
+
+          
+        <table class="parameters"><tbody><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">index</td><td class="prmType"><code>unsigned long</code></td><td class="prmNullFalse"><span role="img" aria-label="False">✘</span></td><td class="prmOptFalse"><span role="img" aria-label="False">✘</span></td><td class="prmDesc"></td></tr></tbody></table><div><em>Return type: </em><code>getter</code></div><p>When this method is invoked, the user agent must run the following steps:</p><ol class="method-algorithm">
+            <li>If <var>index</var> is greater than or equal to the <code><a href="#widl-SourceBufferList-length">length</a></code> attribute then return undefined and abort these steps.</li>
+            <li>Return the <var>index</var>'th <a href="#idl-def-TrackDefault" class="idlType"><code>TrackDefault</code></a> object in the list.</li>
+          </ol></dd></dl></section>
+    </section>
+
     <section id="url" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
-      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_url"><span class="secno">6. </span>URL Object Extensions</h2>
+      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_url"><span class="secno">8. </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">DOMString</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 aria-level="2" role="heading" id="h3_methods-3"><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>
+};</span></pre><section id="methods-4"><h3 aria-level="2" role="heading" id="h3_methods-4"><span class="secno">8.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>
 
           
-          <div class="note"><div class="note-title" aria-level="3" role="heading" id="h_note_38"><span>Note</span></div><p class="">This algorithm is intended to mirror the behavior of the <a href="http://www.w3.org/TR/FileAPI/#dfn-createObjectURL">createObjectURL()</a>[<cite><a class="bibref" href="#bib-FILE-API">FILE-API</a></cite>] method with autoRevoke set to true.</p></div>
+          <div class="note"><div class="note-title" aria-level="3" role="heading" id="h_note_39"><span>Note</span></div><p class="">This algorithm is intended to mirror the behavior of the <a href="http://www.w3.org/TR/FileAPI/#dfn-createObjectURL">createObjectURL()</a>[<cite><a class="bibref" href="#bib-FILE-API">FILE-API</a></cite>] method with autoRevoke set to true.</p></div>
         <table class="parameters"><tbody><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">mediaSource</td><td class="prmType"><code><a href="#idl-def-MediaSource" class="idlType"><code>MediaSource</code></a></code></td><td class="prmNullFalse"><span role="img" aria-label="False">✘</span></td><td class="prmOptFalse"><span role="img" aria-label="False">✘</span></td><td class="prmDesc"></td></tr></tbody></table><div><em>Return type: </em><code>DOMString</code></div><p>When this method is invoked, the user agent must run the following steps:</p><ol class="method-algorithm">
             <li>Return a unique <a href="#mediasource-object-url">MediaSource object URL</a> that can be used to dereference the <var>mediaSource</var> argument, and run the rest of the algorithm asynchronously.</li>
             <li><a href="http://www.w3.org/TR/html5/webappapis.html#provide-a-stable-state">provide a stable state</a></li>
@@ -2251,7 +2499,7 @@
     </section>
 
     <section id="htmlmediaelement-extensions" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
-      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_htmlmediaelement-extensions"><span class="secno">7. </span>HTMLMediaElement Extensions</h2>
+      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_htmlmediaelement-extensions"><span class="secno">9. </span>HTMLMediaElement Extensions</h2>
       <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> must 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>
@@ -2284,7 +2532,7 @@
     </section>
 
     <section id="htmlvideoelement-extensions" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
-      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_htmlvideoelement-extensions"><span class="secno">8. </span>HTMLVideoElement Extensions</h2>
+      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_htmlvideoelement-extensions"><span class="secno">10. </span>HTMLVideoElement Extensions</h2>
       <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#htmlvideoelement">HTMLVideoElement</a></code>.</p>
 
       <p>Each <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#htmlvideoelement">HTMLVideoElement</a></code> will maintain a <dfn id="total-video-frame-count">total video frame count</dfn> variable that keeps
@@ -2312,7 +2560,7 @@
 
       <pre class="idl"><span class="idlInterface" id="idl-def-HTMLVideoElement">partial interface <span class="idlInterfaceID">HTMLVideoElement</span> {
 <span class="idlMethod">    <span class="idlMethType"><a href="#idl-def-VideoPlaybackQuality" class="idlType"><code>VideoPlaybackQuality</code></a></span> <span class="idlMethName"><a href="#widl-HTMLVideoElement-getVideoPlaybackQuality-VideoPlaybackQuality">getVideoPlaybackQuality</a></span> ();</span>
-};</span></pre><section id="methods-4"><h3 aria-level="2" role="heading" id="h3_methods-4"><span class="secno">8.1 </span>Methods</h3><dl class="methods"><dt id="widl-HTMLVideoElement-getVideoPlaybackQuality-VideoPlaybackQuality"><code>getVideoPlaybackQuality</code></dt><dd>
+};</span></pre><section id="methods-5"><h3 aria-level="2" role="heading" id="h3_methods-5"><span class="secno">10.1 </span>Methods</h3><dl class="methods"><dt id="widl-HTMLVideoElement-getVideoPlaybackQuality-VideoPlaybackQuality"><code>getVideoPlaybackQuality</code></dt><dd>
           <p>Provides the current the playback quality metrics.</p>
           
         <div><em>No parameters.</em></div><div><em>Return type: </em><code><a href="#idl-def-VideoPlaybackQuality" class="idlType"><code>VideoPlaybackQuality</code></a></code></div><p>When this method is invoked, the user agent must run the following steps:</p><ol class="method-algorithm">
@@ -2327,141 +2575,40 @@
     </section>
 
     <section id="audio-track-extensions" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
-      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_audio-track-extensions"><span class="secno">9. </span>AudioTrack Extensions</h2>
+      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_audio-track-extensions"><span class="secno">11. </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">DOMString</span>     <span class="idlAttrName"><a href="#widl-AudioTrack-kind">kind</a></span>;</span>
-<span class="idlAttribute">                attribute <span class="idlAttrType">DOMString</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-4"><h3 aria-level="2" role="heading" id="h3_attributes-4"><span class="secno">9.1 </span>Attributes</h3><dl class="attributes"><dt id="widl-AudioTrack-kind"><code>kind</code> of type <span class="idlAttrType">DOMString</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>
-          </p><p>On setting, run the following steps:</p>
-          <ol>
-            <li>If the value being assigned to this attribute does not match one of the <a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-TrackList-getKind-categories">kind categories</a>, then abort these steps.</li>
-            <li>Update this attribute to the new value.</li>
-            <li>If the <code><a href="#widl-AudioTrack-sourceBuffer">sourceBuffer</a></code> attribute on this track is not null, then
-              <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="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onchange">change</a></code> at
-              <code><a href="#widl-AudioTrack-sourceBuffer">sourceBuffer</a></code>.<code><a href="#widl-SourceBuffer-audioTracks">audioTracks</a></code>.
-            </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="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onchange">change</a></code> at the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#audiotracklist">AudioTrackList</a></code> object referenced by the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-audiotracks">audioTracks</a></code> attribute on the
-              HTMLMediaElement.
-            </li>
-          </ol>
-        </dd><dt id="widl-AudioTrack-language"><code>language</code> of type <span class="idlAttrType">DOMString</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-language">language</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>
-          </p><p>On setting, run the following steps:</p>
-          <ol>
-            <li>If the value being assigned to this attribute is not an empty string or a BCP 47 language tag[<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>], then abort these steps.</li>
-            <li>Update this attribute to the new value.</li>
-            <li>If the <code><a href="#widl-AudioTrack-sourceBuffer">sourceBuffer</a></code> attribute on this track is not null, then
-              <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="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onchange">change</a></code> at
-              <code><a href="#widl-AudioTrack-sourceBuffer">sourceBuffer</a></code>.<code><a href="#widl-SourceBuffer-audioTracks">audioTracks</a></code>.
-            </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="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onchange">change</a></code> at the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#audiotracklist">AudioTrackList</a></code> object referenced by the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-audiotracks">audioTracks</a></code> attribute on the
-              HTMLMediaElement.
-            </li>
-          </ol>
-        </dd><dt id="widl-AudioTrack-sourceBuffer"><code>sourceBuffer</code> of type <span class="idlAttrType"><a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a></span>, readonly   , nullable</dt><dd>
+};</span></pre><section id="attributes-6"><h3 aria-level="2" role="heading" id="h3_attributes-6"><span class="secno">11.1 </span>Attributes</h3><dl class="attributes"><dt id="widl-AudioTrack-sourceBuffer"><code>sourceBuffer</code> of type <span class="idlAttrType"><a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a></span>, readonly   , nullable</dt><dd>
           <p>Returns the <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> that created this track. Returns null if this track was not created by a <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> or the <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> has been removed from the <code><a href="#widl-MediaSource-sourceBuffers">sourceBuffers</a></code> attribute of its <a href="#parent-media-source">parent media source</a>.</p>
         </dd></dl></section>
     </section>
 
     <section id="video-track-extensions" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
-      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_video-track-extensions"><span class="secno">10. </span>VideoTrack Extensions</h2>
+      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_video-track-extensions"><span class="secno">12. </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">DOMString</span>     <span class="idlAttrName"><a href="#widl-VideoTrack-kind">kind</a></span>;</span>
-<span class="idlAttribute">                attribute <span class="idlAttrType">DOMString</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-5"><h3 aria-level="2" role="heading" id="h3_attributes-5"><span class="secno">10.1 </span>Attributes</h3><dl class="attributes"><dt id="widl-VideoTrack-kind"><code>kind</code> of type <span class="idlAttrType">DOMString</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>
-          </p><p>On setting, run the following steps:</p>
-          <ol>
-            <li>If the value being assigned to this attribute does not match one of the <a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-TrackList-getKind-categories">kind categories</a>, then abort these steps.</li>
-            <li>Update this attribute to the new value.</li>
-            <li>If the <code><a href="#widl-VideoTrack-sourceBuffer">sourceBuffer</a></code> attribute on this track is not null, then
-              <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="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onchange">change</a></code> at
-              <code><a href="#widl-VideoTrack-sourceBuffer">sourceBuffer</a></code>.<code><a href="#widl-SourceBuffer-videoTracks">videoTracks</a></code>.
-            </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="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onchange">change</a></code> at the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#videotracklist">VideoTrackList</a></code> object referenced by the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-videotracks">videoTracks</a></code> attribute on the
-              HTMLMediaElement.
-            </li>
-          </ol>
-        </dd><dt id="widl-VideoTrack-language"><code>language</code> of type <span class="idlAttrType">DOMString</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-language">language</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>
-          </p><p>On setting, run the following steps:</p>
-          <ol>
-            <li>If the value being assigned to this attribute is not an empty string or a BCP 47 language tag[<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>], then abort these steps.</li>
-            <li>Update this attribute to the new value.</li>
-            <li>If the <code><a href="#widl-VideoTrack-sourceBuffer">sourceBuffer</a></code> attribute on this track is not null, then
-              <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="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onchange">change</a></code> at
-              <code><a href="#widl-VideoTrack-sourceBuffer">sourceBuffer</a></code>.<code><a href="#widl-SourceBuffer-videoTracks">videoTracks</a></code>.
-            </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="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onchange">change</a></code> at the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#videotracklist">VideoTrackList</a></code> object referenced by the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-videotracks">videoTracks</a></code> attribute on the
-              HTMLMediaElement.
-            </li>
-          </ol>
-        </dd><dt id="widl-VideoTrack-sourceBuffer"><code>sourceBuffer</code> of type <span class="idlAttrType"><a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a></span>, readonly   , nullable</dt><dd>
+};</span></pre><section id="attributes-7"><h3 aria-level="2" role="heading" id="h3_attributes-7"><span class="secno">12.1 </span>Attributes</h3><dl class="attributes"><dt id="widl-VideoTrack-sourceBuffer"><code>sourceBuffer</code> of type <span class="idlAttrType"><a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a></span>, readonly   , nullable</dt><dd>
           <p>Returns the <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> that created this track. Returns null if this track was not created by a <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> or the <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> has been removed from the <code><a href="#widl-MediaSource-sourceBuffers">sourceBuffers</a></code> attribute of its <a href="#parent-media-source">parent media source</a>.</p>
-        </dd></dl></section></section>
+        </dd></dl></section>
+    </section>
 
     <section id="text-track-extensions" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
-      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_text-track-extensions"><span class="secno">11. </span>TextTrack Extensions</h2>
+      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_text-track-extensions"><span class="secno">13. </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">DOMString</span>     <span class="idlAttrName"><a href="#widl-TextTrack-kind">kind</a></span>;</span>
-<span class="idlAttribute">                attribute <span class="idlAttrType">DOMString</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-6"><h3 aria-level="2" role="heading" id="h3_attributes-6"><span class="secno">11.1 </span>Attributes</h3><dl class="attributes"><dt id="widl-TextTrack-kind"><code>kind</code> of type <span class="idlAttrType">DOMString</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>
-          </p><p>On setting, run the following steps:</p>
-          <ol>
-            <li>If the value being assigned to this attribute does not match one of the <a href="http://www.w3.org/TR/html5/embedded-content-0.html#text-track-kind">text track kinds</a>, then abort these steps.</li>
-            <li>Update this attribute to the new value.</li>
-            <li>If the <code><a href="#widl-TextTrack-sourceBuffer">sourceBuffer</a></code> attribute on this track is not null, then
-              <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="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onchange">change</a></code> at
-              <code><a href="#widl-TextTrack-sourceBuffer">sourceBuffer</a></code>.<code><a href="#widl-SourceBuffer-textTracks">textTracks</a></code>.
-            </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="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onchange">change</a></code> at the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#texttracklist">TextTrackList</a></code> object referenced by the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-texttracks">textTracks</a></code> attribute on the
-              HTMLMediaElement.
-            </li>
-          </ol>
-        </dd><dt id="widl-TextTrack-language"><code>language</code> of type <span class="idlAttrType">DOMString</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-language">language</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>
-          </p><p>On setting, run the following steps:</p>
-          <ol>
-            <li>If the value being assigned to this attribute is not an valid <a href="http://www.w3.org/TR/html5/embedded-content-0.html#text-track-language">text track language</a>, 
-              then abort these steps.</li>
-            <li>Update this attribute to the new value.</li>
-            <li>If the <code><a href="#widl-TextTrack-sourceBuffer">sourceBuffer</a></code> attribute on this track is not null, then
-              <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="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onchange">change</a></code> at
-              <code><a href="#widl-TextTrack-sourceBuffer">sourceBuffer</a></code>.<code><a href="#widl-SourceBuffer-textTracks">textTracks</a></code>.
-            </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="http://www.w3.org/TR/html5/embedded-content-0.html#handler-tracklist-onchange">change</a></code> at the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#texttracklist">TextTrackList</a></code> object referenced by the <code><a href="http://www.w3.org/TR/html5/embedded-content-0.html#dom-media-texttracks">textTracks</a></code> attribute on the
-              HTMLMediaElement.
-            </li>
-          </ol>
-        </dd><dt id="widl-TextTrack-sourceBuffer"><code>sourceBuffer</code> of type <span class="idlAttrType"><a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a></span>, readonly   , nullable</dt><dd>
+};</span></pre><section id="attributes-8"><h3 aria-level="2" role="heading" id="h3_attributes-8"><span class="secno">13.1 </span>Attributes</h3><dl class="attributes"><dt id="widl-TextTrack-sourceBuffer"><code>sourceBuffer</code> of type <span class="idlAttrType"><a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a></span>, readonly   , nullable</dt><dd>
           <p>Returns the <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> that created this track. Returns null if this track was not created by a <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> or the <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> has been removed from the <code><a href="#widl-MediaSource-sourceBuffers">sourceBuffers</a></code> attribute of its <a href="#parent-media-source">parent media source</a>.</p>
-        </dd></dl></section></section>
+        </dd></dl></section>
+    </section>
 
     <section id="byte-stream-formats" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
-      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_byte-stream-formats"><span class="secno">12. </span>Byte Stream Formats</h2>
+      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_byte-stream-formats"><span class="secno">14. </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 and
         semantics of these byte streams are defined in <dfn id="byte-stream-format-specs">byte stream format specifications</dfn>. 
         The byte stream format registry [<cite><a class="bibref" href="#bib-MSE-REGISTRY">MSE-REGISTRY</a></cite>] provides mappings between a MIME type that may be passed to <code><a href="#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type">addSourceBuffer()</a></code> or
@@ -2469,9 +2616,9 @@
         mappings for byte stream formats they support to facilitate interoperability. The byte stream format registry [<cite><a class="bibref" href="#bib-MSE-REGISTRY">MSE-REGISTRY</a></cite>] is the authoritative source for these
         mappings. If an implementation claims to support a MIME type listed in the registry, its <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> implementation must conform to the
         <a href="#byte-stream-format-specs">byte stream format specification</a> listed in the registry entry.</p>
-      <div class="note"><div class="note-title" aria-level="2" role="heading" id="h_note_39"><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
+      <div class="note"><div class="note-title" aria-level="2" role="heading" id="h_note_40"><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" aria-level="2" role="heading" id="h_note_40"><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>
+      <div class="note"><div class="note-title" aria-level="2" role="heading" id="h_note_41"><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 format specifications:</p>
       <ul>
@@ -2481,12 +2628,12 @@
           <ol>
             <li>
               <p>The number and type of tracks are not consistent.</p>
-              <div class="note"><div class="note-title" aria-level="2" role="heading" id="h_note_41"><span>Note</span></div><p class="">For example, if the first <a href="#init-segment">initialization segment</a> has 2 audio tracks and 1 video track, then all <a href="#init-segment">initialization segments</a> that follow it in the byte stream must describe 2 audio tracks and 1 video track.</p></div>
+              <div class="note"><div class="note-title" aria-level="2" role="heading" id="h_note_42"><span>Note</span></div><p class="">For example, if the first <a href="#init-segment">initialization segment</a> has 2 audio tracks and 1 video track, then all <a href="#init-segment">initialization segments</a> that follow it in the byte stream must describe 2 audio tracks and 1 video track.</p></div>
             </li>
             <li><a href="#track-id">Track IDs</a> are not the same across <a href="#init-segment">initialization segments</a>, for segments describing multiple tracks of a single type. (e.g. 2 audio tracks).</li>
 	    <li>
               <p>Codecs changes across <a href="#init-segment">initialization segments</a>.</p>
-              <div class="note"><div class="note-title" aria-level="2" role="heading" id="h_note_42"><span>Note</span></div><p class="">For example, a byte stream that starts with an <a href="#init-segment">initialization segment</a> that specifies a single AAC track and later contains an <a href="#init-segment">initialization segment</a> that specifies a single AMR-WB track is not allowed. Support for multiple codecs is handled with multiple <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> objects.</p></div>
+              <div class="note"><div class="note-title" aria-level="2" role="heading" id="h_note_43"><span>Note</span></div><p class="">For example, a byte stream that starts with an <a href="#init-segment">initialization segment</a> that specifies a single AAC track and later contains an <a href="#init-segment">initialization segment</a> that specifies a single AMR-WB track is not allowed. Support for multiple codecs is handled with multiple <a href="#idl-def-SourceBuffer" class="idlType"><code>SourceBuffer</code></a> objects.</p></div>
             </li>
           </ol>
         </li>
@@ -2495,11 +2642,11 @@
             <li><a href="#track-id">Track IDs</a> changing across <a href="#init-segment">initialization segments</a> if the segments describes only one track of each type.</li>
 	    <li>
               <p>Video frame size changes. The user agent must support seamless playback.</p>
-              <div class="note"><div class="note-title" aria-level="2" role="heading" id="h_note_43"><span>Note</span></div><p class="">This will cause the &lt;video&gt; display region to change size if the web application does not use CSS or HTML attributes (width/height) to constrain the element size.</p></div>
+              <div class="note"><div class="note-title" aria-level="2" role="heading" id="h_note_44"><span>Note</span></div><p class="">This will cause the &lt;video&gt; display region to change size if the web application does not use CSS or HTML attributes (width/height) to constrain the element size.</p></div>
             </li>
 	    <li>
               <p>Audio channel count changes. The user agent may support this seamlessly and could trigger downmixing.</p>
-              <div class="note"><div class="note-title" aria-level="2" role="heading" id="h_note_44"><span>Note</span></div><p class="">This is a quality of implementation issue because changing the channel count may require reinitializing the audio device, resamplers, and channel mixers which tends to be audible.</p></div>
+              <div class="note"><div class="note-title" aria-level="2" role="heading" id="h_note_45"><span>Note</span></div><p class="">This is a quality of implementation issue because changing the channel count may require reinitializing the audio device, resamplers, and channel mixers which tends to be audible.</p></div>
             </li>
           </ol>
         </li>
@@ -2507,7 +2654,7 @@
           <ol>
             <li>Map all timestamps to the same <a href="http://www.w3.org/TR/html5/embedded-content-0.html#media-timeline">media timeline</a>.</li>
             <li>Support seamless playback of <a href="#media-segment">media segments</a> having a timestamp gap smaller than the audio frame size. User agent must not reflect these gaps in the <code><a href="#widl-SourceBuffer-buffered">buffered</a></code> attribute.
-	      <div class="note"><div class="note-title" aria-level="2" role="heading" id="h_note_45"><span>Note</span></div><p class="">This is intended to simplify switching between audio streams where the frame boundaries don't always line up across encodings (e.g. Vorbis).</p></div>
+	      <div class="note"><div class="note-title" aria-level="2" role="heading" id="h_note_46"><span>Note</span></div><p class="">This is intended to simplify switching between audio streams where the frame boundaries don't always line up across encodings (e.g. Vorbis).</p></div>
             </li>
           </ol>
         </li>
@@ -2535,7 +2682,7 @@
     </section>
 
     <section id="examples" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
-      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_examples"><span class="secno">13. </span>Examples</h2>
+      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_examples"><span class="secno">15. </span>Examples</h2>
       <p>Example use of the Media Source Extensions</p>
       <div class="block">
         <div class="blockContent">
@@ -2634,12 +2781,12 @@
     </section>
 
     <section id="acknowledgements" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
-      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_acknowledgements"><span class="secno">14. </span>Acknowledgments</h2>
+      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_acknowledgements"><span class="secno">16. </span>Acknowledgments</h2>
       The editors would like to thank Alex Giladi, Bob Lund, Chris Poole, Cyril Concolato, David Dorwin, David Singer, Duncan Rowden, Frank Galligan, Glenn Adams, Jerry Smith, Joe Steele, John Simmons, Kevin Streeter, Mark Vickers, Matt Ward, Michael Thornburgh, Philip Jägenstedt, Pierre Lemieux, Ralph Giles, Steven Robertson, and Tatsuya Igarashi for their contributions to this specification.
     </section>
 
     <section id="revision-history" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter">
-      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_revision-history"><span class="secno">15. </span>Revision History</h2>
+      <!--OddPage--><h2 aria-level="1" role="heading" id="h2_revision-history"><span class="secno">17. </span>Revision History</h2>
       <table class="old-table">
         <thead>
           <tr>
@@ -2649,7 +2796,15 @@
         </thead>
         <tbody>
           <tr>
-            <td>20 May 2014</td>
+            <td>21 May 2014</td>
+            <td>
+              <ul>
+                <li>Bug 24370 - Add TrackDefault object and remove kind/language overloads.</li>
+              </ul>
+            </td>
+          </tr>
+          <tr>
+            <td><a href="https://dvcs.w3.org/hg/html-media/raw-file/3e8dfccbfded/media-source/media-source.html">20 May 2014</a></td>
             <td>
               <ul>
                 <li>Bug 25518 - Make remove() end parameter an unrestricted double.</li>
@@ -3129,8 +3284,7 @@
     </section>
   
 
-<form id="bug-assist-form" action="//www.w3.org/Bugs/Public/enter_bug.cgi" target="_blank">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><section id="references" class="appendix" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter"><!--OddPage--><h2 aria-level="1" role="heading" id="h2_references"><span class="secno">A. </span>References</h2><section id="normative-references" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter"><h3 aria-level="2" role="heading" id="h3_normative-references"><span class="secno">A.1 </span>Normative references</h3><dl class="bibliography" about=""><dt id="bib-BCP47">[BCP47]</dt><dd rel="dcterms:requires">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 rel="dcterms:requires">Arun Ranganathan; Jonas Sicking. <a href="http://www.w3.org/TR/FileAPI/"><cite>File API</cite></a>. 12 September 2013. W3C Last Call Working Draft. URL: <a href="http://www.w3.org/TR/FileAPI/">http://www.w3.org/TR/FileAPI/</a>
+<form id="bug-assist-form" action="//www.w3.org/Bugs/Public/enter_bug.cgi" target="_blank">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><section id="references" class="appendix" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter"><!--OddPage--><h2 aria-level="1" role="heading" id="h2_references"><span class="secno">A. </span>References</h2><section id="normative-references" typeof="bibo:Chapter" resource="#ref" rel="bibo:Chapter"><h3 aria-level="2" role="heading" id="h3_normative-references"><span class="secno">A.1 </span>Normative references</h3><dl class="bibliography" about=""><dt id="bib-FILE-API">[FILE-API]</dt><dd rel="dcterms:requires">Arun Ranganathan; Jonas Sicking. <a href="http://www.w3.org/TR/FileAPI/"><cite>File API</cite></a>. 12 September 2013. W3C Last Call Working Draft. URL: <a href="http://www.w3.org/TR/FileAPI/">http://www.w3.org/TR/FileAPI/</a>
 </dd><dt id="bib-HTML5">[HTML5]</dt><dd rel="dcterms:requires">Robin Berjon; Steve Faulkner; Travis Leithead; Erika Doyle Navara; Edward O'Connor; Silvia Pfeiffer. <a href="http://www.w3.org/TR/html5/"><cite>HTML5</cite></a>. 29 April 2014. W3C Candidate Recommendation. URL: <a href="http://www.w3.org/TR/html5/">http://www.w3.org/TR/html5/</a>
 </dd><dt id="bib-STREAMS-API">[STREAMS-API]</dt><dd rel="dcterms:requires">Feras Moussa; Takeshi Yoshino. <a href="http://www.w3.org/TR/2013/WD-streams-api-20131105/"><cite>Streams API</cite></a>. W3C Working Draft. URL: <a href="http://www.w3.org/TR/2013/WD-streams-api-20131105/">http://www.w3.org/TR/2013/WD-streams-api-20131105/</a>
 </dd><dt id="bib-TYPED-ARRAYS">[TYPED-ARRAYS]</dt><dd rel="dcterms:requires">David Herman; Kenneth Russell. <a href="https://www.khronos.org/registry/typedarray/specs/latest/"><cite>Typed Array Specification</cite></a>. 26 June 2013. Khronos Working Draft. URL: <a href="https://www.khronos.org/registry/typedarray/specs/latest/">https://www.khronos.org/registry/typedarray/specs/latest/</a>
--- a/media-source/media-source.js	Tue May 20 09:55:22 2014 -0700
+++ b/media-source/media-source.js	Tue May 20 15:00:59 2014 -0700
@@ -146,6 +146,7 @@
     'AppendMode-segments': { func: idlref_helper, fragment: 'idl-def-AppendMode.segments', link_text: '"segments"',  },
     'AppendMode-sequence': { func: idlref_helper, fragment: 'idl-def-AppendMode.sequence', link_text: '"sequence"',  },
     'mode': { func: idlref_helper, fragment: 'widl-SourceBuffer-mode', link_text: 'mode',  },
+    'trackDefaults': { func: idlref_helper, fragment: 'widl-SourceBuffer-trackDefaults', link_text: 'trackDefaults',  },
 
     'length': { func: idlref_helper, fragment: 'widl-SourceBufferList-length', link_text: 'length',  },
     'creationTime': { func: idlref_helper, fragment: 'widl-VideoPlaybackQuality-creationTime', link_text: 'creationTime',  },
@@ -225,6 +226,8 @@
     'audio-splice-frame-algorithm': { func: link_helper, fragment: '#sourcebuffer-audio-splice-frame-algorithm', link_text: 'audio splice frame algorithm', },
     'audio-splice-rendering-algorithm': { func: link_helper, fragment: '#sourcebuffer-audio-splice-rendering-algorithm', link_text: 'audio splice rendering algorithm', },
     'text-splice-frame-algorithm': { func: link_helper, fragment: '#sourcebuffer-text-splice-frame-algorithm', link_text: 'text splice frame algorithm', },
+    'default-track-language-algorithm': { func: link_helper, fragment: '#sourcebuffer-default-track-language', link_text: 'default track language algorithm', },
+    'default-track-kinds-algorithm': { func: link_helper, fragment: '#sourcebuffer-default-track-kinds', link_text: 'default track kinds algorithm', },
     'input-buffer': { func: var_helper, fragment: '#sourcebuffer-input-buffer', link_text: 'input buffer', },
     'buffer-full-flag': { func: var_helper, fragment: '#sourcebuffer-buffer-full-flag', link_text: 'buffer full flag', },
     'group-start-timestamp': { func: var_helper, fragment: '#sourcebuffer-group-start-timestamp', link_text: 'group start timestamp', },
@@ -240,6 +243,14 @@
     'highest-presentation-timestamp': { func: var_helper, fragment: '#highest-presentation-timestamp', link_text: 'highest presentation timestamp', },
     'need-RAP-flag': { func: var_helper, fragment: '#need-RAP-flag', link_text: 'need random access point flag', },
 
+    'TrackDefaultType-audio': { func: idlref_helper, fragment: 'idl-def-TrackDefaultType.audio', link_text: '"audio"',  },
+    'TrackDefaultType-video': { func: idlref_helper, fragment: 'idl-def-TrackDefaultType.video', link_text: '"video"',  },
+    'TrackDefaultType-text': { func: idlref_helper, fragment: 'idl-def-TrackDefaultType.text', link_text: '"text"',  },
+    'TrackDefault-type': { func: idlref_helper, fragment: 'widl-TrackDefault-type', link_text: 'type',  },
+    'TrackDefault-byteStreamTrackID': { func: idlref_helper, fragment: 'widl-TrackDefault-byteStreamTrackID', link_text: 'byteStreamTrackID',  },
+    'TrackDefault-language': { func: idlref_helper, fragment: 'widl-TrackDefault-language', link_text: 'language',  },
+    'TrackDefault-kinds': { func: idlref_helper, fragment: 'widl-TrackDefault-kinds', link_text: 'kinds',  },
+
     'blob-uri': { func: fileapi_helper, fragment: 'url', link_text: 'Blob URI',  },
     'File': { func: fileapi_helper, fragment: 'dfn-file', link_text: 'File', },
     'Blob': { func: fileapi_helper, fragment: 'dfn-Blob', link_text: 'Blob',  },
@@ -279,10 +290,13 @@
     'audiotrack-language': { func: code_videoref_helper, fragment: 'dom-audiotrack-language', link_text: 'language', },
     'audiotrack-enabled': { func: code_videoref_helper, fragment: 'dom-audiotrack-enabled', link_text: 'enabled', },
     'audiotrack-sourceBuffer': { func: idlref_helper, fragment: 'widl-AudioTrack-sourceBuffer', link_text: 'sourceBuffer', },
+    'av-kind-categories-table': { func: code_videoref_helper, fragment: 'dom-TrackList-getKind-categories', link_text: 'kind categories table', },
+    'text-track-kind-list': { func: code_videoref_helper, fragment: 'text-track-kind', link_text: 'text track kind list', },
     'text-track': { func: code_videoref_helper, fragment: 'texttrack', link_text: 'TextTrack',  },
     'text-track-list': { func: code_videoref_helper, fragment: 'texttracklist', link_text: 'TextTrackList', },
     'texttracks': { func: code_videoref_helper, fragment: 'dom-media-texttracks', link_text: 'textTracks', },
     'texttrack-mode': { func: code_videoref_helper, fragment: 'dom-texttrack-mode', link_text: 'mode',  },
+    'texttrack-id': { func: code_videoref_helper, fragment: 'dom-texttrack-id', link_text: 'id', },
     'texttrack-kind': { func: code_videoref_helper, fragment: 'dom-texttrack-kind', link_text: 'kind', },
     'texttrack-language': { func: code_videoref_helper, fragment: 'dom-texttrack-language', link_text: 'language', },
     'texttrack-showing': { func: code_videoref_helper, fragment: 'dom-texttrack-showing', link_text: '"showing"', },