HTML5

4.8.6 The video element

ISSUE-9 (video-accessibility) blocks progress to Last Call

A video element is used for playing videos or movies.

Content may be provided inside the video element. User agents should not show this content to the user; it is intended for older Web browsers which do not support video , so that legacy video plugins can be tried, or to show text to the users of these older browsers informing them of how to access the video contents.

In particular, this content is not intended to address accessibility concerns. To make video content accessible to the blind, deaf, and those with other physical or cognitive disabilities, authors are expected to provide alternative media streams and/or to embed accessibility aids (such as caption or subtitle tracks, audio description tracks, or sign-language overlays) into their media streams.

The video element is a media element whose media data is ostensibly video data, possibly with associated audio data.

The src , preload , autoplay , loop , and controls attributes are the attributes common to all media elements.

The poster attribute gives the address of an image file that the user agent can show while no video data is available. The attribute, if present, must contain a valid non-empty URL potentially surrounded by spaces. If the specified resource is to be used, then, when the element is created or when the poster attribute is set, if its value is not the empty string, its value must be resolved relative to the element, and if that is successful, the resulting absolute URL must be fetched, from the element's Document 's origin; this must delay the load event of the element's document. The poster frame is then the image obtained from that resource, if any.

The image given by the poster attribute, the poster frame, is intended to be a representative frame of the video (typically one of the first non-blank frames) that gives the user an idea of what the video is like.

video . videoWidth video . videoHeight These attributes return the intrinsic dimensions of the video, or zero if the dimensions are not known.

The intrinsic width and intrinsic height of the media resource are the dimensions of the resource in CSS pixels after taking into account the resource's dimensions, aspect ratio, clean aperture, resolution, and so forth, as defined for the format used by the resource. If an anamorphic format does not define how to apply the aspect ratio to the video data's dimensions to obtain the "correct" dimensions, then the user agent must apply the ratio by increasing one dimension and leaving the other unchanged. The videoWidth IDL attribute must return the intrinsic width of the video in CSS pixels. The videoHeight IDL attribute must return the intrinsic height of the video in CSS pixels. If the element's readyState attribute is HAVE_NOTHING , then the attributes must return 0.

The video element supports dimension attributes.

Video content should be rendered inside the element's playback area such that the video content is shown centered in the playback area at the largest possible size that fits completely within it, with the video content's aspect ratio being preserved. Thus, if the aspect ratio of the playback area does not match the aspect ratio of the video, the video will be shown letterboxed or pillarboxed. Areas of the element's playback area that do not contain the video represent nothing. The intrinsic width of a video element's playback area is the intrinsic width of the video resource, if that is available; otherwise it is the intrinsic width of the poster frame, if that is available; otherwise it is 300 CSS pixels. The intrinsic height of a video element's playback area is the intrinsic height of the video resource, if that is available; otherwise it is the intrinsic height of the poster frame, if that is available; otherwise it is 150 CSS pixels. User agents should provide controls to enable or disable the display of closed captions, audio description tracks, and other additional data associated with the video stream, though such features should, again, not interfere with the page's normal rendering. User agents may allow users to view the video content in manners more suitable to the user (e.g. full-screen or in an independent resizable window). As for the other user interface features, controls to enable this should not interfere with the page's normal rendering unless the user agent is exposing a user interface. In such an independent context, however, user agents may make full user interfaces visible, with, e.g., play, pause, seeking, and volume controls, even if the controls attribute is absent. User agents may allow video playback to affect system features that could interfere with the user's experience; for example, user agents could disable screensavers while video playback is in progress.

