12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166 |
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
- <html>
- <head>
- <title> Proposed HTML Timed Media Elements </title>
- <link href="./mediaelement.css" rel="stylesheet" type="text/css">
- <style type="text/css">
- h4 + .element { margin-top: -2.5em; padding-top: 2em; }
- h4 + p + .element { margin-top: -5em; padding-top: 4em; }
- .element { background: #EFE; color: #000; margin: 0 0 1em -1em; padding: 0 1em 0.25em 0.75em; border-left: solid #9F9 0.25em; -padding: 0; /* that last decl is for IE6. Try removing it, it's hilarious! */ }
- .proposal { border: blue solid; padding: 1em; }
- table.matrix, table.matrix td { border: none; text-align: right; }
- table.matrix { margin-left: 2em; }
- .history table { width: 100%; }
- .history, .history td, .history th { border: solid thin; font-size: x-small }
- td.hauthor, td.hdate { width: 10%; }
- td.hversion { width: 5%; text-align: center; }
- td.hchange { width: 100%; }
-
- .event-definition table { border: solid thin #000; width: 95%; }
- .event-definition tr:last-child td { border: none; }
- .event-definition th { text-align: left; font-weight: bold; border: none; border-right: 1px dashed #ccc; border-bottom: 1px dashed #ccc; white-space: nowrap; background-color: #F7F5D7; padding-left: 8px; padding-right: 8px; }
- .event-definition td { width: 100%; font-family: monospace; font-weight: normal; padding-left: 1em; background-color: transparent; padding-right: 1em; border: none; }
- /* needed to override wiki CSS */
- a, a:link { text-decoration: underline;}
- th { color: #000; }
-
- .obsolete {
- font-size: larger;
- color: red;
- }
- </style>
- </head>
- <body class="draft">
- <div class="head">
- <h1> HTML Timed Media Elements </h1> <h2 class="no-num no-toc" id="working"> Working Draft — 19 March 2007 </h2>
- <p class="copyright">© Copyright 2007 Apple Inc. All rights reserved.</p>
- </div>
- <h2 class="no-num no-toc" id="abstract"> Abstract </h2>
- <p>This specification introduces features to HTML and the DOM for native support of timed media,
- including but not limited to video and audio. </p>
-
- <h2 class="no-num no-toc" id="status"> Status of this document </h2>
- <p class="obsolete"><strong>This document is obsolete. Media Elements are now specified in the <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html" title="4.8.6 The video element — HTML5 (including next generation additions still in development)">HTML5 specification</a>.</strong></p>
-
- <h2 class="no-num no-toc"id="contents"> Table of contents </h2>
- <!--begin-toc-->
- <ul class="toc">
- <li><a href="#introduction"><span class="secno">1.</span> Introduction</a>
-
- <li><a href="#elements"><span class=secno>2.</span> Elements</a>
- <ul class=toc>
- <li><a href="#the-video-element"><span class=secno>2.1.</span>
- The <code title=element-video>video </code>element</a>
- <ul class=toc>
- <li><a href="#video-element-attributes"><span class=secno>2.1.1.</span> Element attributes</a>
- <li><a href="#video-dom-attributes"><span class=secno>2.1.2.</span>DOM attributes</a>
- </ul>
- <li><a href="#the-audio-element"><span class=secno>2.2.</span>
- The <code title=element-audio>audio</code> element</a>
- <li><a href="#the-common-attributes"><span class=secno>2.3.</span>
- Attributes and methods common to <code title=element-video>video</code> and
- <code title=element-audio>audio</code> elements</a>
- <ul class=toc>
- <li><a href="#common-element-attributes"><span class=secno>2.3.1.</span> Element attributes</a>
- <li><a href="#common-dom-attributes"><span class=secno>2.3.2.</span> DOM attributes and methods</a>
- <ul class=toc>
- <li><a href="#time-attributes"><span class=secno>2.3.2.1.</span> Time</a>
- <li><a href="#playback-attributes"><span class=secno>2.3.2.2.</span> Playback</a>
- <li><a href="#audio-attributes"><span class=secno>2.3.2.3.</span> Audio</a>
- <li><a href="#looping-attributes"><span class=secno>2.3.2.4.</span> Looping</a>
- <li><a href="#characteristics-attributes"><span class=secno>2.3.2.5.</span> Characteristics</a>
- <li><a href="#state-attributes"><span class=secno>2.3.2.6.</span> State</a>
- <li><a href="#time-triggers"><span class=secno>2.3.2.7.</span> Time triggers</a>
- </ul>
- </ul>
- </ul>
- <li><a href="#events"><span class=secno>3.</span> Events</a>
- <ul class=toc>
- <li><a href="#load-events"><span class=secno>3.1.</span>
- Media loading events</a>
- <li><a href="#playback-events"><span class=secno>3.1.</span>
- Media playback events</a>
- </ul>
- <li><a href="#window-additions"><span class=secno>4.</span> WindowHTML Additions</a>
- <li class=no-num><a href="#references">References</a>
-
- <li class=no-num><a href="#acknowledgements">Acknowledgements</a>
- </ul>
- <!--end-toc-->
- <hr>
- <h2 id="introduction"><span class="secno">1.</span> Introduction</h2>
- <p><em>This section is non-normative.</em></p>
- <p>While the World Wide Web has already been enriched by a variety of audio and video media,
- support for timed media in user agents is currently provided by a variety of implementations
- with their own peculiar sets of interfaces and behaviors. This proposal outlines a set of
- standard interfaces and behaviors for timed media that can be supported by a variety of
- implementations and applied to multiple audiovisual formats, with the goal of conferring upon
- these types of media the benefits of native support, such as styling for presentation, improved
- accessibility, and the opportunity to achieve greater uniformity of behavior.</p>
- <p>Certain intrinsic characteristics of timed media and of its presentation must influence the
- specifics of such a proposal:
- <ul>
- <li> A presentation of timed media may encompass one or more media substreams, e.g. video
- and audio, that are rendered in concert with each other over time.
- <li> Resources containing timed media may be very large in size, even indefinitely large,
- and loaded and presented incrementally over time.
- <li> A variety of protocols can be used to load timed media for presentation, and the rules
- for use of these protocols vary. Some are intelligent about the timing characteristics of
- media streams and others are not. Some are file-based protocols and others are not. Some
- permit random access in the byte domain or in the time domain and others provide sequential
- access only.
- <li> Various states of timed media elements are subject to change, e.g. they can be ready to
- play or not ready to play, they can be playing or not, they can be actively loading data or
- not.
- <li> The properties of timed media elements can change with the availability of additional
- data according to the media formats and protocols in use, e.g. their total duration, their
- natural width and height, and even the number and type of media substreams they encompass.
- </ul>
- <p>In sum timed media is inherently dynamic, not only in its presentation but also in its
- behavior. The current proposal is intended to provide standard mechanisms for controlling and
- responding to this dynamism, while deferring to the user agent the choice of degree of dynamism
- that's useful and supportable.</p>
-
- <h2 id="elements"><span class="secno">2.</span> New Elements</h2>
-
- <h4 id=the-video-element><span class=secno>2.1.</span> The <dfn id=video title=element-video>
- <code>video</code></dfn> element</h4>
- <dl class=element>
- <dd><a href="http://www.whatwg.org/specs/web-apps/current-work/#strictly">Strictly inline-level</a>
- <a href="http://www.whatwg.org/specs/web-apps/current-work/#embedded0">embedded content</a>.
- <dt>Contexts in which this element may be used:
- <dd>As the only <a href="http://www.whatwg.org/specs/web-apps/current-work/#embedded0">embedded content</a>
- child of a <code><a href="http://www.whatwg.org/specs/web-apps/current-work/#figure0">figure</a></code> element.
- <dd>Where <a href="http://www.whatwg.org/specs/web-apps/current-work/#strictly">
- strictly inline-level content</a> is allowed.
- <dt>Content model:
- <dd>When used as the child of a
- <code><a href="http://www.whatwg.org/specs/web-apps/current-work/#figure0">figure</a></code>
- element, or, when used as a
- <em><code><a href="http://www.whatwg.org/specs/web-apps/current-work/#figure0">figure</a></code> fallback
- <code><a href="#video">video</a></code></em>: zero or more
- <a href="http://www.whatwg.org/specs/web-apps/current-work/#block-level1">block-level elements</a>
- or a single
- <code><a href="#video">video</a></code> element, which is then considered to be a
- <em><code><a href="http://www.whatwg.org/specs/web-apps/current-work/#figure0">figure</a></code> fallback
- <code><a href="#video">video</a></code></em>.
- <dd>Otherwise:
- <a href="http://www.whatwg.org/specs/web-apps/current-work/#inline-level1"> inline-level content</a>.
- <dt>Element-specific attributes:
- <dd><code title="attr-media-src"><a href="#attr-src">src</a></code> (required)
- <dd><code title="attr-media-type"><a href="#attr-type">type</a></code>
- <dd><code title="attr-video-height"><a href="#attr-height">height</a></code>
- <dd><code title="attr-video-width"><a href="#attr-width">width</a></code>
- <dd><code title="attr-media-autoplay"><a href="#attr-autoplay">autoplay</a></code>
- <dd><code title="attr-media-controller"><a href="#attr-controller">controller</a></code>
-
- <dt>Predefined classes that apply to this element:
- <dd>None.
- <dt>
- DOM interface:
- <dd>
- <pre class="idl">interface <dfn id=html-video-element>HTMLVideoElement : HTMLTimedMediaElement</dfn> {
- attribute long <a href="#dom-video-height" title="video-element-height">height</a>;
- attribute long <a href="#dom-video-width" title="video-element-width">width</a>;
- };</pre>
- <p class=note>An instance of <code><a
- href="#html-video-element">HTMLVideoElement</a></code> can be obtained using
- the <code title=dom-video-constructor><a href="#video-constructor">Video</a></code> constructor.</p>
- </dl>
- <p>A <code title=element-video><a href="#video">video</a></code> element represents a video or
- movie, with an alternate representation given by its contents.
- <h6 id="video-element-attributes"><span class=secno>2.1.1.</span> Video specific element attributes</h6>
-
- <p>The <dfn id=attr-height title=attr-video-height><code>height</code></dfn> and
- <dfn id=attr-width title=attr-video-width><code>width</code></dfn> attributes
- give the preferred rendered dimensions of the media file if it is to be
- shown in a visual medium. If only one is specified, the size the other
- is scaled preserving the media resource's intrinsic aspect ratio. These attributes must be either
- <a href="http://www.whatwg.org/specs/web-apps/current-work/#valid" title="valid non-negative integer">
- valid non-negative integers</a> or
- <a href="http://www.whatwg.org/specs/web-apps/current-work/#valid3" title="valid non-negative percentage">
- valid non-negative percentages.</a></p>
-
- <p>See below for definitions of
- <code title="attr-media-src"><a href="#attr-src">src</a></code>,
- <code title="attr-media-type"><a href="#attr-type">type</a></code>,
- <code title="attr-media-autoplay"><a href="#attr-autoplay">autoplay</a></code>, and
- <code title="attr-media-controller"><a href="#attr-controller">controller</a></code>
- </p>
- <h6 id="video-dom-attributes"><span class=secno>2.1.2.</span> Video specific DOM attributes</h6>
- <p>The DOM attributes <dfn id=dom-video-height title=video-element-height>
- <code>height</code></dfn> and <dfn id=dom-video-width
- title=video-element-width><code>width</code></dfn> must return the rendered
- height and width of the media resource, in CSS pixels, if the media resource is being
- rendered and is being rendered to a visual medium, or 0 otherwise.
- <a href="#refsCSS21">[CSS21]</a></p>
-
- <!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
- <h4 id=the-audio-element><span class=secno>2.2. </span>The <dfn id=audio title=element-audio>
- <code>audio</code></dfn> element</h4>
- <p><a href="http://www.whatwg.org/specs/web-apps/current-work/#strictly">Strictly
- inline-level</a> <a href="http://www.whatwg.org/specs/web-apps/current-work/#embedded0">embedded content</a>.
- <dl class=element>
- <dt>Contexts in which this element may be used:
- <dd>As the only <a href="http://www.whatwg.org/specs/web-apps/current-work/#embedded0">embedded content</a>
- child of a <code><a href="http://www.whatwg.org/specs/web-apps/current-work/#figure0">figure</a></code> element.
- <dd>Where <a href="http://www.whatwg.org/specs/web-apps/current-work/#strictly">
- strictly inline-level content</a> is allowed.
- <dt>Content model:
- <dd>When used as the child of a
- <code><a href="http://www.whatwg.org/specs/web-apps/current-work/#figure0">figure</a></code>
- element, or, when used as a
- <em><code><a href="http://www.whatwg.org/specs/web-apps/current-work/#figure0">figure</a></code> fallback
- <code><a href="#audio">audio</a></code></em>: zero or more
- <a href="http://www.whatwg.org/specs/web-apps/current-work/#block-level1">block-level elements</a>
- or a single
- <code><a href="#audio">audio</a></code> element, which is then considered to be a
- <em><code><a href="http://www.whatwg.org/specs/web-apps/current-work/#figure0">figure</a></code> fallback
- <code><a href="#audio">audio</a></code></em>.
- <dd>Otherwise:
- <a href="http://www.whatwg.org/specs/web-apps/current-work/#inline-level1"> inline-level content</a>.
- <dt>Element-specific attributes:
- <dd><code title="attr-media-src"><a href="#attr-src">src</a></code> (required)
- <dd><code title="attr-media-type"><a href="#attr-type">type</a></code>
- <dd><code title="attr-media-autoplay"><a href="#attr-autoplay">autoplay</a></code>
- <dd><code title="attr-media-controller"><a href="#attr-controller">controller</a></code>
-
- <dt>Predefined classes that apply to this element:
- <dd>None.
- <dt>DOM interface:
- <dd> No difference from <code><a href="#html-timed-media-element">HTMLTimedMediaElement</a></code>.
- <p class=note>An instance of <code><a
- href="#html-audio-element">HTMLAudioElement</a></code> can be obtained using
- the <code title=dom-audio-constructor><a href="#audio">Audio</a></code> constructor.</p>
- </dl>
- <p>Audio objects have no spatial representation. They are heard and not seen. Otherwise they have
- the same API as video objects.</p>
-
- <p>The user agent must render only the audio media contained in the resource, regardless of
- whatever else it might contain. If the source is an MP3 file containing synchronized lyrics, for
- example, the user agent must render only the audio and not the text.</p>
- <p>See below for definitions of
- <code title="attr-media-src"><a href="#attr-src">src</a></code>,
- <code title="attr-media-type"><a href="#attr-type">type</a></code>,
- <code title="attr-media-autoplay"><a href="#attr-autoplay">autoplay</a></code>, and
- <code title="attr-media-controller"><a href="#attr-controller">controller</a></code>
- </p>
- <p class="big-issue">Need some words about using only audio when media file has both audio and
- video.</p>
- <!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
- <h3 id=the-common-attributes><span class=secno>2.3.</span> Attributes common to the
- <code title=element-video>video</code> and <code title=element-audio>audio</code> elements</h3>
- <h5 id=common-element-attributes><span class=secno>2.3.1.</span>
- Element attributes common to <code title=element-video>video</code> and
- <code title=element-audio>audio</code> elements.</h5>
- <p>The <dfn id="attr-src" title="attr-media-src"><code>src</code></dfn> attribute
- must contain the URI (or IRI) of the media resource.
-
- <p>When the src attribute is set and the specified resource has a supported type, the user agent
- must prepare to present it according to the appropriate transfer protocol. This may entail the
- initiation of network sessions, including but not limited to file transfers. If the presentation
- of timed media by the user agent has been disabled, if the resource has an unsupported type, or
- if the preparations for its presentation fail either because of a protocol failure or because
- the format of the media is unrecognized, the user agent must fire an error event on the element
- and display the element's fallback content, if available.</p>
- <p>The user agent may choose to proceed with the presentation of media that it can render
- only partially, for any of the following reasons:
- <ul>
- <li> A media type is not supported, i.e. the resource contains one or more renderable substreams
- of types not supported by the user agent. Example: a 3GPP file with timed text on a device that
- does not have a text renderer.
- <li> A media format is not supported, i.e. a renderable substream of a type that's supported by
- the user agent contains media that can't be decoded. Example: a user agent that supports only
- H.264 at baseline profile encounters an MPEG-4 file with a video track with H.264 frames encoded
- in main profile.
- <li> Media can't be rendered under current constraints. Here there's no problem with media types
- or formats but the resource can't be rendered anyway, possibly temporarily. Example: a user
- agent that can decode only one H.264 video stream at a time is requested to decode multiple
- streams simultaneously.
- </ul>
- <p>From the user's perspective, these cases look very much the same because their only obvious
- symptom is that some or all of the media cannot be rendered. In this case, the user agent may emit
- a <code title=event-mediarendererror><a href="#eventdef-event-mediarendererror">mediarendererror</a></code>.
- <p>The <dfn id=attr-type title=attr-media-type><code>type</code></dfn>
- attribute, if present, gives the MIME type of the media resource specified
- by <code title="attr-media-src"><a href="#attr-src">src</a></code>. This attribute is optional
- but recommended as it allows the user agent to avoid loading information for unsupported
- content types. The value must be a valid MIME type <a href="#refsRFC2046">
- [RFC2046]</a>, optionally with parameters indicating the codec(s) required to render the content
- <a href="#refsRFC4281">[RFC4281]</a>. The <code title=attr-media-type>type</code> attribute
- is purely advisory and is only intended for static fallback, it is only considered when deciding
- whether to initiate a load or not.</p>
- <p>The <code title=attr-media-type>type</code> attribute can thus be used by the page author
- to select different content for different user agent configurations. For the following example:
- <pre >
- <video src="big_264.mp4" type="video/mp4; codecs=mp4v.21.3">
- <video src="medium.mp4" type="video/mp4; codecs=mp4v.20.9">
- <img src="small.png" alt="alternate image for non-video browsers />
- </video>
- </video>
- </pre>
- <p>the user agent would choose the outmost <video> if it supports H.264 visual simple profile
- level 1, else the inner <video> if it suports MPEG-4 visual simple profile level 0, else the
- <img> if it supports PNG, else the alternate text.
- <p>Because the supportability and desirability of media container formats and media encoding
- formats vary widely according to the needs and constraints of user agents, the process of static
- fallback for HTML timed media elements allows the user agent to examine multiple descriptive
- attributes that indicate the suitability of a given resource for loading and presentation.
- <ol>
- <li> Examine the <code title=attr-media-type><a href="#attr-type">type</a></code> attribute,
- if present. If not present proceed to step 2.
-
- If the <code title=attr-media-type><a href="#attr-type">type</a></code>, optionally including
- information about the codec(s) required to render it as described in RFC 4281, is not supported
- by the user agent, the element doesn't represent anything except what its contents
- represent and static fallback may ensue. <a href="#refsRFC4281">[RFC4281]</a>
-
- <li> Begin a load of the resource specified by the
- <code title=attr-media-src><a href="#attr-src">src</a></code> attribute. Note that dynamic
- fallback may ensue for a variety of reasons. See the discussion of
- "<code title=event-mediarendererror><a href="#eventdef-event-mediarendererror">mediarendererror</a></code>"
- below.
- </ol>
- <p class="big-issue">Should there be other advisory markup attributes in order to describe
- content even more precisely, e.g. dataRate? Should CSS Media Queries be extended to support
- bandwidth?
- <p>The <dfn id=attr-autoplay title=attr-media-autoplay><code>autoplay</code></dfn> attribute is a
- <a href="http://www.whatwg.org/specs/web-apps/current-work/#boolean0">boolean attribute</a>.
- If the attribute is present, the user agent must begin playing the element as soon as it
- estimates that playback will not be interrupted to rebuffer.</p>
- <p>The <dfn id=attr-controller title=attr-media-controller><code>controller</code></dfn> attribute is a
- <a href="http://www.whatwg.org/specs/web-apps/current-work/#boolean0">boolean attribute</a>.
- If the attribute is present, the user agent must display a user interface which allows the user
- to control the media element. The <code title="attr-video-height"><a href="#attr-height">height</a></code>
- attribute on the element does not include the size of the controller, it is the size of the
- video element only.
- <span class="big-issue">Should we specify the position of the controller?</span>
- <span class="big-issue">Should we specify <em>what</em> controls it should have?</span>
- </p>
- <p>The <code title=element-video><a href="#video">video</a></code>
- and <code title=element-audio><a href="#audio">audio</a></code>
- elements must implement the <code><a href="#html-timed-media-element">HTMLTimedMediaElement</a></code> interface:
-
- <pre class="idl">interface <dfn id="html-timed-media-element">HTMLTimedMediaElement : HTMLElement</dfn> {
- attribute DOMString <a href="#dom-src" title="dom-media-src">src</a>;
- attribute DOMString <a href="#dom-type" title="dom-media-type">type</a>;
- // <a href="#time-attributes">Time</a>
- attribute float <a href="#starttime" title="dom-media-starttime">startTime</a>;
- attribute float <a href="#endtime" title="dom-media-endtime">endTime</a>;
- attribute float <a href="#currenttime" title="dom-media-currenttime">currentTime</a>;
- readonly attribute float <a href="#duration" title="dom-media-duration">duration</a>;
- readonly attribute float <a href="#availableduration" title="dom-media-availableduration">availableDuration</a>;
- // <a href="#playback-attributes">Playback</a>
- attribute float <a href="#currentrate" title="dom-media-currentrate">currentRate</a>;
- attribute float <a href="#playrate" title="dom-media-playrate">playRate</a>;
- attribute boolean <a href="#ispaused" title="dom-media-ispaused">isPaused</a>;
- void <a href="#play" title="dom-media-play">play</a>();
- void <a href="#pause" title="dom-media-pause">pause</a>();
- void <a href="#step" title="dom-media-step">step</a>(in long numberOfFrames);
- // <a href="#audio-attributes">Audio</a>
- attribute float <a href="#volume" title="dom-media-volume">volume</a>;
- attribute boolean <a href="#muted" title="dom-media-muted">muted</a>;
-
- // <a href="#looping-attributes">Looping</a>
- attribute long <a href="#loopcount" title="dom-media-loopcount">loopCount</a>;
- attribute long <a href="#currentloop" title="dom-media-currentloop">currentLoop</a>;
- attribute float <a href="#loopstarttime" title="dom-media-loopstarttime">loopStartTime</a>;
- attribute float <a href="#loopendtime" title="dom-media-loopendtime">loopEndTime</a>;
- // <a href="#characteristics-attributes">Characteristics</a>
- attribute boolean <a href="#hasaudio" title="dom-media-hasaudio">hasAudio</a>;
- attribute boolean <a href="#hasvisual" title="dom-media-hasvisual">hasVisual</a>;
- // <a href="#state-attributes">State</a>
- const unsigned short <a href="#uninitialized" title="dom-media-UNINITIALIZED">UNINITIALIZED</a> = 0;
- const unsigned short <a href="#error" title="dom-media-ERROR">ERROR</a> = 1;
- const unsigned short <a href="#understandable" title="dom-media-UNDERSTANDABLE">UNDERSTANDABLE</a> = 2;
- const unsigned short <a href="#presentable" title="dom-media-PRESENTABLE">PRESENTABLE</a> = 3;
- const unsigned short <a href="#playable" title="dom-media-PLAYABLE">PLAYABLE</a> = 4;
- const unsigned short <a href="#playthroughok" title="dom-media-PLAYTHROUGHOK">PLAYTHROUGHOK</a> = 5;
- const unsigned short <a href="#loaded" title="dom-media-LOADED">LOADED</a> = 6;
- readonly attribute long <a href="#mediastatus" title="dom-media-mediastatus">mediaStatus</a>;
- // <a href="#time-triggers">Timed triggers</a>
- void <a href="#settimetrigger" title="dom-media-settimetrigger">setTimeTrigger</a>(in float time, in TimeTriggerListener listener);
- void <a href="#removetimetrigger" title="dom-media-removetimetrigger">removeTimeTrigger</a>(in float time, in TimeTriggerListener listener);
- };</pre>
- <pre class="idl">interface <dfn id="time-trigger-listener">TimeTriggerListener</dfn> {
- void <a href="#handletimetrigger" title="timetrigger-listener-handletimetrigger">handleTimeTrigger</a>(in float time);
- };</pre>
- <h5 id=common-dom-attributes><span class=secno>2.3.2.</span>
- DOM attributes and methods common to <code title=element-video>video</code> and
- <code title=element-audio>audio</code> elements.</h5>
- <p>The DOM attributes <dfn id=dom-src title=dom-media-src><code>src</code></dfn>
- and <dfn id=dom-type title=dom-media-type><code>type</code></dfn>
- each must reflect the respective content attributes of the same name.
- <p>When the <code title=dom-media-src><a href="#dom-src">src</a></code>
- attribute is set, the user agent must immediately begin to download the
- specified resource unless the user agent cannot support <code title=element-video>
- video</code>/<code title=element-audio>audio</code>, or its support for
- <code title=element-video>video</code>/<code title=element-audio>audio</code> has
- been disabled. The <code title=dom-media-type>type</code>
- attribute is considered at this time, so it should be cleared or reset when the
- <code title=dom-media-src><a href="#dom-src">src</a></code> attribute it set to a media
- resource with a different type. Fallback content must be reconsidered if the
- user agent is unable to load and display the specified resource.
-
-
- <h6 id="time-attributes"><span class=secno>2.3.2.1.</span> Time Attributes</h6>
- <p>Media durations are not always finite. For example: the duration of a "live" RTP stream
- is <em>indefinite</em> as long as it lasts, i.e. such streams typically proceed indefinitely
- without signalling their duration until the server closes the session. </p>
-
- <p>A media resource which has a <em>finite</em> duration may not have a <em>known</em>
- duration, or may not have a precisely known duration, for some period of time even after
- playback can be initiated. For example: MPEG elementary streams, including audio elementary
- streams such as MP3 files, must be completely scanned in order to determine their precise
- duration. If a user agent reports an approximate duration, it must fire a
- <code title=event-durationchange><a href="#durationchange">durationchange</a></code> event
- when the estimate is refined or the precise duration becomes known.</p>
- <p>Time values are represented as floating point numbers, representing a length of time in
- seconds. A value of +infinity, ECMAScript <code>Number.POSITIVE_INFINITY</code>, signifies
- an "indefinite" time. A time value of "Not A Number", ECMAScript <code>Number.NaN</code>,
- signifies an unknown or unspecified time value. This approach has the advantage of encouraging
- script writers to cope with these situations, as opposed to the approach of defining other
- attributes that need to be examined to determine the validity of the duration attribute but
- which are easily ignored.</p>
- <p class="big-issue">It would be helpful to have utility functions to convert from a formatted
- time string to a double and back. Where should these go?</p>
-
- <p>The DOM attribute <dfn id=availableduration title=dom-media-availableduration>
- <code>availableDuration</code></dfn> returns the duration of the portion of media which is
- available for playing. The user agent must fire an
- <code title=event-availabledurationchange><a href="#availabledurationchange">availabledurationchange</a></code>
- when the portion of media available for playing changes.</p>
- <p>The DOM attribute <dfn id=duration title=dom-media-duration><code>duration</code></dfn>
- returns the total duration of the complete media file. For some media formats, the value
- returned may be an estimate. When an estimated duration is returned, the user agent will
- fire a <code title=event-durationchange><a href="#durationchange">durationchange</a></code>
- event when the estimate is refined or the precise duration becomes known.</p>
- <p>The DOM attribute <dfn id=starttime title=dom-media-starttime><code>startTime</code></dfn>
- gets and sets the time at which a movie begins to play, and the time at which it stops
- when playing in reverse. The initial value is 0. The value must be in the range from 0
- to <code title=dom-media-endtime><a href="#endtime">endTime</a></code>. If the attribute is
- set to a value greater than <code title=dom-media-endtime><a href="#endtime">endTime</a></code>,
- it is clipped to <code title=dom-media-endtime><a href="#endtime">endTime</a></code>.
- <span class="big-issue">Or should it retain the previous value???</span>
- </p>
- <p>The DOM attribute <dfn id=endtime title=dom-media-endtime><code>endTime</code></dfn>
- gets and sets the time at which a movie stops playing, and the time at which it begins when
- playing in reverse. This attribute is initially set to <code>Number.NaN</code> to signal
- that it has not been set. The value must be in the range from
- <code title=dom-media-starttime><a href="#starttime">startTime</a></code> to
- <code title=dom-media-duration><a href="#duration">duration</a></code>. If the attribute
- is set to a value outside this range, it is clipped to the nearest legal value.
- <span class="big-issue">Or should it retain the previous value???</span>
- </p>
- <p>The DOM attribute <dfn id=currenttime title=dom-media-currentTime><code>currentTime</code></dfn>
- gets and sets the position of the play head in the media element's timeline.</p>
-
- <h6 id="playback-attributes"><span class=secno>2.3.2.2.</span> Playback Attributes</h6>
- <p>The DOM attribute <dfn id=currentrate title=dom-media-currentrate><code>currentRate</code></dfn>
- is the rate at which a media element is currently playing.</p>
-
- <p>The DOM attribute <dfn id=playrate title=dom-media-playrate><code>playRate</code></dfn>
- is the rate that is implicitly set on a media element when its play() method is invoked.
- Some media formats do not allow the play rate to be changed, for example a live RTP stream.
- <span class="big-issue"> What should the UA do when someone tries to set the rate on a media
- format that doesn't allow it? Should we specify the behavior?</span> This value is
- initialized to the media resource's intrinsic value, eg. the <a href=
- "http://developer.apple.com/documentation/QuickTime/QTFF/QTFFChap2/chapter_3_section_2.html#//apple_ref/doc/uid/TP40000939-CH204-32947">
- <code>"preferred rate"</code></a> of a QuickTime movie, or 1 if there is no
- intrinsic value. Changing the <code title=dom-media-playrate>playRate</code> when an element
- is already playing shall <em>not</em> change the
- <code title=dom-media-currentrate>currentRate</code>. The rate change does not take effect until
- the <code title=dom-media-play>play()</code> method is called again.</p>
-
- <p>The DOM attribute <dfn id=ispaused title=dom-media-ispaused><code>isPaused</code></dfn>
- returns a value that specifies whether the element is in a paused state. An element that
- is not paused may have a rate of 0 if it is prerolling. <span class="big-issue">This
- should be clarified</span></p>
-
- <p>The <dfn id=play title=dom-media-play><code>play()
- </code></dfn> method begins playing the element at the <code title=dom-media-playrate>
- <a href="#playrate">playRate</a></code>. </p>
-
- <p>The <dfn id=pause title=dom-media-pause><code>pause()</code></dfn> method sets the
- play rate to zero.</p>
-
- <p>The <dfn id=step title=dom-media-step><code>step(<var title="">numberOfFrames</var>)
- </code></dfn> method steps the specified number of frames. Negative values step backwards.</p>
- <h6 id="audio-attributes"><span class=secno>2.3.2.3.</span> Audio Attributes</h6>
- <p>The DOM attribute <dfn id=volume title=dom-media-volume><code>volume</code></dfn>
- gets and sets the audio volume of the movie. Legal values are between '0' and '100',
- values outside of this range are clipped.</p>
-
- <p>The DOM attribute <dfn id=muted title=dom-media-muted><code>muted</code></dfn>
- gets and sets a value that indicates whether the audio is turned on or off.</p>
- <h6 id="looping-attributes"><span class=secno>2.3.2.4.</span> Looping Attributes</h6>
- <p>The DOM attribute <dfn id=loopcount title=dom-media-loopcount><code>loopCount</code></dfn>
- gets and sets the number of loop itterations that will be played before the media stops.</p>
- <p>The DOM attribute <dfn id=currentloop title=dom-media-currentloop><code>currentLoop</code></dfn>
- returns the index of the current itteration of the playback of the media. For example, on the
- first play through the value will be 0, the second time through it will be 1, etc. Playback
- stops when <code title=dom-media-currentloop><a href="#currentloop">currentloop</a></code>
- equals <code title=dom-media-loopcount><a href="#loopcount">loopCount</a></code>.</p>
- <p>The DOM attribute <dfn id=loopstarttime title=dom-media-loopstarttime><code>loopStartTime</code></dfn>
- gets and sets the time at which a movie begins to play after looping, and the time at which
- it loops when playing in reverse. The initial value is 0. The value must be in the range from 0
- to <code title=dom-media-loopendtime><a href="#loopendtime">loopEndTime</a></code>.
- If the attribute is set to a value outside this range, it is clipped to the nearest legal value.
- <span class="big-issue">Or should it retain the previous value???</span>
- </p>
- <p>The DOM attribute <dfn id=loopendtime title=dom-media-loopendtime><code>loopEndTime</code></dfn>
- gets and sets the time at which a movie loops, and the time at which it begins to play
- after looping when playing in reverse. This attribute is initially set to <code>Number.NaN</code>
- to signal that it has not been set. The value must be in the range from the
- <code title=dom-media-loopstarttime><a href="#loopstarttime">loopStartTime</a></code>
- to <code title=dom-media-duration><a href="#duration">duration</a></code>. If the attribute
- is set to a value outside this range, it is clipped to the nearest legal value.
- <span class="big-issue">Or should it retain the previous value???</span>
- </p>
- <h6 id="characteristics-attributes"><span class=secno>2.3.2.5.</span> Characteristics</h6>
- <p>The DOM attribute <dfn id=hasaudio title=dom-media-hasaudio><code>hasAudio</code></dfn>
- returns a value that specifies whether the element has audio media.</p>
- <p>The DOM attribute <dfn id=hasvisual title=dom-media-hasvisual><code>hasVisual</code></dfn>
- returns a value that specifies whether the element can draw on the screen. An
- <code title=element-audio><a href="#audio">audio</a></code> element whose
- <code title="attr-media-src">src</code>
- attribute specifies a media resource that contains visual media shall return false since
- the visual media will not be rendered.</p>
- <h6 id="state-attributes"><span class=secno>2.3.2.6.</span> State</h6>
- <p>The DOM attribute <dfn id=mediastatus title=dom-media-mediastatus><code>mediaStatus</code></dfn>
- returns the current state of the media element taking into consideration its current loading
- progress and its playability. As loading progresses and playability changes, appropriate
- events (e.g., "mediaunderstandable", "mediapresentable", "load") should be fired. However,
- as it may be necessary to know the current state of the media element after state
- transitions have already occurred, the mediaStatus attribute can be retrieved to know the
- media element's current status.</p>
-
- <p>When the element is created the attribute must be set to 0. It can have the following
- values:</p>
- <dl>
- <dt>0 <dfn id=uninitialized title=dom-media-UNINITIALIZED><code>UNINITIALIZED</code></dfn>
- <dd>The initial value.
- <dt>1 <dfn id=error title=dom-media-ERROR><code>ERROR</code></dfn>
- <dd>This playability state indicates that some kind of error has occurred (which
- should also be signaled by an error event). One reason this state might be set is
- that the media file is invalid.
- <dt>2 <dfn id=understandable title=dom-media-UNDERSTANDABLE><code>UNDERSTANDABLE</code></dfn>
- <dd>Attributes of the media element are now available for retrieval (e.g.,
- <code title=dom-media-duration><a href="#duration">duration</a></code>). It however
- has not reached a state where it can render anything (e.g., an image if the media
- type is visual) or an attempt to play the content should be made.
- <dt>3 <dfn id=presentable title=dom-media-PRESENTABLE><code>PRESENTABLE</code></dfn>
- <dd>The media element has loaded sufficient media data to render at the current time
- (e.g., it can render the video frame at the current time). It has not however loaded
- sufficient media data so that setting the
- <code title=dom-media-currentrate><a href="#currentrate">currentRate</a></code>
- property to a non-zero value will render anything (video or audio) more.
- <dt>4 <dfn id=playable title=dom-media-PLAYABLE><code>PLAYABLE</code></dfn>
- <dd>The media element has loaded sufficient media data so that if the play rate was
- set to a non-zero value, time will advance.
- <dt>5 <dfn id=playthroughok title=dom-media-PLAYTHROUGHOK><code>PLAYTHROUGHOK</code></dfn>
- <dd>The media element has loaded sufficient media data and playback conditions
- (e.g., download rates, data rate of the media, playback rate) should allow for
- uninterrupted playback (i.e., no stalls) if the current playback rate is set to the
- value of playbackRate.
- <dt>6 <dfn id=loaded title=dom-media-LOADED><code>LOADED</code></dfn>
- <dd>All necessary media data for the media element is available (and no data will be
- evicted). This is not strictly the same thing as all data for the media element's
- file or files is local, only that all data that can be referenced during playback
- will remain available for the life span of the element. To detect if all data
- across the media element's files is available, listen for the load event.
- </dl>
- <p>The <code title=dom-media-mediastatus><a href="#mediastatus">mediaStatus</a></code>
- attribute and associated events are useful to an implementor of a custom play controller as
- they can wait for <code title=dom-media-PLAYTHROUGHOK><a href="#playthroughok">PLAYTHROUGHOK</a></code>
- or <code title=dom-media-LOADED><a href="#loaded">LOADED</a></code> to know that autoplay may start. Likewise, if
- during playback, the playback catches up with download, one can pause playback by checking
- for a state less than <code title=dom-media-PLAYABLE><a href="#playable">PLAYABLE</a></code>.</p>
- <p>The mediaStatus state values are ordered so that as the media becomes more playable, the
- values increase. An effect of this is that to detect if the current playability allows for
- querying media properties (i.e., the media element is "understandable"), one can compare the current
- <code title=dom-media-mediastatus><a href="#mediastatus">mediaStatus</a></code> against
- <code title=dom-media-UNDERSTANDABLE><a href="#understandable">UNDERSTANDABLE</a></code>.
- If equal to or greater than <code title=dom-media-UNDERSTANDABLE><a href="#understandable">UNDERSTANDABLE</a></code>
- , then properties can be queried.
- If less than <code title=dom-media-UNDERSTANDABLE><a href="#understandable">UNDERSTANDABLE</a></code>
- (including the <code title=dom-media-ERROR><a href="#error">ERROR</a></code> state),
- properties should not be requested.</p>
- <p>The following state chart illustrates the possible <code title=dom-media-mediastatus>mediaStatus</code>
- state transitions.</p>
- <img src="movie-status-states.png" alt="State chart" />
- <p>It is possible for the states reported by <code title=dom-media-mediastatus><a href="#mediastatus">mediaStatus</a></code>
- to regress as the result of a seek, a change in network conditions (bandwidth changes or
- connection drops), changes in play rate/direction, changes in looping, cache unloading, etc.
- Such changes from any of the presentable/playable states (i.e.,
- <code title=dom-media-PRESENTABLE><a href="#presentable">PRESENTABLE</a></code>,
- <code title=dom-media-PLAYABLE><a href="#playable">PLAYABLE</a></code>,
- <code title=dom-media-PLAYTHROUGHOK><a href="#playthroughok">PLAYTHROUGHOK</a></code>)
- may push the media element's current media status to an earlier state,
- including <code title=dom-media-UNDERSTANDABLE><a href="#understandable">UNDERSTANDABLE</a></code>.
- <p>To accommodate media playback scenarios where previously loaded media data may be evicted
- during playback (e.g., because of limited caching by the user agent), the
- <code title=dom-media-LOADED><a href="#loaded">LOADED</a></code> state (and
- the firing of the "load" event) may only occur if all data becomes loaded and cannot be
- evicted during the life of the media element.</p>
- <h6 id="time-triggers"><span class=secno>2.3.2.7.</span> Time triggers</h6>
- <p>The <dfn id=settimetrigger title=dom-media-settimetrigger>
- <code>setTimeTrigger(<var title="">time</var>, <var title="">listener</var>)</code>
- </dfn> method registers a callback for when the media element plays through
- <var title="">time</var>. <var title="">listener</var> must be an object implementing
- the <code><a href="#time-trigger-listener">TimeTriggerListener</a></code> interface, or a JavaScript
- function.</p>
-
-
- <p>The <dfn id=removetimetrigger title=dom-media-removetimetrigger>
- <code>removeTimeTrigger(<var title="">time</var>, <var title="">listener</var>)</code>
- </dfn> method removes a previously registered <code><a href="#time-trigger-listener">
- TimeTriggerListener</a></code> from a media element.</p>
- <h2 id="events"><span class="secno">3.</span> Events</h2>
-
- <h3 id=load-events><span class=secno>3.1.</span> Media loading events</h3>
- <div class='event-definition'>
- <dl>
- <dt><dfn id=eventdef-event-abort class=event-abort><strong>abort</strong></dfn>
- <dd>
- <table >
- <tr><th><em>Type:</em><td>abort
- <tr><th><em>Namespace:</em><td>TBD
- <tr><th><em>Interface:</em><td><a href="http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-Event">Event</a>
- <tr><th><em>Cancelable:</em><td>No
- <tr><th><em>Bubbles:</em><td>Yes
- <tr><th><em>Target:</em><td>Element
- <tr><th><em>Context info:</em><td>None
- </table>
- <p>The <code title=event-abort>abort</code> event is fired when loading of the media
- element is canceled.
- </dl>
- </div>
- <div class='event-definition'>
- <dl>
- <dt><dfn id=eventdef-event-mediarendererror class=event-mediarendererror><strong>mediarendererror</strong></dfn>
- <dd>
- <table >
- <tr><th><em>Type:</em><td>mediarendererror
- <tr><th><em>Namespace:</em><td>TBD
- <tr><th><em>Interface:</em><td><a href="http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-Event">Event</a>
- <tr><th><em>Cancelable:</em><td>No
- <tr><th><em>Bubbles:</em><td>Yes
- <tr><th><em>Target:</em><td>Element
- <tr><th><em>Context info:</em><td>None
- </table>
- <p>The <code title=event-mediarendererror>mediarendererror</code> event is fired if a
- non-fatal error occurs during media playback that prevents the media resource from being
- completely rendered. For example: media type is not supported, i.e. the resource
- contains one or more renderable substreams of types not supported by the user agent; a
- media format is not supported, i.e. a renderable substream of a type that's supported by
- the user agent contains media that can't be decoded; or media can't be rendered under
- current constraints. Here there's no problem with media types or formats but the
- resource can't be rendered anyway, possibly temporarily.
- </dl>
- </div>
- <div class='event-definition'>
- <dl>
- <dt><dfn id=eventdef-event-error class=event-error><strong>error</strong></dfn>
- <dd>
- <table >
- <tr><th><em>Type:</em><td>error
- <tr><th><em>Namespace:</em><td>TBD
- <tr><th><em>Interface:</em><td><a href="http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-Event">Event</a>
- <tr><th><em>Cancelable:</em><td>No
- <tr><th><em>Bubbles:</em><td>Yes
- <tr><th><em>Target:</em><td>Element
- <tr><th><em>Context info:</em><td>None
- </table>
- <p>The <code title=event-error>error</code> event is fired if an error occurs during
- the loading of the media element. This event should not be fired if the loading was
- canceled; the abort error should be fired in that case.
- </dl>
- </div>
- <div class='event-definition'>
- <dl>
- <dt><dfn id=eventdef-event-load class=event-load><strong>load</strong></dfn>
- <dd>
- <table >
- <tr><th><em>Type:</em><td>load
- <tr><th><em>Namespace:</em><td>TBD
- <tr><th><em>Interface:</em><td><a href="http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-Event">Event</a>
- <tr><th><em>Cancelable:</em><td>No
- <tr><th><em>Bubbles:</em><td>No
- <tr><th><em>Target:</em><td>Element
- <tr><th><em>Context info:</em><td>None
- </table>
- <p>The <code title=event-load>load</code> event is fired when the media resource is
- completely loaded by the client. It should only be fired if the data will remain
- available for the life span of the element. Video and audio elements should be
- excluded from consideration for the document "load" event.
- </dl>
- </div>
- <code title=event-load><a href=#eventdef-event-load">load</a></code>
- <div class='event-definition'>
- <dl>
- <dt><dfn id=eventdef-event-ratechange class=event-ratechange><strong>ratechange</strong></dfn>
- <dd>
- <table >
- <tr><th><em>Type:</em><td>ratechange
- <tr><th><em>Namespace:</em><td>TBD
- <tr><th><em>Interface:</em><td><a href="http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-Event">Event</a>
- <tr><th><em>Cancelable:</em><td>No
- <tr><th><em>Bubbles:</em><td>No
- <tr><th><em>Target:</em><td>Element
- <tr><th><em>Context info:</em><td>None
- </table>
- <p>The <code title=event-ratechange>ratechange</code> event is fired soon after the
- <code title=dom-media-currentrate><a href="#currentrate">currentRate</a></code> property
- is changed from its previous value. Inspect the object's currentRate property for the new rate
- value. To detect that playback is starting, check that the new
- <code title=dom-media-currentrate><a href="#currentrate">currentRate</a></code> is
- non-zero; to detect that playback has paused, check that the new
- <code title=dom-media-currentrate><a href="#currentrate">currentRate</a></code> is zero (0).
- </dl>
- </div>
- <div class='event-definition'>
- <dl>
- <dt><dfn id=eventdef-event-volumechange class=event-volumechange><strong>volumechange</strong></dfn>
- <dd>
- <table >
- <tr><th><em>Type:</em><td>volumechange
- <tr><th><em>Namespace:</em><td>TBD
- <tr><th><em>Interface:</em><td><a href="http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-Event">Event</a>
- <tr><th><em>Cancelable:</em><td>No
- <tr><th><em>Bubbles:</em><td>No
- <tr><th><em>Target:</em><td>Element
- <tr><th><em>Context info:</em><td>None
- </table>
- <p>The <code title=event-volumechange>volumechange</code> event is fired after either
- the <code title=dom-media-volume><a href="#volume">volume</a></code>
- or the <code title=dom-media-muted><a href="#muted">muted</a></code> property has changed from its
- previous value. Inspect the object's properties for the new value.
- </dl>
- </div>
- <div class='event-definition'>
- <dl>
- <dt><dfn id=eventdef-event-durationchange class=event-durationchange><strong>durationchange</strong></dfn>
- <dd>
- <table >
- <tr><th><em>Type:</em><td>durationchange
- <tr><th><em>Namespace:</em><td>TBD
- <tr><th><em>Interface:</em><td><a href="http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-Event">Event</a>
- <tr><th><em>Cancelable:</em><td>No
- <tr><th><em>Bubbles:</em><td>No
- <tr><th><em>Target:</em><td>Element
- <tr><th><em>Context info:</em><td>None
- </table>
- <p>The <code title=event-durationchange>durationchange</code> event is fired if the
- <code title=dom-media-duration><a href="#duration">duration</a></code>
- property of the media element changes. One reason this might occur is when the
- <code title=dom-media-duration><a href="#duration">duration</a></code> for the media element
- which was previously estimated becomes known during loading. It might change for
- other reasons that are not defined here.
- </dl>
- </div>
- <div class='event-definition'>
- <dl>
- <dt><dfn id=eventdef-event-availabledurationchange class=event-availabledurationchange><strong>availabledurationchange</strong></dfn>
- <dd>
- <table >
- <tr><th><em>Type:</em><td>availabledurationchange
- <tr><th><em>Namespace:</em><td>TBD
- <tr><th><em>Interface:</em><td><a href="http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-Event">Event</a>
- <tr><th><em>Cancelable:</em><td>No
- <tr><th><em>Bubbles:</em><td>No
- <tr><th><em>Target:</em><td>Element
- <tr><th><em>Context info:</em><td>None
- </table>
- <p>The <code title=event-availabledurationchange>availabledurationchange</code>
- event is fired if the <code title=dom-media-availableduration><a href="#availableduration">availableduration</a></code>
- property of the media element changes. One reason this might occur is during progressive
- download as more media is downloaded. It might change for other reasons that are not
- defined here.
- </dl>
- <p class="big-issue">How often should the availabledurationchange event fire? Too often and we
- waste a lot of cycles, too infrequently and the UI can get out of sync with reality.
- Specifying a minimum time interval, eg. "at least once a second", is wasteful in a long file
- when the play head is not near the available duration, but useful when the two are close...
- </p>
- </div>
- <div class='event-definition'>
- <dl>
- <dt><dfn id=eventdef-event-loop class=event-loop><strong>loop</strong></dfn>
- <dd>
- <table >
- <tr><th><em>Type:</em><td>loop
- <tr><th><em>Namespace:</em><td>TBD
- <tr><th><em>Interface:</em><td><a href="http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-Event">Event</a>
- <tr><th><em>Cancelable:</em><td>No
- <tr><th><em>Bubbles:</em><td>No
- <tr><th><em>Target:</em><td>Element
- <tr><th><em>Context info:</em><td>None
- </table>
- <p>The <code title=event-loop>loop</code> event is fired when the media is playing
- through a loop prior to its final loop according to its <code title=dom-media-loopcount>
- <a href="#loopcount">loopCount</a></code>.
- </dl>
- </div>
- <div class='event-definition'>
- <dl>
- <dt><dfn id=eventdef-event-playcomplete class=event-playcomplete><strong>playcomplete</strong></dfn>
- <dd>
- <table >
- <tr><th><em>Type:</em><td>playcomplete
- <tr><th><em>Namespace:</em><td>TBD
- <tr><th><em>Interface:</em><td><a href="http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-Event">Event</a>
- <tr><th><em>Cancelable:</em><td>No
- <tr><th><em>Bubbles:</em><td>No
- <tr><th><em>Target:</em><td>Element
- <tr><th><em>Context info:</em><td>None
- </table>
- <p>The <code title=event-playcomplete>playcomplete</code> event is fired when the element
- automatically stops playback because it reaches the limit of playback (i.e., the value of the
- <code title=dom-media-endtime><a href="#endtime">endTime</a></code>
- property if playing forward, <code title=dom-media-starttime><a href="#starttime">startTime</a></code>
- if playing backward) and the media is playing through its final repetition, according to its
- <code title=dom-media-loopcount><a href="#loopcount">loopCount</a></code>.
- </dl>
- </div>
- <div class='event-definition'>
- <dl>
- <dt><dfn id=eventdef-event-timejump class=event-timejump><strong>timejump</strong></dfn>
- <dd>
- <table >
- <tr><th><em>Type:</em><td>timejump
- <tr><th><em>Namespace:</em><td>TBD
- <tr><th><em>Interface:</em><td><a href="http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-Event">Event</a>
- <tr><th><em>Cancelable:</em><td>No
- <tr><th><em>Bubbles:</em><td>No
- <tr><th><em>Target:</em><td>Element
- <tr><th><em>Context info:</em><td>None
- </table>
- <p>The <code title=event-timechange>timechange</code> event is fired when the media element's
- current time changes by any other means than playback at the current rate. This can be either by an explicit
- change to the <code title=dom-media-currenttime><a href="#currenttime">currentTime</a></code>
- property (e.g., under script control) or by any other means than playback at the current rate.
- In other words, this event is not fired during play back but is fired if the
- <code title=dom-media-currenttime><a href="#currenttime">currentTime</a></code>
- property is explicitly changed. Setting the <code title=dom-media-currenttime>
- <a href="#currenttime">currentTime</a></code> to its current value shall not fire the timechange event.
- </dl>
- </div>
- <h3 id=playback-events><span class=secno>3.2.</span> Media playback events</h3>
- <div class='event-definition'>
- <dl>
- <dt><dfn id=eventdef-event-mediaunderstandable class=event-mediaunderstandable><strong>mediaunderstandable</strong></dfn>
- <dd>
- <table >
- <tr><th><em>Type:</em><td>mediaunderstandable
- <tr><th><em>Namespace:</em><td>TBD
- <tr><th><em>Interface:</em><td><a href="http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-Event">Event</a>
- <tr><th><em>Cancelable:</em><td>No
- <tr><th><em>Bubbles:</em><td>No
- <tr><th><em>Target:</em><td>Element
- <tr><th><em>Context info:</em><td>None
- </table>
- <p>The <code title=event-mediaunderstandable>mediaunderstandable</code> event is
- fired when the element's <code title=dom-media-mediastatus>
- <a href="#mediastatus">mediaStatus</a></code> transitions to or
- past the UNDERSTANDABLE state. This indicates that attributes of the object that are
- dependent upon the media resource or the loading of the resource (e.g.,
- <code title=dom-media-duration><a href="#duration">duration</a></code>,
- <code title=dom-media-availableduration><a href="#availableduration">availableDuration</a></code>,
- <code title=dom-media-hasaudio><a href="#hasaudio">hasAudio</a></code>, etc)
- can be retrieved. The UNDERSTANDABLE state does not
- indicate that the element can render anything (e.g., drawing a frame if the media
- is visual or decoding audio if it has audio).
- </dl>
- </div>
- <div class='event-definition'>
- <dl>
- <dt><dfn id=eventdef-event-mediapresentable class=event-mediapresentable><strong>mediapresentable</strong></dfn>
- <dd>
- <table >
- <tr><th><em>Type:</em><td>mediapresentable
- <tr><th><em>Namespace:</em><td>TBD
- <tr><th><em>Interface:</em><td><a href="http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-Event">Event</a>
- <tr><th><em>Cancelable:</em><td>No
- <tr><th><em>Bubbles:</em><td>No
- <tr><th><em>Target:</em><td>Element
- <tr><th><em>Context info:</em><td>None
- </table>
- <p>The <code title=event-mediapresentable>mediapresentable</code> event is fired
- when the element's <code title=dom-media-mediastatus>
- <a href="#mediastatus">mediaStatus</a></code> transitions to or past the
- the PRESENTABLE state. This indicates that the media object can render something at
- the current time (e.g., it can render the video frame at the current time). The
- PRESENTABLE state does not however indicate that it has loaded sufficient media so
- that setting the <code title=dom-media-currentrate><a href="#currentrate">currentRate</a></code>
- property to a non-zero value will render anything more (video or audio).
- </dl>
- </div>
- <div class='event-definition'>
- <dl>
- <dt><dfn id=eventdef-event-mediaplayable class=event-mediaplayable><strong>mediaplayable</strong></dfn>
- <dd>
- <table >
- <tr><th><em>Type:</em><td>mediaplayable
- <tr><th><em>Namespace:</em><td>TBD
- <tr><th><em>Interface:</em><td><a href="http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-Event">Event</a>
- <tr><th><em>Cancelable:</em><td>No
- <tr><th><em>Bubbles:</em><td>No
- <tr><th><em>Target:</em><td>Element
- <tr><th><em>Context info:</em><td>None
- </table>
- <p>The <code title=event-mediaplayable>mediaplayable</code> event is fired
- when the element's <code title=dom-media-mediastatus>
- <a href="#mediastatus">mediaStatus</a></code> transitions to or past the
- PLAYABLE state. This indicates the object has loaded sufficient media data so that
- if the <code title=dom-media-currentrate><a href="#currentrate">currentRate</a></code>
- is set to a non-zero value, time will advance. An example usage
- would be not to allow the play button in a custom movie controller to take effect
- unless this state or better has been reached.
- </dl>
- </div>
- <div class='event-definition'>
- <dl>
- <dt><dfn id=eventdef-event-mediacanplaythrough class=event-mediacanplaythrough><strong>mediacanplaythrough</strong></dfn>
- <dd>
- <table >
- <tr><th><em>Type:</em><td>mediacanplaythrough
- <tr><th><em>Namespace:</em><td>TBD
- <tr><th><em>Interface:</em><td><a href="http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-Event">Event</a>
- <tr><th><em>Cancelable:</em><td>No
- <tr><th><em>Bubbles:</em><td>No
- <tr><th><em>Target:</em><td>Element
- <tr><th><em>Context info:</em><td>None
- </table>
- <p>The <code title=event-mediacanplaythrough>mediacanplaythrough</code> event is
- fired when the element's <code title=dom-media-mediastatus>
- <a href="#mediastatus">mediaStatus</a></code> transitions to
- or past the PLAYTHROUGHOK state. This indicates the object has loaded sufficient
- media data and playback conditions (e.g., download rates, data rate of the media,
- playback rate) are sufficient to allow for uninterrupted playback (i.e., no stalls)
- if the current playback rate is set to the value of <code title=dom-media-playrate>
- <a href="#playrate">playRate</a></code>.
- </dl>
- </div>
- <h2 id="window-additions"><span class="secno">4.</span> WindowHTML Additions</h2>
- <p>The <code><a href="#windowhtml">WindowHTML</a></code> object must
- provide the following constructors:
-
- <dl>
- <dt><dfn id=audio-constructor title=dom-audio-constructor><code>Audio()</code></dfn>
-
- <dd>
- <p>Constructs an <code><a href="#html-audio-element">
- HTMLAudioElement</a></code> object (a new <code title=element-audio><a href="#audio">audio</a></code>
- element).
- <dt><dfn id=video-constructor title=dom-video-constructor><code>Video()</code></dfn>
-
- <dt><dfn id=video-constructor-w title=dom-video-constructor-w><code>Video(in unsigned long <var
- title="">width</var>)</code></dfn>
-
- <dt><dfn id=video-constructor-wh title=dom-video-constructor-wh><code>Video(in unsigned long <var
- title="">width</var>, in unsigned long <var title="">height</var>)</code></dfn>
-
- <dd>
- <p>Constructs an <code><a href="#html-video-element">
- HTMLVideoElement</a></code> object (a new
- <code title=element-video><a href="#video">video</a></code> element). If the <var title="">width</var>
- and <var title="">height</var> arguments are both present, the new object's <code title=video-element-width>
- <a href="#dom-video-width">width</a></code> and <code title=video-element-height><a href="#dom-video-height">
- height</a></code> content attributes must be set to <var title="">width</var> and
- <var title="">height</var>. If only the <var title="">width</var> argument is present,
- the new object's <code title=video-element-width><a href="#dom-video-width">width</a></code> content
- attribute must be set to <var title="">width</var> and the <code title=video-element-height>
- <a href="#dom-video-height">height</a></code> content attribute must be set to a value that
- maintains the media resource's intrinsic aspect ratio.
- </dl>
- <h2 class=no-num id=references>References</h2>
- <p>All references are normative unless marked "Informative".
- <dl>
- <dt id=refsCSS21>[CSS21]
- <dd><cite><a href="http://www.w3.org/TR/2006/WD-CSS21-20061106">
- Cascading Style Sheets, level 2 revision 1 CSS 2.1 Specification
- </a></cite>,
- Håkon Wium Lie, Tantek Çelik, Bert Bos, and Ian Hickson, Editors.
- World Wide Web Consortium, 06 Nov 2006.
- CSS 2.1 Specification is available at http://www.w3.org/TR/2006/WD-CSS21-20061106
-
- <dt id=refsRFC2046>[RFC2046]
-
- <dd><cite><a href="http://www.ietf.org/rfc/rfc2046">
- Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types
- </a></cite>,
- N. Freed, N. Borenstein. IETF, November 1996.
- RFC 2046 is available at http://www.ietf.org/rfc/rfc2046
-
- <dt id=refsRFC4281>[RFC4281]
-
- <dd><cite><a href="http://www.ietf.org/rfc/rfc4281">
- The Codecs Parameter for "Bucket" Media Types
- </a></cite>,
- R. Gellens, D. Singer, P. Frojdh. IETF, November 2005.
- RFC 4281 is available at http://www.ietf.org/rfc/rfc4281
-
- </dl>
-
- <h2 class=no-num id=acknowledgements>Acknowledgements</h2>
- <p class="big-issue">Coming soon</p>
-
- </body>
- </html>
|