︿
Top

1、前言

以下筆記內容為擷取 Windows Media Services 9 說明檔及自已的理解製作而成,若需要更詳細深入的語法請參考 Synchronized Multimedia Integration Language (SMIL 2.1)


Windows Media 伺服器端播放清單檔案為可延伸標記語言 (XML) 文件,且是以 Synchronized Multimedia Integration Language (SMIL 2.0) 語言規格為基礎。它們是用來啟用伺服器,以收集並傳送資料的串流至用戶端。您可以使用 Windows Media 播放清單編輯器或文字編輯器 (如記事本),來建立播放清單檔案。然後播放清單會由對應的「播放清單分析」外掛程式是解譯。

7 個基本 XML 播放清單元件中,有 6 個可以作為父系元件:smil、seq、excl、media、priorityClass、switch。
  • seq 和 excl 元件是 時間 容器,代表它們負責控制子元件的時間。
  • priorityClass 和 switch 元件是 控制項 容器,代表它們負責控制子元的互動。



文章目錄

1、前言
2、七種播放清單元件
          元件1.smil
          元件2.media
          元件3.seq
          元件4.switch
          元件5.excl
          元件6.priorityClass
          元件7.clientData
3、四種播放清單屬性
          屬性1.媒體定義類別
          屬性2.中繼資訊類別
          屬性3.同步處理類別
          屬性4.時間類別
4、補充.begin.wallclock參數實現對時目的



2、七種播放清單元件

元件1.smil

smil 元件是播放清單檔案的根元件。它的主要目的是識別播放清單是否以 Synchronized Multimedia Integration Language (SMIL) 為根據。此外,smil 元件具有與 seq 元件相同的功能,這表示會依序播放它的子元件。smil 元件可使用的播放清單屬性如下:
begin、dur、end、syncEvent、id、repeatCount、repeatDur


元件2.media

播放清單中的 media 元件提供了數位媒體來源的位置,並可指定數位媒體內容播放或呈現至用戶端的方式。media 元件可參照可由資料來源外掛程式存取,並由媒體或「播放清單分析」外掛程式所分析的任何數位媒體來源。預設會啟用適當的外掛程式。數位媒體來源範例包括本機電腦上的檔案、來自執行 Windows Media 編碼器或 Windows Media Services 的遠端電腦之串流、其他播放清單檔案、網頁伺服器上的 Active Server Page (ASP 網頁),或者協力廠商儲存系統上的數位媒體檔案。meida元件可使用的播放清單屬性如下:
src、begin、clipBegin、clipEnd、dur、end、syncEvent、id、mediaName、noSkip、repeatCount、repeatDur、role


元件3.seq

seq 元件為時間容器元件,可指定其子元件所播放的順序。seq 元件中的子 media 元件會按順序播放,從第一個元件到最後一個。seq 元件中所包含的其他類型的元件也會按順序啟動。seq元件可使用的播放清單屬性如下:
begin、dur、end、syncEvent、id、repeatCount、repeatDur


元件4.switch

switch 元件可指定若一或多個現有 media 元件失敗時可以使用的替代 media 元件。伺服器會按 switch 元件中子元件所列的順序來評估他們,以辨識可以順利存取及串流處理的有效元件。當伺服器辨識及串流處理有效元件時,會忽略 switch 元件中的其他元件。在所選取的元件停止串流處理後,伺服器會繼續串流處理播放清單 switch 元件後的部份。 switch 元件在執行伺服器端播放清單中的內容切換時非常有用。您可以使用具有多個實況來源的 switch 元件來設定內容切換及儲存檔案,以為您的串流提供容錯。switch元件可使用的播放清單屬性如下:
syncEvent、id


元件5.excl

excl 元件是時間容器元件,在該元件中每次僅可播放一個 media 元件,但是不會決定播放子元件的順序。若您想依不同的準則來控制子元件的開始時間,請使用 excl 元件。例如,可使用程式設計事件或者明確指定開始時間的 begin 屬性來觸發子元件。與 seq 元件的子元件不同 (一旦已啟動 seq 元件其子元件會按順序播放),excl 元件的子元件在明確啟動之前不會播放。excl元件可使用的播放清單屬性如下:
begin、dur、end、endSync、syncEvent、id、repeatCount、repeatDur