This example shows how to detect when a video has failed to play correctly: <script> function failed(e) { // video playback failed - show a message saying why switch (e.target.error.code) { case e.target.error.MEDIA_ERR_ABORTED: alert('You aborted the video playback.'); break; case e.target.error.MEDIA_ERR_NETWORK: alert('A network error caused the video download to fail part-way.'); break; case e.target.error.MEDIA_ERR_DECODE: alert('The video playback was aborted due to a corruption problem or because the video used features your browser did not support.'); break; case e.target.error.MEDIA_ERR_SRC_NOT_SUPPORTED: alert('The video could not be loaded, either because the server or network failed or because the format is not supported.'); break; default: alert('An unknown error occurred.'); break; } } </script> <p><video src="tgif.vid" autoplay controls onerror="failed(event)"></video></p> <p><a href="tgif.vid">Download the video file</a>.</p>

4.8.7 The audio element

An audio element represents a sound or audio stream.

Content may be provided inside the audio element. User agents should not show this content to the user; it is intended for older Web browsers which do not support audio , so that legacy audio plugins can be tried, or to show text to the users of these older browsers informing them of how to access the audio contents.

In particular, this content is not intended to address accessibility concerns. To make audio content accessible to the deaf or to those with other physical or cognitive disabilities, authors are expected to provide alternative media streams and/or to embed accessibility aids (such as transcriptions) into their media streams.

The audio element is a media element whose media data is ostensibly audio data.

The src , preload , autoplay , loop , and controls attributes are the attributes common to all media elements.

When an audio element is potentially playing, it must have its audio data played synchronized with the current playback position, at the specified volume with the specified mute state. When an audio element is not potentially playing, audio must not play for the element.

audio = new Audio ( [ url ] ) Returns a new audio element, with the src attribute set to the value passed in the argument, if applicable.

Two constructors are provided for creating HTMLAudioElement objects (in addition to the factory methods from DOM Core such as createElement() ): Audio() and Audio( src ) . When invoked as constructors, these must return a new HTMLAudioElement object (a new audio element). The element must have its preload attribute set to the literal value " auto ". If the src argument is present, the object created must have its src content attribute set to the provided value, and the user agent must invoke the object's resource selection algorithm before returning. The element's document must be the active document of the browsing context of the Window object on which the interface object of the invoked constructor is found.

4.8.8 The source element

The source element allows authors to specify multiple alternative media resources for media elements. It does not represent anything on its own.

The src attribute gives the address of the media resource. The value must be a valid non-empty URL potentially surrounded by spaces. This attribute must be present.

Dynamically modifying a source element and its attribute when the element is already inserted in a video or audio element will have no effect. To change what is playing, either just use the src attribute on the media element directly, or call the load() method on the media element after manipulating the source elements.

The type attribute gives the type of the media resource, to help the user agent determine if it can play this media resource before fetching it. If specified, its value must be a valid MIME type. The codecs parameter, which certain MIME types define, might be necessary to specify exactly how the resource is encoded. [RFC4281]

The following list shows some examples of how to use the codecs= MIME parameter in the type attribute. H.264 Constrained baseline profile video (main and extended video compatible) level 3 and Low-Complexity AAC audio in MP4 container <source src='video.mp4' type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'> H.264 Extended profile video (baseline-compatible) level 3 and Low-Complexity AAC audio in MP4 container <source src='video.mp4' type='video/mp4; codecs="avc1.58A01E, mp4a.40.2"'> H.264 Main profile video level 3 and Low-Complexity AAC audio in MP4 container <source src='video.mp4' type='video/mp4; codecs="avc1.4D401E, mp4a.40.2"'> H.264 'High' profile video (incompatible with main, baseline, or extended profiles) level 3 and Low-Complexity AAC audio in MP4 container <source src='video.mp4' type='video/mp4; codecs="avc1.64001E, mp4a.40.2"'> MPEG-4 Visual Simple Profile Level 0 video and Low-Complexity AAC audio in MP4 container <source src='video.mp4' type='video/mp4; codecs="mp4v.20.8, mp4a.40.2"'> MPEG-4 Advanced Simple Profile Level 0 video and Low-Complexity AAC audio in MP4 container <source src='video.mp4' type='video/mp4; codecs="mp4v.20.240, mp4a.40.2"'> MPEG-4 Visual Simple Profile Level 0 video and AMR audio in 3GPP container <source src='video.3gp' type='video/3gpp; codecs="mp4v.20.8, samr"'> Theora video and Vorbis audio in Ogg container <source src='video.ogv' type='video/ogg; codecs="theora, vorbis"'> Theora video and Speex audio in Ogg container <source src='video.ogv' type='video/ogg; codecs="theora, speex"'> Vorbis audio alone in Ogg container <source src='audio.ogg' type='audio/ogg; codecs=vorbis'> Speex audio alone in Ogg container <source src='audio.spx' type='audio/ogg; codecs=speex'> FLAC audio alone in Ogg container <source src='audio.oga' type='audio/ogg; codecs=flac'> Dirac video and Vorbis audio in Ogg container <source src='video.ogv' type='video/ogg; codecs="dirac, vorbis"'> Theora video and Vorbis audio in Matroska container <source src='video.mkv' type='video/x-matroska; codecs="theora, vorbis"'>

The media attribute gives the intended media type of the media resource, to help the user agent determine if this media resource is useful to the user before fetching it. Its value must be a valid media query.

The default, if the media attribute is omitted, is " all ", meaning that by default the media resource is suitable for all media.

If a source element is inserted as a child of a media element that has no src attribute and whose networkState has the value NETWORK_EMPTY , the user agent must invoke the media element's resource selection algorithm. The IDL attributes src , type , and media must reflect the respective content attributes of the same name.

If the author isn't sure if the user agents will all be able to render the media resources provided, the author can listen to the error event on the last source element and trigger fallback behavior: <script> function fallback(video) { // replace <video> with its contents while (video.hasChildNodes()) { if (video.firstChild instanceof HTMLSourceElement) video.removeChild(video.firstChild); else video.parentNode.insertBefore(video.firstChild, video); } video.parentNode.removeChild(video); } </script> <video controls autoplay> <source src='video.mp4' type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'> <source src='video.ogv' type='video/ogg; codecs="theora, vorbis"' onerror="fallback(parentNode)"> ... </video>

4.8.9 Media elements

Media elements ( audio and video , in this specification) implement the following interface:

interface HTMLMediaElement : HTMLElement { // error state readonly attribute MediaError error; // network state attribute DOMString src; readonly attribute DOMString currentSrc; const unsigned short NETWORK_EMPTY = 0; const unsigned short NETWORK_IDLE = 1; const unsigned short NETWORK_LOADING = 2; const unsigned short NETWORK_NO_SOURCE = 3; readonly attribute unsigned short networkState; attribute DOMString preload; readonly attribute TimeRanges buffered; void load(); DOMString canPlayType(in DOMString type); // ready state const unsigned short HAVE_NOTHING = 0; const unsigned short HAVE_METADATA = 1; const unsigned short HAVE_CURRENT_DATA = 2; const unsigned short HAVE_FUTURE_DATA = 3; const unsigned short HAVE_ENOUGH_DATA = 4; readonly attribute unsigned short readyState; readonly attribute boolean seeking; // playback state attribute double currentTime; readonly attribute double initialTime; readonly attribute double duration; readonly attribute Date startOffsetTime; readonly attribute boolean paused; attribute double defaultPlaybackRate; attribute double playbackRate; readonly attribute TimeRanges played; readonly attribute TimeRanges seekable; readonly attribute boolean ended; attribute boolean autoplay; attribute boolean loop; void play(); void pause(); // controls attribute boolean controls; attribute double volume; attribute boolean muted; };

The media element attributes , src , preload , autoplay , loop , and controls , apply to all media elements. They are defined in this section.

Media elements are used to present audio data, or video and audio data, to the user. This is referred to as media data in this section, since this section applies equally to media elements for audio or for video. The term media resource is used to refer to the complete set of media data, e.g. the complete video file, or complete audio file.

Except where otherwise specified, the task source for all the tasks queued in this section and its subsections is the media element event task source .

4.8.9.1 Error codes

media . error Returns a MediaError object representing the current error state of the element. Returns null if there is no error.

All media elements have an associated error status, which records the last error the element encountered since its resource selection algorithm was last invoked. The error attribute, on getting, must return the MediaError object created for this last error, or null if there has not been an error.

interface MediaError { const unsigned short MEDIA_ERR_ABORTED = 1; const unsigned short MEDIA_ERR_NETWORK = 2; const unsigned short MEDIA_ERR_DECODE = 3; const unsigned short MEDIA_ERR_SRC_NOT_SUPPORTED = 4; readonly attribute unsigned short code; };

media . error . code Returns the current error's error code, from the list below.

The code attribute of a MediaError object must return the code for the error, which must be one of the following:

MEDIA_ERR_ABORTED (numeric value 1) The fetching process for the media resource was aborted by the user agent at the user's request. MEDIA_ERR_NETWORK (numeric value 2) A network error of some description caused the user agent to stop fetching the media resource, after the resource was established to be usable. MEDIA_ERR_DECODE (numeric value 3) An error of some description occurred while decoding the media resource, after the resource was established to be usable. MEDIA_ERR_SRC_NOT_SUPPORTED (numeric value 4) The media resource indicated by the src attribute was not suitable.

4.8.9.2 Location of the media resource

The src content attribute on media elements gives the address of the media resource (video, audio) to show. The attribute, if present, must contain a valid non-empty URL potentially surrounded by spaces.

media . currentSrc Returns the address of the current media resource. Returns the empty string when there is no media resource.

The currentSrc IDL attribute is initially the empty string. Its value is changed by the resource selection algorithm defined below.

There are two ways to specify a media resource, the src attribute, or source elements. The attribute overrides the elements.

4.8.9.3 MIME types

A media resource can be described in terms of its type, specifically a MIME type, in some cases with a codecs parameter. (Whether the codecs parameter is allowed or not depends on the MIME type.) [RFC4281]

Types are usually somewhat incomplete descriptions; for example " video/mpeg " doesn't say anything except what the container type is, and even a type like " video/mp4; codecs="avc1.42E01E, mp4a.40.2" " doesn't include information like the actual bitrate (only the maximum bitrate). Thus, given a type, a user agent can often only know whether it might be able to play media of that type (with varying levels of confidence), or whether it definitely cannot play media of that type.

A type that the user agent knows it cannot render is one that describes a resource that the user agent definitely does not support, for example because it doesn't recognize the container type, or it doesn't support the listed codecs.

The MIME type " application/octet-stream " with no parameters is never a type that the user agent knows it cannot render. User agents must treat that type as equivalent to the lack of any explicit Content-Type metadata when it is used to label a potential media resource.

In the absence of a specification to the contrary, the MIME type " application/octet-stream " when used with parameters, e.g. " application/octet-stream;codecs=theora ", is a type that the user agent knows it cannot render, since that parameter is not defined for that type.

media . canPlayType ( type ) Returns the empty string (a negative response), "maybe", or "probably" based on how confident the user agent is that it can play media resources of the given type.

The canPlayType( type ) method must return the empty string if type is a type that the user agent knows it cannot render or is the type " application/octet-stream "; it must return " probably " if the user agent is confident that the type represents a media resource that it can render if used in with this audio or video element; and it must return " maybe " otherwise. Implementors are encouraged to return " maybe " unless the type can be confidently established as being supported or not. Generally, a user agent should never return " probably " for a type that allows the codecs parameter if that parameter is not present.

This script tests to see if the user agent supports a (fictional) new format to dynamically decide whether to use a video element or a plugin: <section id="video"> <p><a href="playing-cats.nfv">Download video</a></p> </section> <script> var videoSection = document.getElementById('video'); var videoElement = document.createElement('video'); var support = videoElement.canPlayType('video/x-new-fictional-format;codecs="kittens,bunnies"'); if (support != "probably" && "New Fictional Video Plug-in" in navigator.plugins) { // not confident of browser support // but we have a plugin // so use plugin instead videoElement = document.createElement("embed"); } else if (support == "") { // no support from browser and no plugin // do nothing videoElement = null; } if (videoElement) { while (videoSection.hasChildNodes()) videoSection.removeChild(videoSection.firstChild); videoElement.setAttribute("src", "playing-cats.nfv"); videoSection.appendChild(videoElement); } </script>

The type attribute of the source element allows the user agent to avoid downloading resources that use formats it cannot render.

4.8.9.4 Network states

media . networkState Returns the current state of network activity for the element, from the codes in the list below.

As media elements interact with the network, their current network activity is represented by the networkState attribute. On getting, it must return the current network state of the element, which must be one of the following values:

NETWORK_EMPTY (numeric value 0) The element has not yet been initialized. All attributes are in their initial states. NETWORK_IDLE (numeric value 1) The element 's resource selection algorithm is active and resource, but it is not actually using the network at this time. NETWORK_LOADING (numeric value 2) The user agent is actively trying to download data. NETWORK_NO_SOURCE (numeric value 3) The element 's resource selection algorithm is active, but it resource to use.

The resource selection algorithm defined below describes exactly when the networkState attribute changes value and what events fire to indicate changes in this state.

4.8.9.5 Loading the media resource

media . load () Causes the element to reset and start selecting and loading a new media resource from scratch.

The preload attribute is an enumerated attribute. The following table lists the keywords and states for the attribute — the keywords in the left column map to the states in the cell in the second column on the same row as the keyword.

Keyword State Brief description none None Hints to the user agent that either the author does not expect the user to need the media resource, or that the server wants to minimise unnecessary traffic. metadata Metadata Hints to the user agent that the author does not expect the user to need the media resource, but that fetching the resource metadata (dimensions, first frame, track list, duration, etc) is reasonable. auto Automatic Hints to the user agent that the user agent can put the user's needs first without risk to the server, up to and including optimistically downloading the entire resource.

The empty string is also a valid keyword, and maps to the Automatic state. The attribute's missing value default is user-agent defined, though the Metadata state is suggested as a compromise between reducing server load and providing an optimal user experience.

The preload attribute is intended to provide a hint to the user agent about what the author thinks will lead to the best user experience. The attribute may be ignored altogether, for example based on explicit user preferences or based on the available connectivity. The preload IDL attribute must reflect the content attribute of the same name, limited to only known values.

The autoplay attribute can override the preload attribute (since if the media plays, it naturally has to buffer first, regardless of the hint given by the preload attribute). Including both is not an error, however.

media . buffered Returns a TimeRanges object that represents the ranges of the media resource that the user agent has buffered.

The buffered attribute must return a new static normalized TimeRanges object that represents the ranges of the media resource, if any, that the user agent has buffered, at the time the attribute is evaluated. Users agents must accurately determine the ranges available, even for media streams where this can only be determined by tedious inspection. Typically this will be a single range anchored at the zero point, but if, e.g. the user agent uses HTTP range requests in response to seeking, then there could be multiple ranges. User agents may discard previously buffered data. Thus, a time position included within a range of the objects return by the buffered attribute at one time can end up being not included in the range(s) of objects returned by the same attribute at later times.

4.8.9.6 Offsets into the media resource

The loop attribute is a boolean attribute that, if specified, indicates that the media element is to seek back to the start of the media resource upon reaching the end.

The loop IDL attribute must reflect the content attribute of the same name.

4.8.9.7 The ready states

media . readyState Returns a value that expresses the current state of the element with respect to rendering the current playback position, from the codes in the list below.

Media elements have a ready state, which describes to what degree they are ready to be rendered at the current playback position. The possible values are as follows; the ready state of a media element at any particular time is the greatest value describing the state of the element:

It is possible for the ready state of a media element to jump between these states discontinuously. For example, the state of a media element can jump straight from HAVE_METADATA to HAVE_ENOUGH_DATA without passing through the HAVE_CURRENT_DATA and HAVE_FUTURE_DATA states.

The readyState IDL attribute must, on getting, return the value described above that describes the current ready state of the media element.

The autoplay attribute is a boolean attribute. When present, the user agent (as described in the algorithm described herein) will automatically begin playback of the media resource as soon as it can do so without stopping.

Authors are urged to use the autoplay attribute rather than using script to trigger automatic playback, as this allows the user to override the automatic playback when it is not desired, e.g. when using a screen reader. Authors are also encouraged to consider not using the automatic playback behavior at all, and instead to let the user agent wait for the user to start playback explicitly.

The autoplay IDL attribute must reflect the content attribute of the same name.

4.8.9.8 Playing the media resource

media . paused Returns true if playback is paused; false otherwise. media . ended Returns true if playback has reached the end of the media resource. media . defaultPlaybackRate [ = value ] Returns the default rate of playback, for when the user is not fast-forwarding or reversing through the media resource. Can be set, to change the default rate of playback. The default rate has no direct effect on playback, but if the user switches to a fast-forward mode, when they return to the normal playback mode, it is expected that the rate of playback will be returned to the default rate of playback. media . playbackRate [ = value ] Returns the current rate playback, where 1.0 is normal speed. Can be set, to change the rate of playback. media . played Returns a TimeRanges object that represents the ranges of the media resource that the user agent has played. media . play () Sets the paused attribute to false, loading the media resource and beginning playback if necessary. If the playback had ended, will restart it from the start. media . pause () Sets the paused attribute to true, loading the media resource if necessary.

4.8.9.9 Seeking

media . seeking Returns true if the user agent is currently seeking. media . seekable Returns a TimeRanges object that represents the ranges of the media resource to which it is possible for the user agent to seek.

4.8.9.10 User interface

The controls attribute is a boolean attribute. If present, it indicates that the author has not provided a scripted controller and would like the user agent to provide its own set of controls.

If the attribute is present, or if scripting is disabled for the media element, then the user agent should expose a user interface to the user . This user interface should include features to begin playback, pause playback, seek to an arbitrary position in the content (if the content supports arbitrary seeking), change the volume, change the display of closed captions or embedded sign-language tracks, select different audio tracks or turn on audio descriptions, and show the media content in manners more suitable to the user (e.g. full-screen video or in an independent resizable window). Other controls may also be made available. Even when the attribute is absent, however, user agents may provide controls to affect playback of the media resource (e.g. play, pause, seeking, and volume controls), but such features should not interfere with the page's normal rendering. For example, such features could be exposed in the media element's context menu. Where possible (specifically, for starting, stopping, pausing, and unpausing playback, for seeking, and for muting or changing the volume of the audio), user interface features exposed by the user agent must be implemented in terms of the DOM API described above, so that, e.g., all the same events fire. The controls IDL attribute must reflect the content attribute of the same name.

media . volume [ = value ] Returns the current playback volume, as a number in the range 0.0 to 1.0, where 0.0 is the quietest and 1.0 the loudest. Can be set, to change the volume. Throws an INDEX_SIZE_ERR if the new value is not in the range 0.0 .. 1.0. media . muted [ = value ] Returns true if audio is muted, overriding the volume attribute, and false if the volume attribute is being honored. Can be set, to change whether the audio is muted or not.

The volume attribute must return the playback volume of any audio portions of the media element, in the range 0.0 (silent) to 1.0 (loudest). Initially, the volume must be 1.0, but user agents may remember the last set value across sessions, on a per-site basis or otherwise, so the volume may start at other values. On setting, if the new value is in the range 0.0 to 1.0 inclusive, the attribute must be set to the new value and the playback volume must be correspondingly adjusted as soon as possible after setting the attribute, with 0.0 being silent, and 1.0 being the loudest setting, values in between increasing in loudness. The range need not be linear. The loudest setting may be lower than the system's loudest possible setting; for example the user could have set a maximum volume. If the new value is outside the range 0.0 to 1.0 inclusive, then, on setting, an INDEX_SIZE_ERR exception must be raised instead. The muted attribute must return true if the audio channels are muted and false otherwise. Initially, the audio channels should not be muted (false), but user agents may remember the last set value across sessions, on a per-site basis or otherwise, so the muted state may start as muted (true). On setting, the attribute must be set to the new value; if the new value is true, audio playback for this media resource must then be muted, and if false, audio playback must then be enabled. Whenever either the muted or volume attributes are changed, the user agent must queue a task to fire a simple event named volumechange at the media element.

4.8.9.11 Time ranges

Objects implementing the TimeRanges interface represent a list of ranges (periods) of time.

interface TimeRanges { readonly attribute unsigned long length; double start(in unsigned long index); double end(in unsigned long index); };

media . length Returns the number of ranges in the object. time = media . start ( index ) Returns the time for the start of the range with the given index. Throws an INDEX_SIZE_ERR if the index is out of range. time = media . end ( index ) Returns the time for the end of the range with the given index. Throws an INDEX_SIZE_ERR if the index is out of range.

The length IDL attribute must return the number of ranges represented by the object. The start( index ) method must return the position of the start of the index th range represented by the object, in seconds measured from the start of the timeline that the object covers. The end( index ) method must return the position of the end of the index th range represented by the object, in seconds measured from the start of the timeline that the object covers. These methods must raise INDEX_SIZE_ERR exceptions if called with an index argument greater than or equal to the number of ranges represented by the object. When a TimeRanges object is said to be a normalized TimeRanges object , the ranges it represents must obey the following criteria: The start of a range must be greater than the end of all earlier ranges.

The start of a range must be less than the end of that same range. In other words, the ranges in such an object are ordered, don't overlap, aren't empty, and don't touch (adjacent ranges are folded into one bigger range). The timelines used by the objects returned by the buffered , seekable and played IDL attributes of media elements must be that element's media timeline.

4.8.9.12 Event summary

This section is non-normative.

The following events fire on media elements as part of the processing model described above: