Synchronized Multimedia Integration Language (SMIL) 1.0本文檔是W3C建議SMIL 1.0(1998年6月15日)的中文版,其中可能有錯誤和不妥之處。 英文版是唯一的正式版,位于: http://www.w3.org/TR/1998/REC-smil-19980615 本文檔位于: http://chinese-school.netfirms.com/SMIL10-TC.html
著作權聲明位于:http://www.w3.org/Consortium/Legal/copyright-documents.html Copyright © 1998 W3C (MIT, INRIA, Keio ), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply. |
W3C建議 1998年6月15日
本文檔由World Wide Web Consortium的同步多媒体工作組提供。工作組包括下列成員:
致謝:除了工作組成員之外,還有下列各位為SMIL付出了各自的努力: Bert Bos (W3C), Dan Connolly (W3C), Patrick Deunhouwer (Philips), Martin Dürst (W3C), Al Gilman, Håkon Lie (W3C), Chris Lilley (W3C), Curtis Reynolds (RealNetworks), Michael Riesman, Curtis Reynolds (RealNetworks), Henning Schulzrinne (Columbia University) and Koga Youichirou (W3C).
編輯:Philipp Hoschka, W3C (hoschka@w3.org)
本文檔規定了同步多媒体合成語言的版本1(SMIL 1.0,發“smile”的音)。SMIL能夠將一組獨立的多媒体對象合成為同步的多媒体演示。一個創作者可以用SMIL
本規范的結构如下:第一部分給出了規范的表述方法。第二部分定義了“smil”元素。第三部分定義了可以包含在SMIL文件頭中的元素。第四部分定義了可以包含在SMIL文件体中的元素。特別地,這部分定義了SMIL中使用的時間模型。第五部分描述了SMIL DTD。
本文檔已由W3C組織成員和其他相關各方審閱,并已被組織理事批准為W3C建議。這是一個穩定的文檔,可以用作參考材料,也可以作為其他文檔的正式參考文獻。W3C在建議制定過程中的作用是吸引對本規范的注意并促進它的廣泛使用。這能增強Web的功能和互操作性。
對本規范的評注可以發往公共郵件列表 www-smil@w3.org.
英文版是唯一的正式版。其他語言的翻譯位于http://www.w3.org/AudioVideo/SMIL/translations.
本規范的已知錯誤列表可以在http://www.w3.org/AudioVideo/SMIL/errata找到.
SMIL文件是XML 1.0文件[XML10]。要求讀者熟悉XML 1.0中定義的概念和術語。
在URL中定義的一些特性有可能無法用URN表示,本規范不基于這些特性。因此,本規范中統一使用更通用的術語URI[URI]。
SMIL文件的語法由5.2節中的DTD定義。不能用DTD記法定義的屬性值和第一個使用能以它為值的屬性的元素一起定義。這些屬性值用XML 1.0中定義的擴展范巴科斯范式(EBNF)定義。
元素定義的結构如下:首先,以字母順序定義此元素的所有屬性。屬性用如下方法定義:如果此屬性是第一次在本規范中被某個元素使用,則定義此屬性的語義。如果此屬性已被另一個元素使用,規范中引用第一個使用此屬性的元素中此屬性的定義。元素屬性定義之后是任何不能用DTD記法定義其語法的屬性值的定義。元素定義的最后部分規定了元素內容。
元素屬性
“smil”元素可以有下列屬性:
元素內容
“smil”元素可以包含下列子元素:
head元素“head”元素包含与演示的時序行為無關的信息。
元素屬性
“head”元素可以有下列屬性:
元素內容
“head”元素可以包含下列子元素:
“head”元素可以包含任意多個“meta”元素,并可以包含一個“layout”元素或一個“switch”元素。
“layout”元素決定了文件体中的元素是如何在一個“抽象表示面”(視頻的或音頻的)上定位的。
如果文件中沒有layout元素,文件体中元素的定位与實現相關。
一個SMIL文件可以通過將多個layout元素封裝在一個“switch”元素(在4.3節中定義)中而包含多個可選的布局。舉例來說,這可以用于使用不同的布局描述語言來描述文件的布局。
下面的例子說明了如何用CSS2代替SMIL基本布局語言(在3.3節中定義):
<smil>
<head>
<switch>
<layout type="text/css">
[region="r"] { top: 20px; left: 20px }
</layout>
<layout>
<region id="r" top="20" left="20" />
</layout>
</switch>
</head>
<body>
<seq>
<img region="r" src="http://www.w3.org/test" dur="10s" />
</seq>
</body>
</smil>
(注意在這個例子中,兩個可選布局的結果相同)
元素屬性
元素內容
如果layout元素的type屬性具有值“text/smil-basic-layout”,它可以包含下列元素:
如果“layout”元素的type屬性具有其他值,元素中包含字符數据。
這一節定義用于SMIL的基本布局語言。SMIL基本布局与CSS2中定義的視覺表示模型相一致,它重用了CSS2規范中定義的格式化屬性,同時引入了新的“fit”屬性[CSS2]。要求讀者熟悉CSS2中定義的概念和術語。
SMIL基本布局只控制媒体對象元素(在4.2.3節中定義)的布局。用于其他SMIL元素是非法的。
SMIL基本布局的類型標識符是“text/smil-basic-layout”。
固定的屬性值
下面的樣式表(stylesheet)定義了在SMIL基本布局中有效的CSS2屬性“display”和“position”的取值。這些屬性值是固定的:
a {display:block}
anchor {display:block}
animation {display: block;
position: absolute}
body {display: block}
head {display: none}
img {display: block;
position: absolute}
layout {display: none}
meta {display: none}
par {display: block}
region {display: none}
ref {display: block;
position: absolute}
root-layout {display: none}
seq {display: block}
smil {display: block}
switch {display:block}
text {display: block;
position: absolute}
textstream {display: block;
position: absolute}
video {display: block;
position: absolute}
注意作為這些定義的結果之一,所有以絕對方式定位的元素(animation,img,ref,text,textstream和video)被包含在以根元素(smil)內容邊界定義的單個包含塊中。
缺省值
SMIL基本布局定義了所有与布局相關的屬性的缺省值。它們与CCS2中相應屬性的初始值一致。
如果創作者想給文件中的所有媒体對象元素選擇缺省的布局值,文件中必須包含一個類型為“text/smil-basic-layout”的空layout元素,如:
<layout type="text/smil-basic-layout"></layout>
region元素控制媒体對象元素的位置,大小和縮放。
在下面作為例子的片斷中,一個text元素被定位于距离顯示窗口上邊界5個象素遠的位置:
<smil>
<head>
<layout>
<region id="a" top="5" />
</layout>
</head>
<body>
<text region="a" src="text.html" dur="10s" />
</body>
</smil>
元素屬性
“region”元素可以有下列屬性:
“fit”的缺省值是“hidden”。
如果“skip-content”屬性的值是“true”,且以上的兩种情況之一适用,那么元素內容被忽略。如果值為“false”,元素內容被處理。
“skip-content”的缺省值是“true”。
元素內容
“region”是一個空元素。
root-layout元素 “root-layout”元素決定根元素的布局屬性值,根元素的這些值又決定了視口(viewport,如SMIL演示播放的窗口)的大小。
如果文件包含一個以上“root-layout”元素,是一個錯誤,此文件不應被顯示。
元素屬性
“root-layout”可以有下列屬性:
元素內容
“root-layout”是一個空元素。
“meta”元素可以用于定義文件的屬性(如,作者,截止日期,關鍵字表,等等)并給這些屬性賦值。每一個“meta”元素規定一個屬性/屬性值對。
元素屬性
“meta”元素可以有下列屬性:
屬性列表是開放的。本規范中定義了下列屬性:
元素內容
“meta”是一個空元素。
body元素“body”元素包含与此文件的時序和鏈接行為有關的信息。它隱含地定義了一個“seq”元素(在4.2.2節中定義,“body”元素的時序語義定義參見4.2.4節)。
元素屬性
“body”元素可以有下列屬性:
元素內容
“body”可以包含下列子元素:
par元素的子元素可以在時間上重疊。par中子元素的文本次序對它們演示的次序沒有意義。
元素屬性
“par”元素可以有下列屬性:
得到的集合S即“在作用域內”的元素的集合。
<par> <audio id="a" begin="6s" src="audio" /> </par>
圖4.1: 在“par”元素中使用延時值。
<seq> <audio src="audio1" /> <audio begin="5s" src="audio2" /> </seq>
圖4.2: 在“seq”元素中使用延時值
<par> <audio id="a" begin="6s" ... /> <img begin="id(a)(4s)" ... /> </par>
圖4.3:值為元素事件值的同步屬性
id-ref ::= "id(" id-value ")" “endsync”的缺省值是“last”。
關于子元素間同步的注解
在一個同步組中子元素的同步精确度与實現相關。以回放中的時延,即,“par”元素包含兩种或多种連續媒体類型如視頻或音頻時的行為,作為同步的例子,其中的一個會出現時延。
播放器可以有兩种同步行為:
a) 硬同步:視頻中的延時:或是停止音頻,或是視頻掉幀。确切的行為与實現有關。
b) 軟同步
圖4.4:使用不同同步策略的播放器中延時在播放進度中的效果
屬性值
Clock-val ::= Full-clock-val | Partial-clock-val | Timecount-val
Full-clock-val ::= Hours ":" Minutes ":" Seconds ("." Fraction)?
Partial-clock-val ::= Minutes ":" Seconds ("." Fraction)?
Timecount-val ::= Timecount ("." Fraction)?
("h" | "min" | "s" | "ms")? ; 缺省為“s”
Hours ::= 2DIGIT; 任何正整數
Minutes ::= 2DIGIT; 從00到59
Seconds ::= 2DIGIT; 從00到59
Fraction ::= DIGIT+
Timecount ::= DIGIT+
2DIGIT ::= DIGIT DIGIT
DIGIT ::= [0-9]
下面是一些合法的時鐘值的例子:
有n位的一個小數表示下列值:
x * 1/10**n
例子:
00.5s = 5 * 1/10秒 = 500毫秒
00:00.005 = 5 * 1/1000秒 = 5毫秒
Element-event ::= "id(" Event-source ")(" Event ")"
Event-source ::= Id-value
Event ::= "begin" | Clock-val | "end"
begin="id(x)(begin)" 用法舉例:begin="id(x)(45s)"
begin="id(x)(end)" 元素內容
par元素可以包含下列子元素:
所有這些元素可以直接作為par元素的子元素出現任意多次。
“seq”元素的子元素构成一個時間序列。
屬性
“seq”元素可以有下列屬性:
元素內容
“seq”元素可以包含下列子元素:
animation,audio,img,video,text和textstream元素媒体對象元素允許在SMIL演示中包括進媒体對象。媒体對象通過引用包含(用URI)。
有兩類媒体對象:有時長概念的媒体對象(如視頻,音頻)(也稱為“連續媒体”)和沒有時長概念的媒体對象(如文本,圖像)(也稱為“离散媒体”)。
可以給可視媒体對象,即顯示在可視抽象表示面上的媒体對象,加上鏈接,也可以將其作為鏈接的終點。
播放器在回放媒体對象時,絕不能從媒体對象元素的名字推斷其實際類型。它必須完全依賴于其他有關類型的信息,如type屬性中包含的類型信息或由服務器或操作系統給出的類型信息。
然而創作者應該确保元素名字反映出了媒体對象所屬的組(animation,audio,img,video,text或textstream)。這是為了增加SMIL文件的可讀性。當作者不确定應屬于哪一組時,他應該使用通用的“ref”元素。
元素屬性
媒体對象元素可以有下列屬性:
Clip-time-value ::= 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 ::= 2DIGIT
Minutes ::= 2DIGIT
Seconds ::= 2DIGIT
Frames ::= 2DIGIT
Subframes ::= 2DIGIT
此屬性的值包括一個計量單位說明符和其后的時間值,時間值的語法和語義取決于計量單位說明符。允許下列格式:
時間值的格式為時:分:秒:幀:子幀。如果幀的值為0,可以被省略。子幀以幀的百分之一為單位。
例子:
clip-begin="smpte=10:12:33:20"
clip-begin="npt=123.45s"
clip-begin="npt=12:05:35.3" 元素內容
媒体對象元素可以包含下列元素:
在下面的討論中,術語“元素”僅指同步元素。
對于每一個元素我們定義其隱式,顯式,期望和實際的開始,時長和結束。
實際開始/時長/結束指文件讀者的實際所見。
隱式,顯式和期望值是用于定義實際值的輔助值。
計算元素的各個定義在SMIL 1.0中的值的規則在下一節中描述。
begin = "顯式開始的值"
如果元素的顯式開始早于隱式開始,是一個錯誤。
end = "顯式結束的值"
dur = "顯式時長的值"
本節定義了在沒有被4.2.4.1節中的規則所包括的情況下,如何計算SMIL 1.0的同步元素的時間模型值。
使用第一個与元素相匹配的描述:
确定元素的期望開始
元素的期望開始由4.2.4.1節中的規則7确定。
元素的實際開始等于元素的期望開始,除非其父元素的實際結束早于此期望開始,在這种情況下,此元素不被顯示。
switch元素允許創作者規定一個可選的元素集合,只能從中選取一個可接受的元素。當一個元素是一個SMIL 1.0元素,它的媒体類型可以被解碼,并且它所有的檢測屬性(參見4.4節)都得出值“true”時,稱此元素是可接受的。
選擇元素的過程如下:播放器依它們在switch元素中出現的次序逐個計算這些元素,選擇第一個可接受的元素,其余元素被擯棄。
因此,作者應該按期望值從高到低排序這些可選元素。另外,作者應該在“switch”元素的最后放置一個相對保險的元素以保証<switch>中至少有一個元素會被選中(除非明确不想要)。在所有元素的檢測屬性都失敗時,實現不應任意挑選<switch>中的一個對象。
注意http URI提供了內容協商机制,在某些情況下可以用于替代“switch”元素。
屬性
“switch”元素可以有下列屬性:
元素內容
如果“switch”被直接或間接地用作“body”元素的子元素,它可以包含下列子元素:
所有這些元素都可以作為“switch”元素的子元素任意多次。
如果“switch”元素被用于“head”元素中,它可以包含下列子元素:
本規范定義了可加在任何同步元素中用于檢測系統功能和設置的一組檢測屬性。從概念上而言,這些屬性表示布爾測試。當某元素中一個規定的檢測屬性得出值“false”時,此元素被忽略。
在下表中,可能會出現“用戶喜好”的概念。用戶喜好通常是由回放引擎給出一個喜好對話框來設定,但本規范不對用戶將喜好傳遞給SMIL播放器的方式作任何限制。
SMIL 1.0中定義了下列檢測屬性:
如果用戶喜好中指出的語言之一正好等于此參數中給出的一种語言,或者用戶喜好中指出的語言之一正好等于此參數中給出的一种語言的前綴而此前綴后的第一個字母是“-”,結果為“true”。
否則結果為“false”。
注意:這种前綴匹配規則的使用并不意味著語言標簽的指定方式使得下述情況總是成立:當用戶理解以某個標簽表示的語言時,他也能理解所有以此標簽作為前綴的語言。
前綴規則僅是允許了在出現這种情況時前綴標簽的使用。
實現注意事項:當允許用戶選擇語言喜好時,實現者應該考慮到用戶不熟悉上述語言匹配的細節,因而應該提供适當的引導。舉例來說,用戶也許會認為選擇“en-gb”時,當英國英語不可用時,他們會得到另外某种英語。用戶喜好設置的用戶界面應該引導用戶加上“en”以得到最好的匹配行為。
試圖面向多种語言觀眾的內容可以列出多种語言。例如,播放同時顯示原版毛利語和英語的“Treaty of Waitangi”時,可以用:
<audio src="foo.rm" system-language="mi, en"/>
但是,僅僅因為有system-language檢測屬性的對象中有多种語言并不能說明它是面向多种語言觀眾的。例如一個初學者的識字課本,如“A First Lesson in Latin”,它顯然是面向英語觀眾的。在這种情況下,system-language檢測屬性應該只包括“en”。
創作者注意事項:創作者應該意識到如果“switch”中包含了多种可選語言對象而無一匹配時,可能會導致播放的視頻不伴隨任何音軌的情況。因此建議在這樣的switch的最后包括一個“保險”選擇,此選擇在任何情況下都是可接受的。
screen-size-val ::= screen-height"X"screen-width 例子
1) 在不同的比特率中選擇
通常情況下,實現可能希望允許通過使用“system-bitrate”參數來選擇不同的元素。媒体播放器每次查看一個“選擇”(switch內的元素),根据媒体播放器和媒体服務器間連接的已知特性查找一個可接受的比特率。
...
<par>
<text .../>
<switch>
<par system-bitrate="40000">
...
</par>
<par system-bitrate="24000">
...
</par>
<par system-bitrate="10000">
........
</par>
</switch>
</par>
...
2) 在不同比特率的音頻源中選擇
switch內的元素可以是任何元素的組合。例如,可以僅指定一個可選音軌:
... <switch> <audio src="joe-audio-better-quality" system-bitrate="16000" /> <audio src="joe-audio" system-bitrate="8000" /> </switch> ...
3) 在不同語言的音頻源中選擇
下面的例子中,某個音頻源既有法語版,又有英語版。根据用戶所喜好的語言,播放器可以選擇其中之一。
... <switch> <audio src="joe-audio-french" system-language="fr"/> <audio src="joe-audio-english" system-language="en"/> </switch> ...
4) 在為不同屏幕設置創作的內容中選擇
下面的例子中,演示中包含為不同分辯率和位深度而設計的几個可選的部分。根据屏幕的特性,播放器可以選擇其中之一。
...
<par>
<text .../>
<switch>
<par system-screen-size="1280X1024" system-screen-depth="16">
........
</par>
<par system-screen-size="640X480" system-screen-depth="32">
...
</par>
<par system-screen-size="640X480" system-screen-depth="16">
...
</par>
</switch>
</par>
...
5) 區分字幕和股票价格自動收報机
下面的例子中,字幕只在用戶想要時才顯示。
...
<seq>
<par>
<audio src="audio.rm"/>
<video src="video.rm"/>
<textstream src="stockticker.rtx"/>
<textstream src="closed-caps.rtx" system-captions="on"/>
</par>
</seq>
...
6) 選擇不同語种的配音和字幕
下面的例子中,一部法語電影有英語,德語和荷蘭語配音和字幕。下面的SMIL片斷表示出了這一點,并根据用戶喜好在這些可選項中選擇。
...
<par>
<switch>
<audio src="movie-aud-en.rm" system-language="en"
system-overdub-or-caption="overdub"/>
<audio src="movie-aud-de.rm" system-language="de"
system-overdub-or-caption="overdub"/>
<audio src="movie-aud-nl.rm" system-language="nl"
system-overdub-or-caption="overdub"/>
<!-- French for everyone else -->
<audio src="movie-aud-fr.rm"/>
</switch>
<video src="movie-vid.rm"/>
<switch>
<textstream src="movie-caps-en.rtx" system-language="en"
system-overdub-or-caption="caption"/>
<textstream src="movie-caps-de.rtx" system-language="de"
system-overdub-or-caption="caption"/>
<textstream src="movie-caps-nl.rtx" system-language="nl"
system-overdub-or-caption="caption"/>
<!-- French captions for those that really want them -->
<textstream src="movie-caps-fr.rtx" system-captions="on"/>
</switch>
</par>
...
鏈接元素使得描述對象間的鏈接訪問關系成為可能。
SMIL只提供內嵌的鏈接元素。鏈接僅限于單向單端鏈接(即,所有的鏈接有且僅有一個源和一個終點)。SMIL中的所有鏈接由用戶激活。
內嵌文件中的鏈接的處理
由于其合成性,SMIL文件的演示可能會涉及其他(非SMIL)應用和插件。例如,SMIL瀏覽器可能會使用一個HTML插件去顯示內嵌的HTML頁。反過來,HTML瀏覽器可能會用一個SMIL插件顯示HTML頁中內嵌的SMIL文件。
在這樣的演示中,可以在文件不同的層次定義鏈接,有可能會產生衝突。在這种情況下,包含文件中定義的鏈接优先于內嵌對象中定義的聯接。注意因為這可能會要求瀏覽器和插件間的通信,SMIL的實現可能選擇不遵循本規范。
如果鏈接在內嵌的SMIL文件中定義,此鏈接只影響這個內嵌的SMIL文件。
如果鏈接在SMIL文件中內嵌的非SMIL文件中定義,鏈接只影響內嵌文件的播放而不影響SMIL包含文件的播放。此限制在以后的SMIL版本中可能會取消。
尋址
SMIL支持命名片斷標識符和'#'連接符。這意味著SMIL支持當前在HTML中使用的定位符(例如,它使用“http://foo.com/some/path#anchor1”形式的定位符)。
連接到SMIL片斷
指向SMIL文件的定位符可以包含片斷部分(例如,http://www.w3.org/test.smi#par1)。片斷部分是一個標識符值,標識了所引用的SMIL文件中的一個元素。如果激活一個包含了片斷部分的鏈接,演示應該從片斷所指元素的實際開始那儿開始播放,就如同是將目標文件快進到那儿一樣。
可能發生下列特殊情況:
“a”元素的功能与HTML 4.0[HTML40]中“a”元素的功能非常相似。SMIL增加了一個屬性“show”用于在激活鏈接時控制源的時序行為。出于同步的考慮,“a”元素是透明的,即,它不影響它的子元素的同步。“a”元素不應該嵌套。“a”元素必須有href屬性。
屬性
“a”元素可以有下列屬性:
“show”的缺省值是“replace”。
元素內容
“a”元素可以包含下列子元素:
例子
例1
激活鏈接會開始新的演示,代替正在播放的演示。
<a href="http://www.cwi.nl/somewhereelse.smi">
<video src="rtsp://foo.com/graph.imf" region="l_window"/>
</a>
例子中的第二行可以替換成指向任何有效SMIL演示子樹的引用。
例2
激活鏈接會在當前播放的演示之外開始新的演示。
<a href="http://www.cwi.nl/somewhereelse.smi" show="new">
<video src="rtsp://foo.com/graph.imf" region="l_window"/>
</a>
例如,這允許SMIL播放器激活一個HTML瀏覽器。
例3
激活鏈接會開始新的演示,暫停正在播放的演示。
<a href="http://www.cwi.nl/somewhereelse.smi" show="pause">
<video src="rtsp://foo.com/graph.imf" region="l_window"/>
</a>
例4
下面的例子包含了一個鏈接,此鏈接從演示A的一個元素指向另一演示B的中間。這會從演示B中標識為“next”的元素的實際開始那儿開始播放。
演示A:
<a href="http://www.cwi.nl/presentationB#next">
<video src="rtsp://foo.com/graph.imf"/>
</a>
演示B (http://www.cwi.nl/presentation):
...
<seq>
<video src="rtsp://foo.com/graph.imf"/>
<par>
<video src="rtsp://foo.com/timbl.rm" region="l_window"/>
<video id="next" src="rtsp://foo.com/v1.rm" region="r_window"/>
^^^^^^^^^
<text src="rtsp://foo.com/caption1.html" region="l_2_title"/>
<text src="rtsp://foo.com/caption2.rtx" region="r_2_title"/>
</par>
</seq>
...
anchor元素 “a”元素的功能是有限的,它只允許將鏈接和完整的媒体對象相關聯。HTML中的image map已經說明了將鏈接与一個對象的空間局部相關聯是有用的。anchor元素為SMIL實現了類似的功能:
屬性
“anchor”元素可以有下列屬性:
coords-value ::= left-x "," top-y "," right-x "," bottom-y
圖4.5: “coords”屬性的語義
例子
1) 將鏈接与空間局部相關聯
下面的例子中,一個視頻片斷所占的屏幕空間被分為兩個部分。兩個部分有各自關聯的鏈接。
<video src="http://www.w3.org/CoolStuff"> <anchor href="http://www.w3.org/AudioVideo" coords="0%,0%,50%,50%"/> <anchor href="http://www.w3.org/Style" coords="50%,50%,100%,100%"/> </video>
2) 將鏈接与時間局部相關聯
下面的例子中,一個視頻片斷的時長被分為兩個子間隔。兩個子間隔有各自關聯的鏈接。
<video src="http://www.w3.org/CoolStuff"> <anchor href="http://www.w3.org/AudioVideo" begin="0s" end="5s"/> <anchor href="http://www.w3.org/Style" begin="5s" end="10s"/> </video>
3) 跳到一個對象的某個局部
下面的例子包含了一個鏈接,此鏈接從演示A的一個元素指向另一演示B中包含的視頻對象的中間。它從視頻的第5秒起播放演示B(即,從視頻“CoolStuff”的被指片斷處開始播放此演示,就如同是將它快進到那儿一樣)。
演示A: <a href="http://www.cwi.nl/mm/presentationB#tim"> <video id="graph" src="rtsp://foo.com/graph.imf" region="l_window"/> </a> 演示B: <video src="http://www.w3.org/CoolStuff"> <anchor id="joe" begin="0s" end="5s"/> <anchor id="tim" begin="5s" end="10s"/> </video>
4) 組合使用不同用法的鏈接
下面的例子說明了如何組合使用不同用法的鏈接。
演示A:
<a href="http://www.cwi.nl/mm/presentationB#tim">
<video id="graph" src="rtsp://foo.com/graph.imf" region="l_window"/>
</a>
演示B:
<video src="http://www.w3.org/CoolStuff">
<anchor id="joe" begin="0s" end="5s" coords="0%,0%,50%,50%"
href="http://www.w3.org/"/>
<anchor id="tim" begin="5s" end="10s" coords="0%,0%,50%,50%"
href="http://www.w3.org/Tim"/>
</video>
SMIL 1.0可以包括一個可選文件類型聲明用于指出此文件所用的文件類型定義(DTD)。SMIL的文件類型應該如下聲明(可以用單引號代替雙引號):
<!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 1.0//EN"
"http://www.w3.org/TR/REC-smil/SMIL10.dtd">
XML 1.0規范提供了一种使用<!DOCTYPE>元素擴展DTD的方法,如用于增加一個新的實体定義集。創作者不應該在SMIL中使用此特性,因為很多SMIL播放器不支持它。
SMIL中下述用法非法:
<!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 1.0//EN"
"http://www.w3.org/TR/REC-smil/SMIL10.dtd" [
<!ENTITY % AcmeCorpSymbols PUBLIC
"-//Acme Corp//ENTITIES Corporate Symbols//EN"
"http://www.acme.com/corp_symbols.xml"
>
%AcmeCorpSymbols;
]>
<!--
This is the XML document type definition (DTD) for SMIL 1.0.
Date: 1998/06/15 08:56:30
Authors:
Jacco van Ossenbruggen <jrvosse@cwi.nl>
Sjoerd Mullender <sjoerd@cwi.nl>
Further information about SMIL is available at:
http://www.w3.org/AudioVideo/
-->
<!-- Generally useful entities -->
<!ENTITY % id-attr "id ID #IMPLIED">
<!ENTITY % title-attr "title CDATA #IMPLIED">
<!ENTITY % skip-attr "skip-content (true|false) 'true'">
<!ENTITY % desc-attr "
%title-attr;
abstract CDATA #IMPLIED
author CDATA #IMPLIED
copyright CDATA #IMPLIED
">
<!--=================== SMIL Document =====================================-->
<!--
The root element SMIL contains all other elements.
-->
<!ELEMENT smil (head?,body?)>
<!ATTLIST smil
%id-attr;
>
<!--=================== The Document Head =================================-->
<!ENTITY % layout-section "layout|switch">
<!ENTITY % head-element "(meta*,((%layout-section;), meta*))?">
<!ELEMENT head %head-element;>
<!ATTLIST head %id-attr;>
<!--=================== Layout Element ====================================-->
<!--
Layout contains the region and root-layout elements defined by
smil-basic-layout or other elements defined an external layout
mechanism.
-->
<!ELEMENT layout ANY>
<!ATTLIST layout
%id-attr;
type CDATA "text/smil-basic-layout"
>
<!--=================== Region Element ===================================-->
<!ENTITY % viewport-attrs "
height CDATA #IMPLIED
width CDATA #IMPLIED
background-color CDATA #IMPLIED
">
<!ELEMENT region EMPTY>
<!ATTLIST region
%id-attr;
%title-attr;
%viewport-attrs;
left CDATA "0"
top CDATA "0"
z-index CDATA "0"
fit (hidden|fill|meet|scroll|slice) "hidden"
%skip-attr;
>
<!--=================== Root-layout Element ================================-->
<!ELEMENT root-layout EMPTY>
<!ATTLIST root-layout
%id-attr;
%title-attr;
%viewport-attrs;
%skip-attr;
>
<!--=================== Meta Element=======================================-->
<!ELEMENT meta EMPTY>
<!ATTLIST meta
name NMTOKEN #REQUIRED
content CDATA #REQUIRED
%skip-attr;
>
<!--=================== The Document Body =================================-->
<!ENTITY % media-object "audio|video|text|img|animation|textstream|ref">
<!ENTITY % schedule "par|seq|(%media-object;)">
<!ENTITY % inline-link "a">
<!ENTITY % assoc-link "anchor">
<!ENTITY % link "%inline-link;">
<!ENTITY % container-content "(%schedule;)|switch|(%link;)">
<!ENTITY % body-content "(%container-content;)">
<!ELEMENT body (%body-content;)*>
<!ATTLIST body %id-attr;>
<!--=================== Synchronization Attributes ========================-->
<!ENTITY % sync-attributes "
begin CDATA #IMPLIED
end CDATA #IMPLIED
">
<!--=================== Switch Parameter Attributes =======================-->
<!ENTITY % system-attribute "
system-bitrate CDATA #IMPLIED
system-language CDATA #IMPLIED
system-required NMTOKEN #IMPLIED
system-screen-size CDATA #IMPLIED
system-screen-depth CDATA #IMPLIED
system-captions (on|off) #IMPLIED
system-overdub-or-caption (caption|overdub) #IMPLIED
">
<!--=================== Fill Attribute ====================================-->
<!ENTITY % fill-attribute "
fill (remove|freeze) 'remove'
">
<!--=================== The Parallel Element ==============================-->
<!ENTITY % par-content "%container-content;">
<!ELEMENT par (%par-content;)*>
<!ATTLIST par
%id-attr;
%desc-attr;
endsync CDATA "last"
dur CDATA #IMPLIED
repeat CDATA "1"
region IDREF #IMPLIED
%sync-attributes;
%system-attribute;
>
<!--=================== The Sequential Element ============================-->
<!ENTITY % seq-content "%container-content;">
<!ELEMENT seq (%seq-content;)*>
<!ATTLIST seq
%id-attr;
%desc-attr;
dur CDATA #IMPLIED
repeat CDATA "1"
region IDREF #IMPLIED
%sync-attributes;
%system-attribute;
>
<!--=================== The Switch Element ================================-->
<!-- In the head, a switch may contain only layout elements,
in the body, only container elements. However, this
constraint cannot be expressed in the DTD (?), so
we allow both:
-->
<!ENTITY % switch-content "layout|(%container-content;)">
<!ELEMENT switch (%switch-content;)*>
<!ATTLIST switch
%id-attr;
%title-attr;
>
<!--=================== Media Object Elements =============================-->
<!-- SMIL only defines the structure. The real media data is
referenced by the src attribute of the media objects.
-->
<!-- Furthermore, they have the following attributes as defined
in the SMIL specification:
-->
<!ENTITY % mo-attributes "
%id-attr;
%desc-attr;
region IDREF #IMPLIED
alt CDATA #IMPLIED
longdesc CDATA #IMPLIED
src CDATA #IMPLIED
type CDATA #IMPLIED
dur CDATA #IMPLIED
repeat CDATA '1'
%fill-attribute;
%sync-attributes;
%system-attribute;
">
<!--
Most info is in the attributes, media objects are empty or
contain associated link elements:
-->
<!ENTITY % mo-content "(%assoc-link;)*">
<!ENTITY % clip-attrs "
clip-begin CDATA #IMPLIED
clip-end CDATA #IMPLIED
">
<!ELEMENT ref %mo-content;>
<!ELEMENT audio %mo-content;>
<!ELEMENT img %mo-content;>
<!ELEMENT video %mo-content;>
<!ELEMENT text %mo-content;>
<!ELEMENT textstream %mo-content;>
<!ELEMENT animation %mo-content;>
<!ATTLIST ref %mo-attributes; %clip-attrs;>
<!ATTLIST audio %mo-attributes; %clip-attrs;>
<!ATTLIST video %mo-attributes; %clip-attrs;>
<!ATTLIST animation %mo-attributes; %clip-attrs;>
<!ATTLIST textstream %mo-attributes; %clip-attrs;>
<!ATTLIST text %mo-attributes;>
<!ATTLIST img %mo-attributes;>
<!--=================== Link Elements =====================================-->
<!ENTITY % smil-link-attributes "
%id-attr;
%title-attr;
href CDATA #REQUIRED
show (replace|new|pause) 'replace'
">
<!--=================== Inline Link Element ===============================-->
<!ELEMENT a (%schedule;|switch)*>
<!ATTLIST a
%smil-link-attributes;
>
<!--=================== Associated Link Element ===========================-->
<!ELEMENT anchor EMPTY>
<!ATTLIST anchor
%skip-attr;
%smil-link-attributes;
%sync-attributes;
coords CDATA #IMPLIED
>
(非正式)
SMIL 1.0可能會在將來被另一個W3C建議所擴展,或是出現專用擴展。
建議這些擴展遵循下列規則:
建議SMIL 1.0播放器應准備好處理包含遵循這兩個規則的擴展的文件。
一旦XML名字空間机制成為W3C建議,擴展應該用此机制處理。在本節的余下部分,W3C記錄[NAMESPACE]中定義的XML名字空間的語法和語義只用于說明性的目的。
可能會出現下列情況:
<?xml:namespace ns="http://www.acme.com/new-smil" prefix="new" ?>
<?xml:namespace ns="http://www.w3.org/TR/PR-smil" ?>
<smil>
<body>
<par>
<new:a>
...
</new:a>
<mytags:a ... />
...
</mytags:a>
<b>
...
</b>
</par>
</body>
</smil>
當XML名字空間机制被用于包含其他基于XML的文件中的SMIL元素和屬性時,建議使用下面的名字空間標識符:http://www.w3.org/TR/REC-smil