元件6.priorityClass

priorityClass 元件控制 media 元件中斷播放其他元件的方式,以及被中斷的 media 元件的播放狀態。若您僅想設定一個元件中斷另一個的播放,您可以使用 excl 或 seq 元件,將其 begin 屬性設定為當一個元件正在播放時啟動另一個元件。然而,priorityClass 元件可讓您指定是否停止、暫停或永不中斷被中斷的元件。若將 media 元件設定為當中斷時 Pause,它會在中斷它的元件結束時,從暫停點開始繼續串流處理。若將其設定為 Stop,當中斷它的元件停止時,它將不會再進行串流處理。使用 priorityClass 元件,您也可以指定是將中斷延遲至目前的 media 元件完成,還是忽略所有。另外,priorityClass 元件的子元件以及包含在 excl 元件容器中的 priorityClass 元件的優先順序與它們在播放清單中列出的順序相同。調整優先權的能力可讓您進一步控制子元件的行為。

當使用 priorityClass 元件時請記住以下幾點:
  1. priorityClass 元件必須是 excl 元件的子元件並且必須直接位於 excl 元件之下。若 excl 元件包含一或多個 priorityClass 元件,則所有與該 excl 元件相關的 media 元件必須包含在 priorityClass 元件中。
  2. 根據 priorityClass 元件在 excl 元件中宣告的順序,指定 priorityClass 元件的優先權等級。第一個宣告的 priorityClass 有最高的優先權,最後一個宣告的 priorityClass 則有最低的優先權。
  3. 若 priorityClass 元件未使用,則 excl 元件中的 media 元件的運作與將其 peers 屬性設定為 Stop 時一樣。在此情況下,若一個 media 元件中斷了另一個元件,則被中斷的元件停止並且不再繼續。

priorityClass元件可使用的播放清單屬性如下
syncEvent、higher、id、lower、peers


元件7.clientData

您可以使用 clientData 元件將描述文字、橫幅影像及記錄資訊與播放清單元件相關聯。描述文字 (如演出者名稱與曲目標題) 顯示於使用 Windows Media Player 9 系列 ActiveX 控制項的 Windows Media Player 9 系列或播放程式。您也可以使用 clientData 元件來顯示橫幅影像、相關的超連結及工具提示文字。

您可以將 clientData 元件插入到播放清單中任何地方。它可以是除了另一個 clientData 元件之外任何元件的子元件。當 clientData 元件正在使用時,它所包含的資訊會傳送至用戶端。

excl、seq、priorityClass 或 switch 元件可以具有一個以上的 clientData 元件,而且每一個 clientData 元件可以包含多個屬性。根據新增的 clientData 元件所在的位置,資訊會套用至個別 media 元件或 media 元件的集合。clientData 元件會被更高層級的 clientData 元件所覆寫。例如,為 media 元件群組指定的標題資訊優先於為個別 media 元件指定的標題資訊。同樣,在檔案標題中編碼的文字屬性 (如標題、作者及著作權) 也會被播放清單中相對應的 clientData 元件所覆寫。

clientData元件可使用的播放清單屬性如下:
album、artist、author、bannerAbstract、bannerInfoURL、bannerURL、copyright、genre、logURL、title



3、四種播放清單屬性

說明 Windows Media 播放清單檔案元件內可使用之各項屬性:

屬性1.媒體定義類別

