這份規格定義呈現同步媒體的 XML 格式 SyncMedia。所謂的呈現是指在將不同種類的媒體,精心安排在時間軸上。理解 SyncMedia 的播放器,會把 SyncMedia 的呈現結果提供給用戶。
這份規格是由供出版品用的多媒體社群小組發佈。並非 W3C 發佈的標準,或是在成為 W3C 標準的路上。 請注意在 W3C 社群貢獻者版權協議的規範下,僅適用有限的選擇退出和其他條件。 更多資訊請參考 W3C 社群與商業小組。
本規格中被標註為非規範性的章節,以及所有製作準則、圖表、範例以及注意事項都為非規範性。本規格其他部分皆為規範性。
關鍵字:可以(MAY)、< class="rfc2119">必須(MUST)>、不得(MUST NOT)、< class="rfc2119">推薦(RECOMMENDED)>、< class="rfc2119">應該(SHOULD)>在本文件中以如上粗體格式出現時,BCP 14[RFC2119] [RFC8174] 中的敘述解釋。
SyncMedia 是從EPUB3 媒體層疊進化而來,也同樣奠基於[[SMIL3]]。跟媒體層疊相比,SyncMedia將更多的SMIL概念納入其中,也可包含客製的功能。
對於 SyncMedia 與 SMIL3 和 EPUB 媒體層疊更詳細的比較結果,可以參考SyncMedia 解釋。
SyncMedia 是設計給同步媒體呈現的 XML 格式。它使用 [[SMIL3]]的一個子集,也定義其特有的客製功能。SyncMedia 檔案的副檔名是.sync
。
SyncMedia 的預設命名空間跟 SMIL 相同:http://www.w3.org/ns/SMIL
。
SyncMedia 的客製功能則使用 SyncMedia 的命名空間:https://w3.github.io/sync-media-pub
。
這是命名空間連結的佔位符;請參考問題36。
這個部分定義 SyncMedia 的元素和屬性,並提供範例。
所有 SyncMedia 文件都必須以smil
作為根元素。
SyncMedia 文件包含兩個部分head
和body
。head 部分包含後設資料和軌道資訊。媒體物件的在時間軸上呈現方式則放置在 body 部分。時間容器可以被用來同時或依序處理媒體。
SyncMedia 文件必須有body
部分。但它可能有head
部分。
元素 | 描述 |
---|---|
smil |
根元素 |
head |
與時間軸上的呈現無關的資訊 |
body |
用來呈現的主要[=序列時間容器=]。 |
媒體物件的處理順序——同時(同步)處理或者——(依照時序)處理——會由時間容器決定。時間容器可以存在於其他時間容器的巢狀結構中(但絕非以巢狀存在媒體物件中)。
元素 | 描述 |
---|---|
seq |
給媒體和(或)時間容器使用的 [=序列時間容器=] 。 |
par |
給媒體和(或)時間容器使用的 [=同步時間容器=]。 |
<smil xmlns="http://www.w3.org/ns/SMIL"> <body> <par> <audio src="chapter01.mp3" clipBegin="30" clipEnd="40"/> <text src="chapter01.html#heading_01"/> </par> <par> <audio src="chapter01.mp3" clipBegin="40" clipEnd="50"/> <text src="chapter01.html#para_01"/> </par> <par> <audio src="chapter01.mp3" clipBegin="50" clipEnd="60"/> <text src="chapter01.html#para_02"/> </par> </body> </smil>
結構語意可以透過sync:role
屬性加入時間容器之中。屬性內的值必須來自WAI-ARIA 文件的結構或DPUB-ARIA。
在 SyncMedia 的時間容器中加入結構語意有許多好處。理解語意角色值的使用者代理可以為使用者提供客製化體驗,譬如能夠跳過某些會干擾旁白流暢度的次要內容類型(像是通常加入文件中替紙本和數位版本提供參照點的頁碼宣告。)
屬性 | 描述 |
---|---|
sync:role |
單一或多個語意角色。 |
待辦事項 問題12
<smil xmlns="http://www.w3.org/ns/SMIL" sync:xmlns="https://w3.github.io/sync-media-pub"> <body> <par> <audio src="chapter01.mp3" clipBegin="50" clipEnd="60"/> <text src="chapter01.html#para_02"/> </par> <par sync:role="doc-pagebreak"> <audio src="chapter01.mp3" clipBegin="60" clipEnd="62"/> <text src="chapter01.html#pg_04"/> </par> <par> <audio src="chapter01.mp3" clipBegin="62" clipEnd="70"/> <text src="chapter01.html#para_03"/> </par> </body> </smil>
媒體資源會以媒體物件的形式含在 SyncMedia 當中。媒體資源的實際位置是外部檔案、(或者也很常見的)是檔案的一個片段,像是一小段的音訊或影片、或者一部分的 HTML 文件。
下方表格描述 SyncMedia 中的各種媒體物件。Ref
可以被用來代表各種媒體,但作者群通常偏好使用媒體類型專屬的同義詞。
元素 | 描述 |
---|---|
audio |
音訊媒體的參照位置 |
image |
圖像媒體的參照位置 |
ref |
通用的媒體參照位置 |
text |
外部純文字檔案內容的參照位置 |
video |
影像媒體的參照位置 |
媒體物件的屬性是用來:
屬性 | 描述 |
---|---|
clipBegin |
跟 SMIL3 中的clipBegin一樣,是某個時基媒體片段的開始。 |
clipEnd |
跟 SMIL3 中的clipEnd一樣,是某個時基媒體片段的結束。 |
panZoom |
跟 SMIL3 中的panZoom一樣,是媒體物件中的某個矩形部分。 |
repeatCount |
標示出某個時基媒體物件的重複次數。跟 SMIL3 中的repeatCount一樣,值是個數字,或者「indefinite」(無限期)。 |
src |
媒體檔案的網址,可以選擇包含[[媒體斷片]]。 |
sync:track |
sync:track 元素的編號。 |
EPUB媒體層疊的時間值被認定是有效的片段開頭及結尾值,因為SMIL MediaClipping Module表示如果若文件沒有給定單位的說明符,就會假設使用普通播放時間(npt
)而非smpte
。
如果媒體片段的src
,以及clipBegin
或clipEnd
屬性同時存在,就必須依照All Media Fragment Clients的定義,根據媒體斷片的偏移量對資源進行剪輯。
在參照檔案較大的媒體時,我們「推薦」使用搭配 src
的媒體片段;當定義精心安排的片段時,則推薦使用clipBegin
和clipEnd
屬性。這般推薦的目的是將客戶端檢索資源的需求(可能是靠向伺服器發出統一資源識別完成)與定位資源片段的需求(靠著參照媒體片段的開頭與結束點)分開。否則,當用戶端在逐一獲取各個片段時,就得使用複雜的暫存機制將片段間的小問題移除,以提供順暢的播放體驗。
嵌入媒體(如 HTM L文件中的影片)可以透過搭配其嵌入文件的網址及網址的方式來參照。
因此,[=媒體物件處理器=]應該支援基於選擇器開啟 HTML 文件及解參照內容的功能。
<par> <text src="doc.html#para1"/> <video src="doc.html#video1" clipBegin="0" clipEnd="10"/> </par>
SyncMedia 使用 SMIL3 的param將指標傳入[=媒體物件處理器=]
元素 | 描述 |
---|---|
param |
媒體物件處理指標 |
param
的屬性有:
屬性 | 描述 |
---|---|
名稱 |
指標名稱 |
值 |
指標的值 |
以下指標名稱
有明確定義的值:
名稱 | 允許的值 | 描述 | 給哪(幾)種媒體物件 |
---|---|---|---|
cssClass |
一或多個字串 | 指定使用哪些類別的名稱 | 媒體可以用 CSS 加上樣式 |
clipPath |
就跟SVG 路徑資料屬性的定義一樣。 | 這個圖形被用來為媒體加上剪裁遮色片。 | 視覺媒體 |
pan |
介於 -1(完全靠左)跟1(完全靠右)之間 | 標示出向左或向右橫搖。 | 音訊媒體 |
playbackRate |
1.0(正常速度)、更慢或更快 | 標示播放的速率值應該與 HTML 的{{HTMLMediaElement/playbackRate}}一致。 | 時基媒體 |
音量 |
介於 0 和 1 之間。 | 標示音量 | 有聲媒體 |
clipPath
使用 SVG 的路徑定義來規定剪輯的路徑。這個剪輯行為會套用在它所定義的媒體物件的可視範圍內。在與panZoom
同時使用時,clipPath
應該被應用在由panZoom
屬性限定的矩形之中。
<smil xmlns="http://www.w3.org/ns/SMIL"> <body> <par> <audio src="chapter01.mp3" clipBegin="30" clipEnd="40"/> <text src="chapter01.html#heading_01"> <param name="cssClass" value="highlight"/> </text> </par> <par> <audio src="chapter01.mp3" clipBegin="40" clipEnd="50"/> <text src="chapter01.html#para_01"> <param name="cssClass" value="highlight"/> </text> </par> <par> <audio src="chapter01.mp3" clipBegin="50" clipEnd="60"/> <text src="chapter01.html#para_02"> <param name="cssClass" value="highlight"/> </text> </par> </body> </smil>
這個 SyncMedia 的呈現方式,會將同種類的媒體物件統整入一個名為「軌道」的虛擬空間。軌道必須被放在 SyncMedia 文件的head
。軌道具備許多有用的功能:
音訊
媒體物件,可以被自動分配到軌道中)。上述功能能夠減少繁瑣的作業,要不然每個媒體物件都需要逐一明確定義這些屬性。
元素 | 描述 |
---|---|
sync:track |
[=媒體物件=]被指派的虛擬空間。使用者代理可以以單曲為單位介入控制。(譬如調整旁白軌道的音量)。sync:track 可以有 [=媒體參數=],這會成為軌道上 [=媒體物件=]的預設值。 |
屬性 | 描述 |
---|---|
sync:label |
軌道的標籤 |
sync:defaultSrc |
這個軌道上的媒體檔案會使用的檔案的預設網址。 |
sync:defaultFor |
指定類型的媒體物件(音訊 、圖片 、影像 、文字 、引用 之一)會自動被分配到這個軌道。 |
sync:trackType |
指示這軌道會以哪種方式呈現。 |
待辦事項: 問題31
<smil xmlns="http://www.w3.org/ns/SMIL" sync:xmlns="https://w3.github.io/sync-media-pub"> <head> <sync:track sync:label="Page" sync:defaultFor="text" sync:defaultSrc="chapter01.html" sync:trackType="contentDocument"> <param name="cssClass" value="highlight"/> </sync:track> </head> <body> <par> <audio src="chapter01.mp3" clipBegin="30" clipEnd="40"/> <text src="#heading_01"/> </par> <par> <audio src="chapter01.mp3" clipBegin="40" clipEnd="50"/> <text src="#para_01"/> </par> <par> <audio src="chapter01.mp3" clipEnd="50" clipEnd="60"/> <text src="#para_02"/> </par> </body> </smil>
<smil xmlns="http://www.w3.org/ns/SMIL" sync:xmlns="https://w3.github.io/sync-media-pub"> <head> <sync:track id="background-music" sync:trackType="backgroundAudio"> <param name="volume" value="0.5"/> </sync:track> <sync:track sync:label="Narration" sync:defaultFor="audio" sync:trackType="audioNarration"/> <sync:track sync:label="Page" sync:defaultFor="text" sync:trackType="contentDocument"> <param name="cssClass" value="highlight"/> </sync:track> </head> <body> <par> <audio sync:track="background-music" src="bkmusic.mp3" repeat="indefinite"/> <seq> <par> <audio src="chapter01.mp3" clipBegin="30" clipEnd="40"/> <text src="chapter01.html#heading_01"/> </par> <par> <audio src="chapter01.mp3" clipBegin="40" clipEnd="50"/> <text src="chapter01.html#para_01"/> </par> <par> <audio src="chapter01.mp3" clipEnd="50" clipEnd="60"/> <text src="chapter01.html#para_02"/> </par> </seq> </par> </body> </smil>
雖然沒有提供預設值,但之所以要加入旁白sync:track
是因為這讓使用者代理能分別調整旁白音訊和背景音樂音訊。
SyncMedia 有納入後設資料的原生機制,但沒有事先定義任何的後設資料後設資料必須放在 SyncMedia 文件的head
。
元素 | 描述 |
---|---|
metadata |
這個延伸點允許用來包含來自任何後設資訊結構語言的後設資料。 |
[=軌道=]可以為 [=媒體物件=]提供預設值。這個段落提供應用這些值的規則
軌道屬性 | 對媒體物件的影響 |
---|---|
sync:defaultSrc |
為媒體物件提供src 屬性。如果媒體物件的src 單純只是選擇器,那麼這選擇器就會被附加到軌道的sync:defaultSrc 之上。媒體物件的src 的任何值,都會覆蓋掉軌道的sync:defaultSrc 。 |
此外,為任一軌道制定的 [=媒體參數=],會被隸屬該軌道的任何媒體物件繼承。例外情況是當媒體物件本身提供相同名稱
的指標,此時媒體物件指標的值
會覆蓋掉軌道指標的值
。
SyncMedia 文件經讀取後,就準備好被處理。
元素 | 處理行為 |
---|---|
body |
像seq 一樣被處理 |
seq |
所有的子項目會依序處理,當前者結束後,後者就會開始處理。當最後一個子項目結束後即告終結。 |
par |
同時處理子項目。當所有子項目結束後即告終結。 |
audio |
播放所參照的音訊檔案片段,並將params 用於其上。當參照的片段結束即告終結。 |
圖片 |
讀取圖片檔案或部分圖片,並將params 用於其上。非時基,所以被認為會即刻結束。 |
ref |
會推論媒體類型,如果是支援的種類的話,就會處理檔案和片段,並將params 用於其上。如果是時基的類型,其終結就是片段結束;若為非時基的類型,就會即刻結束。 |
text |
顯示 HTML 文件,確保參照的元素可視,並將params 用於其上。非時基,所以被認為會即刻結束。 |
video |
播放影片檔案或片段,並將params 用於其上。當片段終結即告終結。 |
關於使用repeatCount
的媒體,以及其何時被認定終結的備註。
待辦事項:要涵蓋多大的範圍?
trackType
所指示)兩者間可能不合情理(譬如加快呈現過程,但沒有加快背景音樂)的備註。除了上述所列的屬性外,這個段落還加入下列的標準XML屬性:
屬性 | 描述 |
---|---|
xml:base |
文件根位址,如[[XMLBASE]]所定義。 |
xml:id |
某元素的唯一識別字串,如[[XML-ID]]所定義。 |
xml:lang |
語言識別字串,如[[XML]]所定義 |
這是給 SyncMedia 的XML 內容模型。會明確指出必須的元素和屬性
元素 | 屬性 | 內容 |
---|---|---|
`smil`(必須) | 需依照這個順序: | |
`head` | 可任意順序:
|
|
`metadata` | 來自任何命名空間的零個或多個元素 | |
`sync:track` |
|
|
`param` |
|
空 |
`body` | 可任意順序: | |
`seq` | 可任意順序: | |
`par` | 可任意順序: | |
`audio` |
|
|
`image` |
|
|
`ref` |
|
|
`text` |
|
|
`video` |
|
在此文件出版的當下,出版品同步媒體社群小組的成員如下:
Avneesh Singh (DAISY Consortium), Ben Dugas (Rakuten, Inc.), Chris Needham (British Broadcasting Corporation), Daniel Weck (DAISY Consortium), Didier Gehrer, Farrah Little (BC Libraries Cooperative), George Kerscher (DAISY Consortium), Ivan Herman (W3C), James Donaldson, Lars Wallin (Colibrio), Livio Mondini, Lynn McCormack (CAST, Inc), Marisa DeMeglio (DAISY Consortium, chair), Markku Hakkinen (Educational Testing Service), Matt Garrish (DAISY Consortium), Michiel Westerbeek (Tella), Nigel Megitt (British Broadcasting Corporation), Romain Deltour (DAISY Consortium), Wendy Reid (Rakuten, Inc.), Zheng Xu (Rakuten, Inc.)