This section defines the SMIL media object modules, which are composed of a BasicMedia module and five modules with additional functionality that build on top of the BasicMedia module: the MediaClipping, MediaClipMarkers, MediaParam, and MediaAccessibility modules. These modules contain elements and attributes used to describe media objects. Additionally, a BrushMedia element is provided which can be used as a media object. Since these elements and attributes are defined in a series of modules, designers of other markup languages can reuse the SMIL media module when they need to include media objects into their language.
Changes with respect to the media object elements in SMIL 1.0 provide additional functionality that was brought up as Requirements of the Working Group, and those differences are explained in Appendix A and Appendix B.
This module defines the baseline functionality of a SMIL player. It is very close in functionality to the media object specification in SMIL 1.0.
The media object elements allow the inclusion of media objects into a SMIL presentation. Media objects are included by reference (using a URI). The following media elements are defined in this section:
All of these media elements are semantically identical. When playing back a media object, the player must not derive the exact type of the media object from the name of the media object element. Instead, it must rely solely on other sources about the type, such as type information contained in the type attribute, or the type information communicated by a server or the operating system.
Authors, however, should make sure that the group into which of the media object falls (animation, audio, img, video, text or textstream) is reflected in the element name. This is in order to increase the readability of the SMIL document. When in doubt about the group of a media object, authors should use the generic "ref" element.
The animation element defined here should not be confused with the elements defined in the SMIL 2.0 Animation Module. The animation element defined in this module is used to include an animation (such as a vector graphics animation) by reference. This is in contrast to the elements defined in the Animation module, which provide an in-line syntax for the animation of attributes and properties of other elements.
Anchors and links can be attached to visual media objects, i.e. media objects rendered on a visual abstract rendering surface.
Languages implementing the SMIL BasicMedia Module must define which attributes may be attached to media object elements. In all languages implementing the SMIL BasicMedia module, media object elements can have the following attributes:
This attribute is deprecated in favor of using appropriate SMIL Metadata markup in RDF. For example, this attribute maps well to the "description" attribute as defined by the Dublin Core Metadata Initiative [DC] .
It is strongly recommended that all media object elements have an "alt" attribute with a brief, meaningful description. Authoring tools should ensure that no element can be introduced into a SMIL document without this attribute.
The value of this attribute is a CDATA text string.
The value of this attribute is a CDATA text string.
The value of this attribute is a CDATA text string.
xml:lang differs from the system-language test attribute in one important respect. xml:lang provides information about the content's language independent of what implementations do with the information, whereas system-language is a test attribute with specific associated behavior (see system-language in SMIL Content Control Module for details)
Languages utilizing the SMIL BasicMedia module must define the complete set of elements which may act as children of media object elements. There are currently no required children of a media object defined in the BasicMedia Module, but languages utilizing the BasicMedia module may impose requirements beyond this specification.
If the including profile supports the XMLBase functionality [XMLBase] , the values of the src and longdesc attributes on the media object elements must be interpreted in the context of the relevant XMLBase URI prefix.
There is a set of attributes in BasicMedia which can be referred to as "annotation attributes". These attributes are: abstract, alt, , copyright, longdesc, title, and xml:lang. Profiles that integrate BasicMedia may apply these attributes to other language elements, and need to define which elements these attributes may apply to.
@@ Should these attributes be broken out into an "ElementAnnotation module"?
This section defines the elements and attributes that make up the SMIL MediaParam Module definition. Languages implementing elements and attributes found in the MediaParam module must implement all elements and attributes defined below, as well as BasicMedia.
param elements specify a set of values that may be required by a media object at run-time. Any number of param elements may appear in the content of a media object element, in any order, but must be placed at the start of the content of the enclosing media object element.
The syntax of names and values is assumed to be understood by the object's implementation. This document does not specify how user agents should retrieve name/value pairs nor how they should interpret parameter names that appear twice.
<ref src="http://www.example.com/herbert.face"> <param name="mood" value="surly" valuetype="data"> <param name="accessories" value="baseball-cap,nose-ring" valuetype="data"> </ref>
In addition to the element attributes defined in BasicMedia, media object elements can have the attributes and attribute extensions defined below. The inclusion or exclusion of these elements is left as an option in the language profile.
erase="whenDone" is the default value. When this is specified (or implied) the media removal occurs at the end of any applied timing.
erase="never" is defined to keep the last state of the media displayed until the display area is reused (or if the display area is already being used by another media object). Any profile that integrates this element must define what is meant by "display area" and further define the interaction. Intrinsic hyperlinks (e.g., Flash, HTML) and explicit hyperlinks (e.g., area, a) stay active as long as the hyperlink is displayed. If timing is reapplied to an element, the effect of the erase=never is cleared. For example, when an element is restarted according to the SMIL Timing and Synchronization module, the element is cleared immediately before it restarts.
<par> <seq> <par> <img src="image1.jpg" region="foo1" fill="freeze" erase="never" .../> <audio src="audio1.au"/> </par> <par> <img src="image2.jpg" region="foo2" fill="freeze" erase="never" .../> <audio src="audio2.au"/> </par> ... <par> <img src="imageN.jpg" region="fooN" fill="freeze" erase="never" .../> <audio src="audioN.au"/> </par> </seq> </par>
In this example, each image is successively displayed and remains displayed until the end of the presentation.
As an example of how this would be used, many animated GIFs intrinsically repeat indefinitely. The application of mediaRepeat="strip" allows an author to remove the intrinsic repeat behavior of an animated GIF on a per-reference basis, causing the animation to display only once, regardless of the repeat value embedded in the GIF.
When mediaRepeat is used in conjunction with SMIL Timing Module attributes, this attribute is applied first, so that the repeat behavior can then be controlled with the SMIL Timing Module attributes such as repeatCount and repeatDur.
Any profile that integrates the erase attribute must define what is meant by "display area" and further define the interaction. See the definition of erase for more details.
This section defines the attributes that make up the SMIL MediaClipping Module definition. Languages implementing the attributes found in the MediaClipping module must implement the attributes defined below, as well as BasicMedia.
Clip-value-MediaClipping ::= [ Metric "=" ] ( Clock-val | Smpte-val ) Metric ::= Smpte-type | "npt" Smpte-type ::= "smpte" | "smpte-30-drop" | "smpte-25" Smpte-val ::= Hours ":" Minutes ":" Seconds [ ":" Frames [ "." Subframes ]] Hours ::= Digit+ /* see XML 1.0 for a definition of ´Digit´*/ Minutes ::= Digit Digit Seconds ::= Digit Digit Frames ::= Digit Digit Subframes ::= Digit Digit
Note: additional BNF for level 1 extensions defined later
The value of this attribute consists of a metric specifier, followed by a time value whose syntax and semantics depend on the metric specifier. The following formats are allowed:
The time value has the format hours:minutes:seconds:frames.subframes. If
the subframe value is zero, it may be omitted. Subframes are measured in
one-hundredths of a frame.
If no metric specifier is given, then a default of "npt=" is presumed.
When used in conjunction with the timing attributes from the SMIL Timing Module, this attribute is applied before any SMIL Timing Module attributes.
clipBegin may also be expressed as clip-begin for compatibility with SMIL 1.0. Software supporting the SMIL 2.0 Language Profile must be able to handle both clipBegin and clip-begin, whereas software supporting only the SMIL MediaClipping module only needs to support clipBegin. If an element contains both a clipBegin and a clip-begin attribute, then clipBegin takes precedence over clip-begin.
<audio src="radio.wav" clip-begin="5s" clipBegin="10s" />
The clip begins at second 10 of the audio, and not at second 5, since the clip-begin attribute is ignored. A strict SMIL 1.0 implementation will start the clip at second 5 of the audio, since the clipBegin attribute will not be recognized by that implementation. See Changes to SMIL 1.0 Media Object Attributes for more discussion on this topic.
See Changes to SMIL 1.0 Media Object Attributes for more discussion on this topic.
This section defines the attribute extensions that make up the SMIL MediaClipMarkers Module definition. Languages implementing elements and attributes found in the MediaClipMarkers module must implement all elements and attributes defined below, as well as BasicMedia and MediaClipping.
Clip-value-MediaClipMarkers ::= Clip-value-MediaClipping | "marker" "=" URI-reference /* "URI-reference" is defined in [URI] */
Example: Assume that a recorded radio transmission consists of a sequence of songs, which are separated by announcements by a disk jockey. The audio format supports marked time points, and the begin of each song or announcement with number X is marked as songX or djX respectively. To extract the first song using the "marker" metric, the following audio media element can be used:
<audio clipBegin="marker=#song1" clipEnd="marker=#dj1" />
This section defines the elements and attributes that make up the SMIL BrushMedia Module definition. Languages implementing elements and attributes found in the BrushMedia module must implement all elements and attributes defined below.
The brush element is a lightweight media object element which allows an author to paint a solid color or other pattern in place of a media object. Thus, all attributes associated with media objects may also be applied to brush. Since all information about the media object is specified in the attributes of the element itself, the src attribute is ignored, and thus is not required.
This section defines the elements and attributes that make up the SMIL MediaAccessibility Module definition. Languages implementing elements and attributes found in the MediaAccessibility module must implement all elements and attributes defined below, as well as BasicMedia.
<par> <video id="carvideo" src="car.rm" region="videoregion" title="Car video" alt="Illustration of relativistic time dilation and length contraction." longdesc="carvideodesc.html" readIndex="3"/> <audio id="caraudio" src="caraudio.rm" region="videoregion" title="Car presentation voiceover" begin="bar.begin"/> <animation id="cardiagram" src="car.svg" region="animregion" title="Diagram of the car" readIndex="2"/> <img id="scvad" src="scv.png" region="videoregion" title="Advertisement for Sugar Coated Vegetables" readIndex="1"/> </par>
In this example, an assistive device that is presenting titles should present the "carvideo" element title first (having the highest readIndex value of "3", followed by the "cardiagram" title, followed by the "scvad" element title, and finally present the "caraudio" element title (having an implicit readIndex value of "0").
<!-- ======================================================================= --> <!-- SMIL 2.0 Media Objects Modules ======================================== --> <!-- file: SMIL-media.mod This is SMIL 2.0. Copyright 2000 W3C (MIT, INRIA, Keio), All Rights Reserved. Author: Rob Lanphier, Jacco van Ossenbruggen Revision: $Id: SMIL-media.mod,v 1.27 2000/08/16 07:54:43 jvanoss Exp $ This DTD module is identified by the PUBLIC and SYSTEM identifiers: PUBLIC "-//W3C//ELEMENTS SMIL 2.0 Media Objects//EN" SYSTEM "SMIL-media.mod" ======================================================================= --> <!-- ================== Profiling Entities ================================= --> <!ENTITY % BasicMedia.module "INCLUDE"> <![%BasicMedia.module;[ <!ENTITY % media-object.content "EMPTY"> <!ENTITY % media-object.attrib ""> <!-- ================ Media Objects Entities ============================= --> <!ENTITY % mo-attributes-BasicMedia " abstract CDATA #IMPLIED alt CDATA #IMPLIED author CDATA #IMPLIED copyright CDATA #IMPLIED longdesc CDATA #IMPLIED src CDATA #IMPLIED type CDATA #IMPLIED "> ]]> <!ENTITY % mo-attributes-BasicMedia ""> <!ENTITY % MediaClipping.module "IGNORE"> <![%MediaClipping.module;[ <!ENTITY % mo-attributes-MediaClipping " clipBegin CDATA #IMPLIED clipEnd CDATA #IMPLIED "> ]]> <!ENTITY % mo-attributes-MediaClipping ""> <!ENTITY % MediaClipping.deprecated.module "IGNORE"> <![%MediaClipping.module;[ <!ENTITY % mo-attributes-MediaClipping-deprecated " clip-begin CDATA #IMPLIED clip-end CDATA #IMPLIED "> ]]> <!ENTITY % mo-attributes-MediaClipping-deprecated ""> <!ENTITY % MediaParam.module "IGNORE"> <![%MediaParam.module;[ <!ENTITY % mo-attributes-MediaParam " erase (whenDone|never) 'whenDone' mediaRepeat (preserve|strip) 'preserve' "> ]]> <!ENTITY % mo-attributes-MediaParam ""> <!ENTITY % MediaAccessibility.module "IGNORE"> <![%MediaAccessibility.module;[ <!ENTITY % mo-attributes-MediaAccessibility " readIndex CDATA #IMPLIED "> ]]> <!ENTITY % mo-attributes-MediaAccessibility ""> <!ENTITY % mo-attributes " %Core.attrib; %I18n.attrib; %mo-attributes-BasicMedia; %mo-attributes-MediaParam; %mo-attributes-MediaAccessibility; %media-object.attrib; "> <!-- Most info is in the attributes, media objects are empty or have children defined at the language integration level: --> <!ENTITY % mo-content "%media-object.content;"> <!-- ================== Media Objects Elements ============================= --> <!-- BasicMedia --> <!ENTITY % ref.qname "ref"> <!ENTITY % audio.qname "audio"> <!ENTITY % img.qname "img"> <!ENTITY % video.qname "video"> <!ENTITY % text.qname "text"> <!ENTITY % textstream.qname "textstream"> <!ENTITY % animation.qname "animation"> <!ENTITY % ref.content "%mo-content;"> <!ENTITY % audio.content "%mo-content;"> <!ENTITY % img.content "%mo-content;"> <!ENTITY % video.content "%mo-content;"> <!ENTITY % text.content "%mo-content;"> <!ENTITY % textstream.content "%mo-content;"> <!ENTITY % animation.content "%mo-content;"> <!ELEMENT %ref.qname; %ref.content;> <!ELEMENT %audio.qname; %audio.content;> <!ELEMENT %img.qname; %img.content;> <!ELEMENT %video.qname; %video.content;> <!ELEMENT %text.qname; %text.content;> <!ELEMENT %textstream.qname; %textstream.content;> <!ELEMENT %animation.qname; %animation.content;> <!ATTLIST %img.qname; %mo-attributes; > <!ATTLIST %text.qname; %mo-attributes; > <!ATTLIST %ref.qname; %mo-attributes-MediaClipping; %mo-attributes-MediaClipping-deprecated; %mo-attributes; > <!ATTLIST %audio.qname; %mo-attributes-MediaClipping; %mo-attributes-MediaClipping-deprecated; %mo-attributes; > <!ATTLIST %video.qname; %mo-attributes-MediaClipping; %mo-attributes-MediaClipping-deprecated; %mo-attributes; > <!ATTLIST %textstream.qname; %mo-attributes-MediaClipping; %mo-attributes-MediaClipping-deprecated; %mo-attributes; > <!ATTLIST %animation.qname; %mo-attributes-MediaClipping; %mo-attributes-MediaClipping-deprecated; %mo-attributes; > <!-- MediaParam --> <![%MediaParam.module;[ <!ENTITY % param.qname "param"> <!ELEMENT %param.qname; EMPTY> <!ATTLIST %param.qname; %Core.attrib; %I18n.attrib; name CDATA #IMPLIED value CDATA #IMPLIED valuetype (data|ref|object) "data" type %ContentType; #IMPLIED > ]]> <!-- BrushMedia --> <!ENTITY % BrushMedia.module "IGNORE"> <![%BrushMedia.module;[ <!ENTITY % brush.attrib ""> <!ENTITY % brush.content "%mo-content;"> <!ENTITY % brush.qname "brush"> <!ELEMENT %brush.qname; %brush.content;> <!ATTLIST %brush.qname; %brush.attrib; %mo-attributes; color CDATA #IMPLIED > ]]> <!-- end of SMIL-media.mod -->
With regards to the clipBegin/clip-begin and clipEnd/clip-end elements, SMIL 2.0 defines the following changes to the syntax defined in SMIL 1.0:
Using attribute names with hyphens such as clip-begin and clip-end is problematic when using a scripting language and the DOM to manipulate these attributes. Therefore, this specification adds the attribute names clipBegin and clipEnd as an equivalent alternative to the SMIL 1.0 clip-begin and clip-end attributes. The attribute names with hyphens are deprecated.
Authors can use two approaches for writing SMIL 2.0 presentations that use the new clipping syntax and functionality ("marker", default metric) defined in this specification, but can still can be handled by SMIL 1.0 software. First, authors can use non-hyphenated versions of the new attributes that use the new functionality, and add SMIL 1.0 conformant clipping attributes later in the text.
<audio src="radio.wav" clipBegin="marker=song1" clipEnd="marker=moderator1" clip-begin="npt=0s" clip-end="npt=3:50" />
SMIL 1.0 players implementing the recommended extensibility rules of SMIL 1.0 [SMIL10] will ignore the clip attributes using the new functionality, since they are not part of SMIL 1.0. SMIL 2.0 players, in contrast, will ignore the clip attributes using SMIL 1.0 syntax, since they occur later in the text.
The second approach is to use the following steps:
Example: Namespace identifier in this example needs to be replaced with final specification location.
<smil xmlns:smil2="http://www.w3.org/TR/REC-smil/2000/SMIL20"> ... <switch> <audio src="radio.wav" clipBegin="marker=song1" clipEnd="marker=moderator1" system-required="smil2" /> <audio src="radio.wav" clip-begin="npt=0s" clip-end="npt=3:50" /> </switch>
SMIL 1.0 only allowed anchor as a child element of a media element. In addition to anchor (now defined in the Linking module), the param is now allowed as children of a SMIL media object. Additionally, other new children may also be defined by the host language.
A new param element provides a generalized mechanism to attach media-specific attributes to media objects.
A new brush element allows the specification of solid color media objects with no associated media.