媒體定義屬性經常與 media 元件一起使用,來說明元件或元件來源的播放行為。

  • id: 可使用 id 屬性來為任何元件新增識別碼,但是它對於辨識 media 元件是最有用的,id 屬性的每個值都必須是文字字串,並且在播放清單中必須是唯一的不可有重覆名稱出現。數字可在 id 屬性的文字字串中使用,但它們不能用作 id 屬性值的第一個字元。例如,如果將 3media 作為 id 屬性值,則此 id 屬性會被忽略。但字串 Media3 是有效的。
  • mediaName: 提供顯示在用戶端 media 元件的名稱,您可以使用 mediaName 屬性,防止惡意使用者發現您網路上數位媒體內容的實際名稱。
  • noSkip: 指定播放 media 元件時,Windows Media Player 中的下一個、倒帶、向前快轉、暫停及搜尋功能是否啟動。可以使用此屬性來防止使用者略過 media 元件,例如廣告。
  • role: 指定 media 元件的目的或類型,並可讓您建立數位媒體來源的自訂類別,主要目的在於協助您分析及瞭解記錄資料。
  • src: 使用 URL、通用命名慣例 (UNC) 路徑或絕對路徑來辨識 media 元件的內容來源。

id 屬性範例
第一個 media 元件內的 id 用來辨識它,使其作為第二個 media 元件的 begin 值中之 SyncBase。在此範例中,Music2 開始於 Music1 的結束點 (Music1.end)。id 屬性的值除了讓參照元件使用之外,也可僅用來使播放清單更容易閱讀。
 <?wsx version='1.0'?>
 <smil>
    <excl>
        <media id="Music1" src="14442A.wma" begin="0s"/>
        <media id="Music2" src="65563B.wma" begin="Music1.end"/>
    </excl>
 </smil>


mediaName 屬性範例
當播放播放清單時,第一個項目以名稱 X-563cvb12.wmv 記錄。第二個項目以名稱 My Movie 記錄。
 <?wsx version='1.0'?>
 <smil>
    <media src="X-563cvb12.wmv/>
    <media src="Bv-291X.wmv" mediaName="My Movie"/>
 </smil>

當播放下列播放清單時,用戶端接收到的內容說明清單包含第一個項目的檔案名稱,以及第二個項目的 mediaName 屬性值 Movie1。
 <?wsx version="1.0"?>
 <smil>
    <media src="file://\\movie_server\licensed_content\2XM-56YZ.wmv" />
    <media src="file://\\movie_server\licensed_content\2XM-34YZ.wmv" mediaName="Movie1" />
 </smil>


noSkip 屬性範例
使用者在可以串流處理 MovieClip.wmv 之前必須播放全部 IntroClip.wmv。
 <?wsx version="1.0"?>
 <smil>
    <media src="c:\Wmpub\Wmroot\IntroClip.wmv" noSkip="true" />
    <media src="c:\Wmpub\Wmroot\MovieClip.wmv" mediaName="Movie" />
 </smil>


src 屬性範例
播放清單中使用了四種類型的內容來源。
 <?wsx version='1.0'?>
 <smil>
    <media id="VideoFile" src="D:\LocalMedia\Video4.wmv"/>
    <media id="Playlist" src="Playlist.wsx"/>
    <media id="LocalPubPoint" src="lpp://pubpoint5"/>
    <media id="LiveStream" src="http://encoder:1000"/>
 </smil>



屬性2.中繼資訊類別

中繼資訊內屬性值經常與 clientData 元件一起使用,指定的值都必須為文字字串。
  • album: 指定 media 元件內 專輯 名稱。
  • artist: 指定 media 元件內 演出者 名稱。
  • author: 指定 media 元件內 內容建立者 名稱。
  • bannerURL: Windows Media Player 中顯示的 橫幅影像,其介面最大區域 32 像素高乘 194 像素寬。
  • bannerAbstract: 提供使用者在橫幅影像上暫停時滑鼠指標 顯示的文字 資訊。
  • bannerInfoURL: 指定 Windows Media Player 橫幅影像之 超連結
  • copyright: 指定 media 元件內 著作權 資訊。
  • genre: 指定了 media 元件的 類型
  • logURL: 可讓每一個 clientData 元件將記錄資訊導向網路的其他位置。
  • title: 指定了 media 元件集合的內容 標題
  • album: 屬性範例。

