- From: Anant Narayanan via cvs-syncmail <cvsmail@w3.org>
- Date: Mon, 13 Aug 2012 18:38:01 +0000
- To: public-dap-commits@w3.org
Update of /sources/public/2011/webrtc/editor In directory hutz:/tmp/cvs-serv20471/editor Modified Files: getusermedia.html Log Message: Updating draft to github version getusermedia-20120813.html Index: getusermedia.html =================================================================== RCS file: /sources/public/2011/webrtc/editor/getusermedia.html,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- getusermedia.html 25 Jun 2012 06:23:24 -0000 1.11 +++ getusermedia.html 13 Aug 2012 18:37:59 -0000 1.12 @@ -7,35 +7,14 @@ <link href="getusermedia.css" rel="stylesheet" type="text/css"> <title>Media Capture and Streams</title> - <meta content="text/html; charset=utf-8" http-equiv="Content-Type"><!-- - === NOTA BENE === - For the three scripts below, if your spec resides on dev.w3 you can - check them out in the same tree and use relative links so that they'll - work offline. - - To generate the dated version of the specification: - - Open this doc in Mozilla. - - Do a CTRL-ALT-SHIFT-S - - Select "XHMTL( source)" from dialog box. This will pop a new tab with - genreated version of the document. - - This will open a new tab with generated html. Copy and paste this to - a new file. Note if you use Chrome or Safari, this step will not - work. What will happen is the paste will have th original document, - not what was displayed in the window that you did the copy on. - - Rename the new file to the correct day such as - getusermedia-20111003.html then search for and edit the links for - "This version" and "Previos version". Add the new file into git and - check in. - - Once everyone is happy, the getusermedia.html and - getusermedia-20111003.html files can be coppied to - getusermedia.html and getusermedia-20111003.html - respectively in the ../editor/. W3C directory. + <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> + <!-- + After making changes to this document in the github repo, run: + ./publish.sh getusermedia.html + to publish a new editor's draft to the W3C CVS. This assumes your + CVS checkout is located at ../2011/webrtc, you can specify the location + as the second argument, for example: + ./publish.sh getusermedia.html ~/path/to/w3/2011/webrtc --> <script class="remove" src="http://www.w3.org/Tools/respec/respec-w3c-common" @@ -73,7 +52,7 @@ </section> <section class="informative" id="intro"> - <h1>Introduction</h1> + <h2>Introduction</h2> <p>Access to multimedia streams (video, audio, or both) from local devices (video cameras, microphones, Web cams) can have a number of uses, such as @@ -85,11 +64,45 @@ process it.</p> </section> +<section id="conformance"> + <p> + This specification defines conformance criteria that apply to a single + product: the <dfn>user agent</dfn> that implements the + interfaces that it contains. + </p> + <p> + Implementations that use ECMAScript to implement the APIs defined in + this specification must implement them in a manner consistent with the + ECMAScript Bindings defined in the Web IDL specification [[!WEBIDL]], + as this specification uses that specification and terminology. + </p> + </section> + <section> + <h2>Terminology</h2> + <p> + The <code><a href="http://dev.w3.org/html5/spec/webappapis.html#eventhandler"> + EventHandler</a></code> interface represents a callback used for event + handlers as defined in [[!HTML5]]. + </p> + <p> + The concepts <dfn><a href="http://dev.w3.org/html5/spec/webappapis.html#queue-a-task"> + queue a task</a></dfn> and + <dfn><a href="http://dev.w3.org/html5/spec/webappapis.html#fire-a-simple-event"> + fires a simple event</a></dfn> are defined in [[!HTML5]]. + </p> + <p> + The terms <dfn><a href="http://dev.w3.org/html5/spec/webappapis.html#event-handlers"> + event handlers</a></dfn> and + <dfn><a href="http://dev.w3.org/html5/spec/webappapis.html#event-handler-event-type"> + event handler event types</a></dfn> are defined in [[!HTML5]]. + </p> + </section> + <section id="stream-api"> - <h1>Stream API</h1> + <h2>Stream API</h2> <section> - <h1>Introduction</h1> + <h2>Introduction</h2> <p>The <code><a>MediaStream</a></code> interface is used to represent streams of media data, typically (but not necessarily) of audio and/or @@ -169,29 +182,29 @@ </section> <section> - <h1>MediaStream</h1> + <h2>MediaStream</h2> - <p>The <dfn id="dom-mediastream"><code>MediaStream()</code></dfn> - constructor takes two arguments. The arguments are two lists with - <code><a>MediaStreamTrack</a></code> objects which will be used to - construct the audio and video track lists of the new - <code><a>MediaStream</a></code> object. When the constructor is invoked, - the UA must run the following steps:</p> + <p>The <dfn id="dom-mediastream"> <code>MediaStream()</code></dfn> + constructor takes zero or one argument. If the argument, + <var>trackContainers</var>, is supplied, it specifies a list of <code> + <a>MediaStream</a></code>, <code><a>MediaStreamTrackList</a></code> and + <code><a>MediaStreamTrack</a></code> objects. The list objects specifies + existing tracks whose sources will be used to constuct the tracks in the + new <code><a>MediaStream</a></code> object. A <code> + <a>MediaStreamTrack</a></code> object specifies a track directly, while + <code><a>MediaStream</a></code> and <code><a>MediaStreamTrackList</a> + </code> objects specifiy all tracks contained within these objects. When + the constructor is invoked, the UA must run the following steps:</p> <ol> <li> - <p>Let <var>audioTracks</var> be the constructor’s first - argument.</p> - </li> - - <li> - <p>Let <var>videoTracks</var> be the constructor’s second - argument.</p> + <p>Let <var>trackContainers</var> be the constructor’s argument, if + any, or null otherwise.</p> </li> <li> - <p>Let <var>stream</var> be a newly constructed - <code><a>MediaStream</a></code> object.</p> + <p>Let <var>stream</var> be a newly constructed <code> + <a>MediaStream</a></code> object.</p> </li> <li> @@ -200,53 +213,81 @@ </li> <li> - <p>If <var>audioTracks</var> is not null, then run the following sub - steps for each element <var>track</var> in - <var>audioTracks</var>:</p> + <p>If <var>trackContainers</var> is not null, then run the following + sub steps for every element, <var>trackContainer</var>, in + <var>trackContainers</var>:</p> + </li> - <ol> + <ol> <li> - <p>If <var>track</var> is of any other kind than - "<code>audio</code>", then throw a <code>SyntaxError</code> - exception.</p> + <p>If <var>trackContainer</var> is null, then abort these steps + and continue with the next element.</p> </li> <li> - <p>If <var>track</var> has the same underlying source as another - element in <var>stream’s</var> audio track list, then abort these - steps.</p> + <p>If <var>trackContainer</var> is of type <code> + <a>MediaStreamTrack</a></code>, then run the following sub + steps:</p> </li> - <li> - <p>Add <var>track</var> to <var>stream’s</var> audio track - list.</p> - </li> - </ol> - </li> + <ol> + <li> + <p><em>Add track</em>: Let <var>track</var> be the <code> + <a>MediaStreamTrack</a></code> about to be processed.</p> + </li> - <li> - <p>If <var>videoTracks</var> is not null, then run the following sub - steps for each element <var>track</var> in - <var>videoTracks</var>:</p> + <li> + <p>If <var>track’s</var> kind attribute is not + "<code>audio</code>" or "<code>video</code>", then throw a + <code>SyntaxError</code> exception.</p> + </li> + + <li> + <p>If <var>track</var> has <a>ended</a> or if there is already + a <code><a>MediaStreamTrack</a></code> contained within + <var>stream</var> that has the same underlying source as + <var>track</var>, then abort these steps. + </p> + </li> + + <li> + <p>Create a new <code><a>MediaStreamTrack</a></code> object + and let it inherit <var>track’s</var> underlying source, + <code><a href="#dom-mediastreamtrack-kind">kind</a></code> and + <code><a href="#dom-mediastreamtrack-label">label</a></code> + attributes. Append the new <code><a>MediaStreamTrack</a> + </code> to the corresponding track list + (<code><a href="#dom-mediastream-audiotracks">audioTracks</a> + </code> or <code> + <a href="#dom-mediastream-videotracks">videoTracks</a></code>) + in <var>stream</var> according to kind.</p> + </li> + </ol> - <ol> <li> - <p>If <var>track</var> is of any other kind than - "<code>video</code>", then throw a <code>SyntaxError</code> - exception.</p> + <p>If <var>trackContainer</var> is of type <code> + <a>MediaStreamTrackList</a></code>, then run the sub steps + labeled <em>Add track</em> (above) for every <code> + <a>MediaStreamTrack</a></code> in <var>trackContainer</var>.</p> </li> <li> - <p>If <var>track</var> has the same underlying source as another - element in <var>stream’s</var> video track list, then abort these - steps.</p> + <p>If <var>trackContainer</var> is of type <code> + <a>MediaStream</a></code>, then run the sub steps labeled + <em>Add track</em> (above) for every <code> + <a>MediaStreamTrack</a></code> in <var>trackContainer’s</var> + two track lists + (<code><a href="#dom-mediastream-audiotracks">audioTracks</a> + </code> and <code> + <a href="#dom-mediastream-videotracks">videoTracks</a></code>). + </p> </li> - <li> - <p>Add <var>track</var> to <var>stream’s</var> video track - list.</p> </li> - </ol> + </ol> + + <li> + <p>Return <var>stream</var>.</p> </li> </ol> @@ -314,8 +355,13 @@ interaction task source. Otherwise the task source for this <span title= "concept-task">task</span> is the networking task source.</p> - <dl class="idl" title= - "[Constructor (MediaStreamTrackList? audioTracks, MediaStreamTrackList? videoTracks)] interface MediaStream"> + <p class="note">The union type we want to express here is not supported + by ReSpec at the moment. Until it is supported, let + <code>TracksUnionType</code> be defined as <code>(MediaStream? or + MediaStreamTrackList or MediaStreamTrack)[]</code>.</p> + + <dl class="idl" + title="[Constructor (TracksUnionType? trackContainers)] interface MediaStream"> <dt>readonly attribute DOMString label</dt> <dd> @@ -333,8 +379,7 @@ <p>When a <code><a>MediaStream</a></code> is created from another using the <code><a href="#dom-mediastream">MediaStream()</a></code> - constructor, the <code title="dom-MediaStream-label"><a href= - "#dom-mediastream-label">label</a></code> attribute is initialized to + constructor, the <code><a>label</a></code> attribute is initialized to a newly generated value.</p><!-- described above --> <p>The <dfn id="dom-mediastream-label"><code>label</code></dfn> @@ -391,7 +436,7 @@ to true.</p> </dd> - <dt>attribute Function? onended</dt> + <dt>attribute EventHandler onended</dt> <dd>This event handler, of type <code><a href= "#event-mediastream-ended">ended</a></code>, MUST be supported by all @@ -403,7 +448,7 @@ </section> <section> - <h1>LocalMediaStream</h1> + <h2>LocalMediaStream</h2> <p>Before the web application can access the user's media input devices it must let <code><a href= @@ -471,7 +516,7 @@ </section> <section> - <h1>MediaStreamTrack</h1> + <h2>MediaStreamTrack</h2> <p>A <code><a>MediaStreamTrack</a></code> object represents a media source in the user agent. Several <code><a>MediaStreamTrack</a></code> @@ -652,21 +697,21 @@ (1).</p> </dd> - <dt>attribute Function? onmute</dt> + <dt>attribute EventHandler onmute</dt> <dd>This event handler, of type <code><a href= "#event-mediastreamtrack-muted">muted</a></code>, MUST be supported by all objects implementing the <code><a>MediaStreamTrack</a></code> interface.</dd> - <dt>attribute Function? onunmute</dt> + <dt>attribute EventHandler onunmute</dt> <dd>This event handler, of type <code><a href= "#event-mediastreamtrack-unmuted">unmuted</a></code>, MUST be supported by all objects implementing the <code><a>MediaStreamTrack</a></code> interface.</dd> - <dt>attribute Function? onended</dt> + <dt>attribute EventHandler onended</dt> <dd>This event handler, of type <code><a href= "#event-mediastreamtrack-ended">ended</a></code>, MUST be supported by @@ -676,7 +721,7 @@ </section> <section> - <h1>URL</h1> + <h2>URL</h2> <dl class="idl" title="partial interface URL"> <dt>static DOMString createObjectURL (MediaStream stream)</dt> @@ -706,7 +751,7 @@ </section> <section> - <h1>MediaStreamTrackList</h1> + <h2>MediaStreamTrackList</h2> <p>A <code><a>MediaStreamTrackList</a></code> object’s <dfn id= "concept-track-list-corresponding-stream">corresponding</dfn> @@ -812,14 +857,14 @@ </ol> </dd> - <dt>attribute Function? onaddtrack</dt> + <dt>attribute EventHandler onaddtrack</dt> <dd>This event handler, of type <code><a href= "#event-mediastreamtracklist-addtrack">addtrack</a></code>, MUST be supported by all objects implementing the <code><a>MediaStreamTrackList</a></code> interface.</dd> - <dt>attribute Function? onremovetrack</dt> + <dt>attribute EventHandler onremovetrack</dt> <dd>This event handler, of type <code><a href= "#event-mediastreamtracklist-removetrack">removetrack</a></code>, MUST @@ -829,21 +874,21 @@ </section> <section> - <h1>MediaStreams as Media Elements</h1> + <h2>MediaStreams as Media Elements</h2> - <p>A MediaStream may be assigned to media elements as defined in <a href= - "http://www.w3.org/TR/html5/media-elements.html#media-elements">HTML5</a> - by calling createObjectURL to obtain a URL for the MediaStream and then - setting the media elements 'src' attribute to that url. A MediaStream is + <p>A <code>MediaStream</code> may be assigned to media elements as defined in <a href= + "http://www.w3.org/TR/html5/media-elements.html#media-elements">HTML5</a> [[!HTML5]] + by calling <code><a>createObjectURL</a></code> to obtain a URL for the <code>MediaStream</code> and then + setting the media elements <code>src</code> attribute to that URL. A <code>MediaStream</code> is not preloadable or seekable and represents a simple, potentially infinite, linear media timeline. The timeline starts at 0 and increments linearly - in real time as long as the MediaStream is playing. The timeline does not - increment when the MediaStream is paused.</p> + in real time as long as the <code>MediaStream</code> is playing. The timeline does not + increment when the <code>MediaStream</code> is paused.</p> <p class="issue">Do we also need to support direct assignment and access of the underlying stream?</p> - <p>The nature of the MediaStream places certain restrictions on the + <p>The nature of the <code>MediaStream</code> places certain restrictions on the behavior and attribute values of the associated media element and on the operations that can be performed on it, as shown below:</p> @@ -853,17 +898,15 @@ media element load algorithm</a>, reaches the <a href= "http://www.w3.org/TR/html5/media-elements.html#concept-media-load-resource"> resource fetch phase</a> of this algorithm and determines that the - media resource in question is a MediaStream, it <em class="rfc2119" - title="must">must</em> immediately abort the <a href= + media resource in question is a MediaStream, it MUST immediately abort the <a href= "http://www.w3.org/TR/html5/media-elements.html#concept-media-load-algorithm"> resource selection algorithm</a>, setting the <a href= "http://www.w3.org/TR/html5/media-elements.html#dom-media-readystate"> <code>media.readystate</code></a> to HAVE_ENOUGH_DATA. </li> - <li>The UA <em class="rfc2119" title="must">must not</em> buffer data - from a MediaStream. When playing, the UA <em class="rfc2119" title= - "must">must</em> always play the current data from the stream.</li> + <li>The UA MUST NOT buffer data + from a MediaStream. When playing, the UA MUST always play the current data from the stream.</li> </ul> <table summary= @@ -920,7 +963,7 @@ <td><code>DOMString</code></td> - <td>'None'</td> + <td><code>none</code></td> <td>A MediaStream cannot be preloaded.</td> </tr> @@ -928,7 +971,7 @@ <tr> <td> <a href= - "http://www.w3.org/TR/html5/media-elements.html#attr-media-buffered" + "http://www.w3.org/TR/html5/media-elements.html#dom-media-buffered" class="externalDFN"><code>buffered</code></a> </td> @@ -938,12 +981,9 @@ class="externalDFN"><code>TimeRanges</code></a> </td> - <td><code>buffered.length</code> <em class="rfc2119" title= - "must">must</em> return <code>1</code>.<br> - <code>buffered.start(0)</code> <em class="rfc2119" title= - "must">must</em> return <code>0</code>.<br> - <code>buffered.end(0)</code> <em class="rfc2119" title= - "must">must</em> return <code>0</code>.<br></td> + <td><code>buffered.length</code> MUST return <code>1</code>.<br> + <code>buffered.start(0)</code> MUST return <code>0</code>.<br> + <code>buffered.end(0)</code> MUST return <code>0</code>.<br></td> <td>A MediaStream cannot be preloaded. Therefore, the amount buffered is always an empty TimeRange.</td> @@ -963,7 +1003,7 @@ playing.</td> <td>The value is the current stream position, in seconds. The UA - <em class="rfc2119" title="must">must</em> ignore attempts to set + MUST ignore attempts to set this attribute.</td> </tr> @@ -981,8 +1021,7 @@ <td> A MediaStream does not have a pre-defined duration. - <p>If the underlying MediaStream is destroyed, the UA <em class= - "rfc2119" title="must">must</em> set this property to the value + <p>If the underlying MediaStream is destroyed, the UA MUST set this property to the value of the last known <code>currentTime</code>.</p> </td> </tr> @@ -999,7 +1038,7 @@ <td>false</td> <td>A MediaStream is not seekable. Therefore, this attribute - <em class="rfc2119" title="must">must</em> always have the value + MUST always have the value <code>false</code>.</td> </tr> @@ -1015,9 +1054,8 @@ <td>1.0</td> <td>A MediaStream is not seekable. Therefore, this attribute - <em class="rfc2119" title="must">must</em> always have the value - <code>1.0</code> and any attempt to alter it <em class="rfc2119" - title="must">must</em> fail.</td> + MUST always have the value + <code>1.0</code> and any attempt to alter it MUST fail.</td> </tr> <tr> @@ -1032,9 +1070,8 @@ <td>1.0</td> <td>A MediaStream is not seekable. Therefore, this attribute - <em class="rfc2119" title="must">must</em> always have the value - <code>1.0</code> and any attempt to alter it <em class="rfc2119" - title="must">must</em> fail.</td> + MUST always have the value + <code>1.0</code> and any attempt to alter it MUST fail.</td> </tr> <tr> @@ -1051,12 +1088,9 @@ </td> <td> - <code>played.length</code> <em class="rfc2119" title= - "must">must</em> return <code>1</code>.<br> - <code>played.start(0)</code> <em class="rfc2119" title= - "must">must</em> return <code>0</code>.<br> - <code>played.end(0)</code> <em class="rfc2119" title= - "must">must</em> return the last known <a href= + <code>played.length</code> MUST return <code>1</code>.<br> + <code>played.start(0)</code> MUST return <code>0</code>.<br> + <code>played.end(0)</code> MUST return the last known <a href= "http://www.w3.org/TR/html5/media-elements.html#dom-media-currenttime" class="externalDFN"><code>currentTime</code></a>. </td> @@ -1079,14 +1113,11 @@ </td> <td> - <code>seekable.length</code> <em class="rfc2119" title= - "must">must</em> return <code>0</code>.<br> - <code>seekable.start()</code> <em class="rfc2119" title= - "must">must</em> return <a href= + <code>seekable.length</code> MUST return <code>0</code>.<br> + <code>seekable.start()</code> MUST return <a href= "http://www.w3.org/TR/html5/media-elements.html#dom-media-currenttime" class="externalDFN"><code>currentTime</code></a>.<br> - <code>seekable.end()</code> <em class="rfc2119" title= - "must">must</em> return <a href= + <code>seekable.end()</code> MUST return <a href= "http://www.w3.org/TR/html5/media-elements.html#dom-media-currenttime" class="externalDFN"><code>currentTime</code></a>. </td> @@ -1125,13 +1156,174 @@ </tbody> </table> </section> + + <section class="informative"> + <h2>Event summary</h2> + + <p>The following event fires on <code> + <a>MediaStream</a> + </code> objects:</p> + + <table> + <tr> + <th>Event name</th> + + <th>Interface</th> + + <th>Fired when...</th> + </tr> + + <tbody> + <tr> + <td> + <dfn id="event-mediastream-ended"> + <code>ended</code> + </dfn> + </td> + + <td> + <code>Event</code> + </td> + + <td>The <code> + <a>MediaStream</a> + </code> <a>finished</a> as a result of all tracks in the <code> + <a>MediaStream</a> + </code> <a title="ended">ending</a>.</td> + </tr> + </tbody> + </table> + + <p>The following event fires on <code> + <a>MediaStreamTrack</a> + </code> objects:</p> + + <table> + <tr> + <th>Event name</th> + + <th>Interface</th> + + <th>Fired when...</th> + </tr> + + <tbody> + <tr> + <td> + <dfn id="event-mediastreamtrack-muted"> + <code>muted</code> + </dfn> + </td> + + <td> + <code>Event</code> + </td> + + <td>The <code> + <a>MediaStreamTrack</a> + </code> object's source is temporarily unable to provide + data.</td> + </tr> + + <tr> + <td> + <dfn id="event-mediastreamtrack-unmuted"> + <code>unmuted</code> + </dfn> + </td> + + <td> + <code>Event</code> + </td> + + <td>The <code> + <a>MediaStreamTrack</a> + </code> object's source is live again after having been + temporarily unable to provide data.</td> + </tr> + + <tr> + <td> + <dfn id="event-mediastreamtrack-ended"> + <code>ended</code> + </dfn> + </td> + + <td> + <code>Event</code> + </td> + + <td>The <code> + <a>MediaStreamTrack</a> + </code> object's source will no longer provide any data, either + because the user revoked the permissions, or because the source + device has been ejected, or because the remote peer stopped + sending data, or because the <code> + <a href="#dom-mediastream-stop">stop()</a> + </code> method was invoked.</td> + </tr> + </tbody> + </table> + + <p>The following event fires on <code> + <a>MediaStreamTrackList</a> + </code> objects:</p> + + <table> + <tr> + <th>Event name</th> + + <th>Interface</th> + + <th>Fired when...</th> + </tr> + + <tbody> + <tr> + <td> + <dfn id="event-mediastreamtracklist-addtrack"> + <code>addtrack</code> + </dfn> + </td> + + <td> + <code> + <a>MediaStreamTrackEvent</a> + </code> + </td> + + <td>A new <code> + <a>MediaStreamTrack</a> + </code> has been added to this list.</td> + </tr> + + <tr> + <td> + <dfn id="event-mediastreamtracklist-removetrack"> + <code>removetrack</code> + </dfn> + </td> + + <td> + <code> + <a>MediaStreamTrackEvent</a> + </code> + </td> + + <td>A <code> + <a>MediaStreamTrack</a> + </code> has been removed from this list.</td> + </tr> + </tbody> + </table> + </section> </section> <section id="local-content"> - <h1>Obtaining local multimedia content</h1> + <h2>Obtaining local multimedia content</h2> <section> - <h1>NavigatorUserMedia</h1> + <h2>NavigatorUserMedia</h2> <dl class="idl" title="[NoInterfaceObject] interface NavigatorUserMedia"> <dt>void getUserMedia(MediaStreamConstraints? constraints, @@ -1368,14 +1560,9 @@ </li> <li> - <p>Let <var>error</var> be a new <code><a href= - "#navigatorusermediaerror">NavigatorUserMediaError</a></code> - object whose <code title= - "dom-NavigatorUserMediaError-code"><a href= - "#dom-navigatorusermediaerror-code">code</a></code> attribute has - the numeric value 1 (<code title= - "dom-NavigatorUserMediaError-PERMISSION_DENIED"><a href= - "#dom-navigatorusermediaerror-permission_denied">PERMISSION_DENIED</a></code>).</p> + <p>Let <var>error</var> be a new <code><a>NavigatorUserMediaError</a></code> + object whose <code><a>code</a></code> attribute has + the numeric value 1 (<code><a>PERMISSION_DENIED</a></code>).</p> </li> <li> @@ -1396,7 +1583,7 @@ </section> <section> - <h1>MediaStreamConstraints</h1> + <h2>MediaStreamConstraints</h2> <dl class="idl" title="dictionary MediaStreamConstraints"> <!-- <dt>boolean audio</dt> @@ -1449,7 +1636,7 @@ </section> <section> - <h1>NavigatorUserMediaSuccessCallback</h1> + <h2>NavigatorUserMediaSuccessCallback</h2> <dl class="idl" title= "callback NavigatorUserMediaSuccessCallback = void"> @@ -1460,7 +1647,7 @@ </section> <section> - <h1>NavigatorUserMediaError and NavigatorUserMediaErrorCallback</h1> + <h2>NavigatorUserMediaError and NavigatorUserMediaErrorCallback</h2> <dl class="idl" title= "[NoInterfaceObject] interface NavigatorUserMediaError"> @@ -1486,7 +1673,7 @@ </section> <section class="informative"> - <h1>Implementation Suggestions</h1> + <h2>Implementation Suggestions</h2> <div class="practice"> <span id="resource-reservation" class="practicelab">Resource @@ -1559,7 +1746,7 @@ </section> <section> - <h1>Examples</h1> + <h2>Examples</h2> <div> <p>This sample code exposes a button. When clicked, the button is @@ -1687,7 +1874,7 @@ </section> <section> - <h1 id="sec-iana">IANA Registrations</h1> + <h1 id="sec-iana">IANA Registrations</h2> <section> <h2 id="sec-constraints">Constraints Registrations</h2> @@ -1757,7 +1944,7 @@ </section> <section> - <h1>Change Log</h1> + <h2>Change Log</h2> <p>This section will be removed before publication.</p><!-- <h2>To Do Items</h2> @@ -1851,7 +2038,7 @@ </section> <section class="appendix"> - <h1>Acknowledgements</h1> + <h2>Acknowledgements</h2> </section> </body> </html>
Received on Monday, 13 August 2012 18:38:04 UTC