摘要

這份規格定義呈現同步媒體的 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

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 的呈現方式。
同步媒體播放器
知道如何執行和播放的[=同步媒體文件=]的使用者代理。
時間容器
這個容器規定附屬項目的播放順序。
軌道
這個組織性概念,為媒體物件定義出一個有意義的虛擬處理空間,與視覺排版無關,且帶有預設屬性。

文件結構

所有 SyncMedia 文件都必須smil作為根元素。

SyncMedia 文件包含兩個部分headbody。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,以及clipBeginclipEnd屬性同時存在,就必須依照All Media Fragment Clients的定義,根據媒體斷片的偏移量對資源進行剪輯。

在參照檔案較大的媒體時,我們「推薦」使用搭配 src 的媒體片段;當定義精心安排的片段時,則推薦使用clipBeginclipEnd屬性。這般推薦的目的是將客戶端檢索資源的需求(可能是靠向伺服器發出統一資源識別完成)與定位資源片段的需求(靠著參照媒體片段的開頭與結束點)分開。否則,當用戶端在逐一獲取各個片段時,就得使用複雜的暫存機制將片段間的小問題移除,以提供順暢的播放體驗。

嵌入媒體

嵌入媒體(如 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。軌道具備許多有用的功能:

  1. 軌道可以提供預設的params,並可應用在軌道中的任何媒體物件上。
  2. 軌道可以有特定的媒體物件類型,可以將軌道設為預設值。(譬如所有的音訊媒體物件,可以被自動分配到軌道中)。
  3. 軌道可以有個供所有媒體物件使用的預設來源,並搭配媒體物件本身的片段說明符使用。

上述功能能夠減少繁瑣的作業,要不然每個媒體物件都需要逐一明確定義這些屬性。

元素 描述
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的媒體,以及其何時被認定終結的備註。

用戶的互動行為

待辦事項:要涵蓋多大的範圍?

XML

附加屬性

除了上述所列的屬性外,這個段落還加入下列的標準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.)