當下列範例播放清單執行時,音樂輯顯示為 seq 元件中所有 media 元件的專輯標題。專輯標題未用Ad1.wma顯示,它在順序前播放。
 <?wsx version='1.0'?>
 <smil>
    <media src="Ad1.wma"/>
    <seq>
        <media src="Music1.wma"/>
        <media src="Music2.wma"/>
        <media src="Music3.wma"/>
        <media src="Music4.wma"/>
        <clientData album="Music Album"/>
    </seq>
 </smil>


artist 屬性範例
來源檔案 IntroFile1.wma 的 artist 屬性值為 Jeff Smith:
 <?wsx version="1.0"?>
 <smil>
   <media id="intro" src="IntroFile1.wma">
      <clientData artist="Jeff Smith"/>
   </media>
 </smil>


author 屬性範例
來源檔案 IntroFile1.wma 指定了 author 屬性值 Karen Berge:
 <?wsx version="1.0"?>
 <smil>
   <media id="intro" src="IntroFile1.wma">
      <clientData author="Karen Berge"/>
   </media>
 </smil>

bannerURL、bannerAbstract、bannerInfoURL 屬性範例
用戶端存取播放清單時,會下載 Spain_Banner1.gif 並在播放程式中顯示。當使用者按一下橫幅時,網頁瀏覽器會顯示 bannerInfoURL 屬性中指定的網頁。bannerAbstract 屬性值是以工具提示的形式顯示。
 <?wsx version="1.0"?>
 <smil>
    <media src="lpp://Server/Spain">
        <clientData title="Spain"
         bannerAbstract="Click here for more information about Spain"
         bannerInfoURL="http://webserver/spain/default.asp"
         bannerURL="http://webserver/images/spain_banner1.gif"/>
    </media>
 </smil>


copyright 屬性範例
將 copyright 屬性值指定給來源檔案 IntroFile1.wma:
 <?wsx version="1.0"?>
 <smil>
   <media id="intro" src="IntroFile1.wma">
      <clientData copyright="(c)Microsoft Corporation 2002"/>
   </media>
 </smil>


genre 屬性範例
將 genre 屬性值 Documentary 指定給來源檔案 IntroFile1.wma:
 <?wsx version="1.0"?>
 <smil>
   <media id="intro" src="IntroFile1.wma">
      <clientData genre="Documentary"/>
   </media>
 </smil>


logURL 屬性範例
用戶端首先開啟播放清單時,會將記錄資料傳送至執行 Showlog.asp 的網路位置,且用戶端播放 media 元件 Example01.wmv 時,會將記錄資料傳送至執行 Wmsiislog.dll 的另一個網路位置。
 <?wsx version='1.0'?>
 <smil>
    <clientData logURL="http://webserver1/log/showlog.asp"/>
    <media src="Example01.wmv">
        <clientData logURL="http://webserver2/data/wmsiislog.dll"/>
    </media>
    <media src="Example02.wmv"/>
 </smil>


title 屬性範例
將 title 屬性值指定給來源檔案 IntroFile1.wma。
 <?wsx version="1.0"?>
 <smil>
   <media id="intro" src="IntroFile1.wma">
      <clientData title="Windows Media Services Introductory Video"/>
   </media>
 </smil>


中繼資訊類別實作
自行實作一個簡單把中繼資訊類別的實作播放清單內容如下,音樂來源在機器本身硬碟內。
 <?wsx version="1.0" encoding="utf-8"?>
 <smil>
 <clientData album="十一月的蕭邦" artist="周杰倫" copyright="阿爾發唱片公司" bannerInfoURL="http://www.weithenn.org"
 bannerURL="http://www.weithenn.org/logo3.gif" bannerAbstract="超連結顯示文字" genre="個人收藏MP3"/>
 <media src="C:\mp3\jay01.mp3">
   <clientData title="夜曲"/>
 </media>
 <media src="C:\mp3\jay02.mp3">
   <clientData title="藍色風暴"/>
 </media>
 <media src="C:\mp3\jay03.mp3">
   <clientData title="髮如雪"/>
 </media>
 <media src="C:\mp3\jay04.mp3">
   <clientData title="黑色毛衣"/>
 </media>
 <media src="C:\mp3\jay05.mp3">
   <clientData title="四面楚歌"/>
 </media>
 <media src="C:\mp3\jay06.mp3">
   <clientData title="楓"/>
 </media>
 <media src="C:\mp3\jay07.mp3">
   <clientData title="浪漫手機"/>
 </media>
 <media src="C:\mp3\jay08.mp3">
   <clientData title="逆鱗"/>
 </media>
 <media src="C:\mp3\jay09.mp3">
   <clientData title="麥芽糖"/>
 </media>
 <media src="C:\mp3\jay10.mp3">
   <clientData title="珊瑚海"/>
 </media>
 <media src="C:\mp3\jay11.mp3">
   <clientData title="飄移"/>
 </media>
 <media src="C:\mp3\jay12.mp3">
   <clientData title="一路向北"/>
 </media>
 </smil>


顯示在 Client 端 Windows Media Plyaer 圖示
下列圖示可以看到所設定的播放清單資訊會正確顯示在 Client 端 Windows Media Player上,請注意播放清單語法內 不可有(& ”“ < >) 等五個特殊符號,若有的話將造成播放清單無法匯入的情況。





屬性3.同步處理類別

同步處理類別內的屬性常與 priorityClass 元件一起專門用於定義當一個子 media 元件中斷另一個元件時,會發生的事件。priorityClass 元件必須包含在 excl 元件中,並僅能將 media 元件作為其子元件。多個 priorityClass 元件的優先順序,是取決於 priorityClass 元件在 excl 元件中宣告的順序。
  • higher: 指定 priorityClass 元件內的 media 元件在被 更高 的 priorityClass 之 media 元件中斷時的行為(pause暫停/stop停止)。
  • lower: 指定 priorityClass 元件內的 media 元件在被 較低 的 priorityClass 之 media 元件中斷時的行為(defer順延/never拒絕)。
  • peers: 指定 priorityClass 元件內的 media 元件當其播放被同一 priorityClass (稱為 對等) 中的另一個 media 元件中斷時的行為(pause/stop/defer/never)。

higher 屬性範例
下列範例使用三個 priorityClass 元件,每一個都包含了一個 media 元件,當priorityClass 元件 P3 首先播放名為 Broadcast1 的 media 元件,該元件媒體來源為編碼器的廣播串流,因為 Broadcast1 是比 P2 之更高 priorityClass 元件的子元件,所以在第 45 秒的時候 Ad1 的 media 元件會中斷它。因為 P3 的 higher 屬性設定為 pause,所以 Broadcast1 當 Ad1 中斷它時是暫停狀態,當 Ad1.wma 播放結束時繼續播放,Ad1 播放了 10 秒後,因為 P1 有更高 priorityClass 元件的子元件,所以 Wait1 的 media 元件會中斷它。因為 P2 具有 higher 屬性值 stop,所以當 Wait1 完成時 Ad1 不會繼續播放。一旦 Wait1 完成,Broadcast1 就會繼續播放。

所以播放流程為:
  1. 播放http://encoder:1000內容(begin="0s"所以是最先被播放)。
  2. 播放http://encoder:1000經過45秒後,換播放 Ad1.wma 內容(begin="45s"),同時http://encoder:1000播放狀態為暫停(higher="pause")。
  3. 播放 Ad1.wma 經過10秒後,換播放 Bumper1.wma 內容(begin="Ad1.begin+10s"),同時 Ad1.wma 播放狀態為停止(higher="stop")。
  4. 當 Bumper1.wma 播放完畢後,接著播放 [http://encoder:1000] (Ad1.wma 播放狀態已經是停止)。

播放清單內容如下
 <?wsx version="1.0"?>
 <smil>
   <excl>
      <priorityClass id="P1">
         <media id="Wait1" src="Bumper1.wma" begin="Ad1.begin+10s"/>
      </priorityClass>
      <priorityClass id="P2" higher="stop">
         <media id="Ad1" src="Ad1.wma" begin="45s"/>
      </priorityClass>
      <priorityClass id="P3" higher="pause">
         <media id="Broadcast1" src="http://encoder:1000" begin="0s"/>
      </priorityClass>
   </excl>
 </smil>


lower 屬性範例
下列範例顯示了三個 priorityClass 元件,其中每一個都包含了一個 media 元件。首先播放名為 P1 的 priorityClass 元件中名為 Intro1 的 media 元件。P2 中的 Music2 設定為在第 10 秒時開始播放。然而,因為 P1 中的 lower 屬性值設定為 defer,所以直到 Intro1 完成 Music2 才可以開始播放。P3 中的 Music3 設定為在 Music2 開始 10 秒後開始播放。然而,因為 P2 中的 lower 屬性值設定為 never,所以 Music3 無法中斷 Music2,且因此永不會播放。
 <?wsx version="1.0"?>
 <smil>
    <excl>
        <priorityClass id="P1" lower="nefer">
            <media id="Intro1" src="Intro1.wmv" begin="0s"/>
        </priorityClass>
        <priorityClass id="P2" lower="never">
            <media id="Music2" src="Music2.wmv" begin="10s"/>
        </priorityClass>
        <priorityClass id="P3">
            <media id="Music3" src="Music3.wmv" begin="Music2.begin+10s"/>
        </priorityClass>
    </excl>
 </smil>


peers 屬性範例
當播放清單開始時,名為 Clip3.wmv 的 media 元件開始播放。其他元件設定為在 Clip3.wmv 開始1和2秒後開始。然而,因為 priorityClass 元件的 peers 屬性值為 defer,所以直到 Clip3.wmv 完成 Clip2.wmv 才可以播放。同樣地,Clip1.wmv 必須等到 Clip2.wmv 及 Clip3.wmv 這兩個元件都完成了才可以播放。
 <?wsx version='1.0'?>
 <smil>
   <excl>
      <priorityClass peers="defer">
         <media src="Clip1.wmv" begin="2s"/>
         <media src="Clip2.wmv" begin="1s"/>
         <media src="Clip3.wmv" begin="0s"/>
      </priorityClass>
   </excl>
 </smil>




屬性4.時間類別

定義每個元件的時間,簡單來說就是定義每個元件何時開始與何時結束。
  • begin: 指定用於 開始 或啟動元件的時間值。
  • clipBegin: 指定在 media 元件來源中播放 開始的端點
  • clipEnd: 指定 media 元件的 結束點
  • dur: 指定元件 播放的時間 長短。
  • end: 指定了元件 停止並結束 串流處理資料的時間值。
  • endSync: 根據某一子元件的結束來決定 excl 元件的結束。
  • repeatCount: 指定元件的重複次數。
  • repeatDur: 指定了元件在停止前重播的時間長度。
  • syncEvent: 啟動包裝函式播放清單中的元件。

begin 屬性範例
在下面的範例中,media 元件 Intro.wma 會啟動播放清單,因為它的 begin 屬性值為 0s。當 Intro.wma 播放 10 秒後便中斷播放換進入 id 名為 Prog 的播放清單並播放 Program.wma,在 Program.wma 播放了 10 秒後,meida 元件 Comml1 會中斷它,因為其 begin 屬性值為 prog.begin+10s。同樣,在 Comml1 結束時,Comml2 會播放,因為其 begin 屬性值為 comml1.end。因為 priorityClass 元件的 peers 屬性值為 pause,所以當 Comml2 結束時 Prog 會繼續播放。

所以播放流程為:
  1. Intro.wma 播放 10 秒後中斷 (因為 begin="0s")。
  2. Program.wma 播放 10 秒後中斷 (因為 begin="prog.begin+10s")。
  3. Commercial1.wma 播放完畢換播放Commercial2.wma。
  4. Commercial2.wma 播放 (因為 begin="comml1.end")。
  5. Program.wma繼續播放 (因為 priorityClass peers="pause")。

播放清單內容如下
 <?wsx version="1.0"?>
 <smil>
    <excl>
        <media src="Intro.wma" begin="0s"/>
        <priorityClass peers="pause">
            <media id="Comml1" src="Commercial1.wma" begin="prog.begin+10s"/>
            <media id="Comml2" src="Commercial2.wma" begin="comml1.end"/>
            <media id="Prog" src="Program.wma" begin="10s"/>
        </priorityClass>
    </excl>
 </smil>


clipBegin 屬性範例
在下面的範例中,media 元件 Program.wma 會在 Bumper1.wma 播放完畢時開始播放,並在 Program.wma 檔案 35 秒的端點處開始播放(若 Program.wma 檔案為一分鐘則本例將播放時間為 00:35 ~ 00:60。
 <?wsx version="1.0"?>
 <smil>
    <media src="Bumper1.wma"/>
    <media src="Program.wma" clipBegin="00:35"/>
 </smil>


clipEnd 屬性範例
在下列範例中,media 元件 Intro.wmv 全部播放直到結束,再播放 LongLecture.wmv 的第一個區段。第一個區段在 01:23 分鐘時結束,然後播放第二個區段,其在檔案進入 5:35 分鐘時啟動。此區段在 7:05 分鐘時結束,然後播放最後一個區段,其從 12:30 播放至 15:00。

所以播放流程為:
  1. Intro.wmv 順利播放完畢。
  2. LongLecture.wmv 播放 (時間從 00:00 ~ 01:23)。
  3. LongLecture.wmv 播放 (時間從 05:35 ~ 07:05)。
  4. LongLecture.wmv 播放 (時間從 12:30 ~ 15:00)。

播放清單內容如下:
 <?wsx version="1.0"?>
 <smil>
    <media src="Intro.wmv"/>
    <media src="LongLecture.wmv" clipEnd="01:23"/>
    <media src="LongLecture.wmv" clipBegin="05:35" clipEnd="07:05"/>
    <media src="LongLecture.wmv" clipBegin="12:30" clipEnd="15:00"/>
 </smil>


dur 屬性範例
在下列範例中,三個 media 元件都是 excl 時間容器元件的子元件。名為 Logo 的 media 元件會先播放,因為它的 begin 值為 0s,並且會持續播放 10 秒。Billboard 在 Logo 結束時開始。Billboard 在進入檔案 Bboard.wmv 7 秒時開始播放,並繼續播放 10 秒。最後,Program 播放 2 分 30 秒。

所以播放流程為:
  1. Logo.wmv 播放 10 秒 (因為 begin="0s" dur="10s")。
  2. Bboard.wmv 播放 (時間從 00:07 ~ 00:17)。
  3. Prg.wmv 播放 (時間從 00:00 ~ 02:30)。

播放清單內容如下:
 <?wsx version="1.0"?>
 <smil>
   <excl>
      <media id="Logo" src="Logo.wmv" begin="0s" dur="10s"/>
      <media id="Billboard" src="Bboard.wmv" begin="Logo.end"
       clipBegin="7s" dur="10s"/>
      <media id="Program" src="Prg.wmv" begin="Billboard.end" dur="2:30"/>
   </excl>
 </smil>


end 屬性範例

在下列範例中,excl 元件包含了兩個 media 子元件。exel 元件一開始就播放名為 Intro 的 media 元件。Intro 會在 10 秒之後結束,因為它的 end 屬性值為 10s。名為 Music 的 media 元件設定為在 Intro 一結束就開始,且播放 25 秒。但是因為父 exel 元件設定為在其子元件播放了總計 30 秒之後將停止播放,所以子元件 Music 將僅會播放 20 秒。

所以播放流程為:
  1. Audio1.wma 播放 10 秒 (因為 begin="0s" end="10s)。
  2. MusicTrack.wma 播放 20 秒 (因為 excl begin="0s" end="30s")。
  3. 為何 MusicTrack.wma 只播放 20 秒?不是end="25s"嗎?因為 excl begin="0s" end="30s"也就是說總共只能播 30 秒但 Audio1.wma 已用了 10 秒了,所以只剩 20 秒給 MusicTrack.wma 播了。

播放清單內容如下:
 <?wsx version="1.0"?>
 <smil>
   <excl begin="0s" end="30s">
      <media id="Intro" src="Audio1.wma" begin="0s" end="10s"/>
      <media id="Music" src="MusicTrack.wma" begin="Intro.end" end="25s"/>
   </excl>
 </smil>


endSync 屬性範例
  • first: 指定 excl 元件在第一個使用中的 子元件結束之後結束
  • all: 指定 excl 元件在所有具有已解析的 begin 屬性值之子元件結束之後結束。
  • last: 指定 excl 元件在具有已解析或明確的 begin 屬性值之最後一個使用中子元件結束時結束。

在下列範例中,endSync 屬性值為 first。因為 excl 元件在第一個 media 元件 Clip_1.wmv 結束之後結束,所以永遠不會播放第二個及第三個 media 元件。
 <?wsx version="1.0"?>
 <smil>
  <excl endSync="first">
    <media src="C:\Wmpub\Wmroot\Clip_1.wmv" begin="0s" clipEnd="10s" />
    <media src="C:\Wmpub\Wmroot\Clip_2.wmv" begin="15s" dur="15s" />
    <media src="http://encoder_name:80" begin="Event1" />
  </excl>
 </smil>


repeatCount 屬性範例

  • number:指定時間表重複的次數(無條件加進如數值為 2.1 會向上進至 3)。
  • indefinite: 指定元件將無限次。

首先,因為名為 Logo 之 media 元件的 repeatCount 屬性值為 2,所以它會播放兩次。然後,因為 excl 元件的 repeatCount 屬性值也為 2,所以其中的元件也會播放並重複。最後,整個播放清單會播放第二次。

所以播放流程為:
  1. Logo.wmv 播放二次 (因為 repeatCount="2")。
  2. 播放 Music1.wmv (因為excl repeatCount="2")。
  3. 播放 Music2.wmv。
  4. 播放 Music1.wmv。
  5. 播放 Music2.wmv。

播放清單內容如下:
 <?wsx version="1.0"?>
 <smil repeatCount="2">
    <media id="Logo" src="Logo.wmv" repeatCount="2"/>
    <excl repeatCount="2">
        <media id="Music1" src="Music1.wmv" begin="0s"/>
        <media id="Music2" src="Music2.wmv" begin="Music1.end"/>
    </excl>
 </smil>


repeatDur 屬性範例
  • time:指定重播元件的總長度。
  • indefinite: 指定元件應重複的固定區間。

首先,名為 LogoGroove 的 media 元件會重播 15秒,因為它的 repeatDur 屬性值為 15s。然後 excl 容器中的 media 元件會完整地播放一遍並重播 30 秒,因為 excl 元件的 repeatDur 屬性值為 30s。最後,整個播放清單總共重播 3 分鐘。如果播放清單的總長度為 45 秒,則播放清單會重播四次。
 <?wsx version="1.0"?>
 <smil repeatDur="3:00">
    <media id="LogoGroove" src="LG.wma" repeatDur="15s"/>
    <excl repeatDur="30s">
        <media id="Introduction" src="Intro.wma" begin="0s"/>
        <media id="Sample" src="Sample.wma" begin="Introduction.end"/>
    </excl>
 </smil>




4、補充.begin.wallclock 參數實現對時目的

最近發現 Media Server 在播放一連串的檔案之後,隨著時間漸久發現時間誤差愈來愈大試過 dur 自以為能解決問題,但仍無法解決問題現在嘗試 wallclock 試試吧。

播放清單內容如下
 <media src="C:\music\1.wma" begin="wallclock(15:01:00.00)">    //檔案時間為 00:30
 <media src="C:\music\2.wma" begin="wallclock(15:01:30.00)">    //檔案時間為 00:30
 <media src="C:\music\2.wma" begin="wallclock(15:02:00.00)">    //檔案時間為 00:30

運作流程說明:
  • 15:00:00 啟動發行端點
  • 15:00:30 此時 1.wma 播放完畢
  • 15:00:31 此時 2.wma 開始播放
  • 15:00:59 此時 2.wma 已播放 29 秒即將結束播放
  • 15:01:00 此時將跳回 1.wma 並開始從頭播放

也就是說啟動發行端點的時間必須比播放清單指定的檔案時間還早,否則此功能將無法生效。
文章標籤: