SMIL彩信MMS技術學習

SMIL(Synchronized Multimedia Intergration Language,同步多媒體集成語言)音發作Smile,是W3C採用XML標準描述多媒體提出的標準。定義了時間標籤、佈局、動畫、視覺漸變和媒體嵌入。是一種以簡單,易於瞭解的XML語言
使各種格式的多媒體播放同步的語言。它可以集成到其它XML語言中,其他XML語言也能集成到該語言中,從而強化
XML的"可擴展"特徵。
SMIL的優點:
(1) 避免使用統一的包容文件格式
(2)同時播放在不同地方(服務器上)的多媒體片斷
(3)時間控制
(4)對整個演示進行佈局
(5)多語言選擇支持
(6)多帶寬選擇支持

 

如果你使用過HTML,就會習慣於SMIL語法,至少一開始是這樣。如果你未使用過HTML,但從本教程瞭解XML,你也會發
現該詞彙是較容易的一種。
SMIL能用於控制從源流進的媒體,如RealAudio和RealVideo以及各種其他媒體格式,包括圖像,文本,聲音和視頻

SMIL語法
     最基本的SMIL表示就像創建一個簡單HTML頁一樣簡便,觀察以下代碼看看我們的意圖是什麼
     <smil>
         <body>
             <audio src="rstp://realserver.javertising.com/jt01.rm"/>
             <audio src="rstp://realserver.javertising.com/jt02.rm"/>
             <audio src="rstp://realserver.javertising.com/jt03.rm"/>
         </body>
     </smil>
     上述代碼只不過列出下載文件時將播出的幾個多媒體文件
     與所有XML文檔一樣,有一個根元素,在本例中,根元素是smil。SMIL文檔必須遵守所有其他XML規則,其中一些在SMIL
規範中定義,與XML1.0規範一致。所有元素名均小寫,自然屬性值必須有引號中,對"(引號),&,(省略號),<(左尖括號)和>(右
尖括號)必須使用字符引用。  
     根據SMIL規範,SMIL文檔的body元素是必不可少的。如果願意,可以包含一個head元素,但不做要求:
     <smil>
         <head><!--this is an optional element--></head>
         <body><!--this is a required element--></body>
     </smil>
     創建你的第一個SMIL作品以後,可以用smi或smil擴展名保存該文件。
    
     順序標註(seq)用於標記你希望順序播出的元素,而並行標註用於標記你希望併發播出的元素。考慮以下簡單標記:
     <seq>
        <audio src="mySong.rm"/>
        <audio src="yourSong.rm/>
     </seq>
     上述代碼將強迫媒體播放機播放列出的第一首歌,在第一首歌播完之後播放下一首歌。
     你可能不打算並行地播放音樂,但你可能想在播放音樂時顯示描述該音樂作品的文本: 
     <par>
        <audio src="mySong.rm"/>
        <textstream src="songDesc.rt"/>
     </par>
     注意rt和rm擴展。這些是RealMedia格式.
     SMIL的一個有趣方面是,媒體內容的類型不是得自元素名,而是來自服務器,操作系統或元素的type屬性,後者定義
MIME類型
     如果你希望在文檔中引用SMIL DTD代碼應是這樣的:
     <!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 1.0//EN"
                    "http://www.w3.org/TR/REC-smil/SMIL10.dtd">
     不過,注意SMIL不允許你利用實體說明擴展DTD。
    
     以下幾節介紹SMIL元素,它們的屬性,它們可能的內容及它們的父代元素。本教程末尾,你將找到一個完事的SMIL文檔.



a
  
   a元素是一個鏈接,它對同步化不起任何作用,只是鏈接其他資源的一種手段而已。該元素就像HTML a元素一樣,主要是因爲
屬性表包含show屬性,它描述a元素所指向資源的不同替換模式。另一個區別是不使用它鏈接文本(因爲文本是一種媒體源)。確
實,你把媒體源隱藏在標註中,如例子所示。
   屬性 
      id 惟一地確定文檔內的元素。其值是XML標識符和ID屬性類型
      href 一個包含鏈接目的地URI的必不可少的屬性
      show 控制鏈接在三種可能模式之間的鏈接活動:replace(意思是當前表示由被鏈接對象替代),new(意思是被鏈接對象作爲新
           對象開始)和pause(意思是包含鏈接的表示暫停,被鏈接對象在一個新環境下開始被鏈接的表示完成播放後,被暫停的表示
           重新開始)
內容
      animation,audio,img,par,ref,seq,switch,text,textstream和video元素

   父代元素
      body,par,seq和switch元素
     
例:
    在本例中,鏈接作爲推進到文檔另一部分的一種手段。關於鏈接如何在一個完整文檔中動作的例子,見程序清單,在該程序清單中
a元素將幻燈片放映從一幡幻燈片推進到另一幅。它是這樣實現的:藉助指向文件(pictures.smi,在本例中,恰好是包含鏈接的同一文件)的
鏈接,然後利用一個標識符(#)引用該文件內的一個特定元素,在本例中,是id屬性值爲slide1的一個par元素
    <a href="pictures.smil#slide1" show="replace">
         <img id="NavRintro" region="RButtonRegion" src="rArrow.jpg" repeat="1" fill="remove"/>
    </a>



anchor 
    此元素使你鏈接一個元素的各部分,類似於HTML中使用圖像變址圖的方式。該元素的關鍵是coords屬性,它定義鏈接所指部分的座標集。

   屬性
       begin 指定元素開始狀態的時間,藉助兩個可能值:delay-value(該值度量表示時間)和event-value(這是一個事件觸發器)
       coords 指定一個對象顯示區內的矩形座標集
       end 指出元素的明確結束(使用與開始元素相同的值)
       id 惟一確定文檔內的元素.它的值是一個XML標識符和一個ID屬性類型
       show 控制鏈接在三種可能模式之間的鏈接活動:replace(意思是當前表示由被鏈接對象替代),new(意思是被鏈接對象作爲新
           對象開始)和pause(意思是包含鏈接的表示暫停,被鏈接對象在一個新環境下開始被鏈接的表示完成播放後,被暫停的表示
           重新開始)
       skip-content 用於管理未來SMIL版本元素,藉助兩個值:true或false.如果是true,則忽略該元素.
       title 一個屬性,用於以某種意義的方式命名一個元素,該元素可能被播放器以某種方式顯示
    內容
       這是一個空元素
    父代元素
       animation,audio,img,ref,text,textstream和video元素週期律 
例:
    本例創建一個視頻內的圖像映射圖。活動鏈接區由coords屬性指定的座標定義 
    <video src="myVideo.rm" region="RegionId">
         <anchor href="http://www.javertising.com" show="pause" coords="10,30,70,100" begin="5s" end="30s"/>
    </video>



animation 
   
    這是一個定義動畫的連續媒體元素,與其他媒體元素一樣,媒體播放器不是通過元素名是藉助元素的屬性(如type屬性,它
給媒體播放器提供元素的MIME類型)提供的信息來檢索關於元素及如何播放它的信息。
屬性
     abstract 顧名思義,該屬性提供元素內容的簡要描述
     alt 指出媒體播放器存取內容不支持該元素時的替代文本
     author 表示內容的作者名
     begin 見anchor元素屬性表
     clip-begin 指出子剪貼畫的開始,利用下述值的一個,這些值均由這種語法定義:
         clip-beign="npt=0.1h",度量單位及其相關值是: 
           smpte="YourTime"或smpte-30-drop="YourTime"或smpte-25="YourTime",其中YourTime等於由時,分和秒錶示的時間
          如:clip-begin="smpte=10:12:33:20".SMPTE是電影電視工程師協會開發的一種時間標準
           npt(正常播放時間),以常規SMIL時鐘值表達的時間
     clip-end 指出子剪貼畫的結束,利用與clip-begin相同的值。如果其值超出媒體對象的持續時間,則忽略該值
     copyright 包含元素內容的版權聲明
     dur 指出一個元素的持續時間
     end 見anchor元素屬性表
     fill 控制子元素的持續時間,藉助兩個值:remove和freeze.其細節取決於在那裏使用什麼元素
     id 惟一確定文檔內的元素。它的值是個XML標識符和一個ID屬性類型
     longdesc 包含指向一個媒體對象的冗長的描述的URI
     src 指定媒體對象的URI
     system-bitrate 規定近似帶寬,以每秒位爲單位(例如,如果預期用戶機器上使用56K MODEM,則屬性值對應是:system-birate="56000")
     system-cpations 就像on或off屬性值指示的那樣控制字幕選項
     system-language 逗號分界的語言列表,由RFC1766或代碼定義(例如,system-language="ja"表示系統語言是日語)
     system-overdub-or-caption 藉助兩個值overdub或caption中的一個確定使用配音還是字幕.
     system-required 指出擴展名
     system-screen-size 利用如下所示屬性值對指出屏幕大小:system-screen-size="1024X768"
     system-scrren-depth 提供顯示元素時需要的屏幕調色板深度的信息,以位爲單位,一般使用下述值之一:1,8,16,24或32,指派32深度
     title 提供爲元素賦予有意義名字的一條行徑
     type src屬性引用的媒體對象的MIME類型



內容
      anchor元素
父代元素
      a,body,par,seq和switch元素(最後一個元素對控制屏幕深度和大小特別重要)
      <smil>
          <body>
             <par>
                 <animation src="rstp://realserver.javertising.com:554/media.swf"/>
              </par>
           </body> 
      </smil>

2、 時間控制
(1)dur屬性
請大家看看下面這段代碼的效果。
< smil>
< head>
< /head>
< body>
< seq>
< img src="image1.jpg" dur="5s"/>
< img src="image2.jpg" dur="10s"/ >
< /seq>
< /body>
< /smil>
相信大家已經看出門道了!對了,我們這裏對image1.jpg和image2.jpg的持續時間做了規定。其中image1.jpg持續時間5秒,image2.jpg持續時間10秒。
(2)begin和end屬性
上面規定的是播放多長時間,我們也想規定在什麼時候開始播放。請看下面的程序。
< smil>
< head>
< /head>
< body>
< img src="image1.jpg" begin="2" dur="5s"/>
< /body>
< /smil>
上面的這段程序規定就是圖片image1.jpg在整個演示進行2秒後,開始顯示,持續的時間是5秒。對於圖片的控制是這樣,而我們常常需要對視頻/音頻的時間進行控制。下面這個例子來說明這個問題。
< smil>
< head>
< /head>
< body>
< video src="test.rm" begin="5s" end="40s"/>
< /body>
< /smil>
test.rm這個視頻文件(如果大家手頭上沒有*.rm格式文件,就用Realone player的firstrun.rm或者找個*.avi的也可以。但是文件名要寫對!)在整個演示開始5秒後開始播放,在整個演示播放40秒以後,就結束播放。實際的播放時間是:40-5=35秒。但是,一般情形下,我們的視頻總在一個組中,這時候,他就的服從組的時間了。我們那下面的這個例子來解釋這問題。
< smil> 
< body>
< seq dur="5">
< img src="image1.jpg" begin="2" dur="10"/>
< /seq>
< /body>
< /smil>
image1.jpg所在的組的持續時間爲5秒,而image1.jpg自己要求持續10秒,這是不行的。實際上image1.jpg的顯示時間只有5-2=3秒!大家在以後寫程序的時候要注意這個問題。
(3)clip-begin和clip-end屬性
考慮這樣一種效果:
我們只要test.rm播放這個視頻/音頻的5~10秒這個時間斷,怎麼辦???J有了clip-begin和clip-end,問題就很簡單了!
請看:
< smil> 
< body>
< video src="test.rm" clip-begin="5s" clip-end="10s"/>
< /body>
< /smil>
clip-begin和clip-end屬性是用內部時間控制的屬性。這裏的內部指的就是多媒體片斷自己的時間線(timeline)。前者規定在什麼地方開始播放,後者規定放到什麼地方結束播放。爲了更清楚的理解這些時間控制,我們看下面的這個例子:
< smil> 
< body>
< par>
< audio src="testone.rm" clip-begin="5" dur="10s"/>
< audio src="testtwo.rm" begin="7s" clip-begin="2s"clip-end="15s"/>
< /par>
< /body>
< /smil>
看看下面這個示意圖:
顯然,首先是testone.rm從自己的5秒處開始播放,播放7秒以後,testtwo.rm從自己的2秒處開始與testone.rm一起播放,testone.rm播放到自己得15秒處停止播放,testone.rm播放了15-5=10秒。testtwo.rm播放到自己得15秒處停止播放,testone.rm播放了15-2=13秒。圖中灰色(黃色)部分表示播放的部分。
接下來我們對時間的表示方法做個說明(默認的時間是秒,所以"2s" 、"2.0s"和"2"都是一樣的 ):
時間標記 指代 例子 說明 
h 小時 1.5h 1小時30分鐘 
min 分鐘 4.75min 4分45秒 
s 秒 10.45 10秒450毫秒 
正確的時間寫法是: hh:mm:ss.xy。hh表示小時;mm表示分鐘;ss表示秒;x表示1/10秒;y表示1/100秒。例如:begin="01:40.0"表示的是1分40秒處開始,而begin="01:40"表示的是1小時40分處開始。真的注意呀J。
時間控制非常重要,它直接影響我們演示的效果。而我們上面講的這部分是最重要的,所以大家一定要理解上面的各個時間概念及其含義。
(4)fill屬性
當演示中的某個片斷播放完成以後,我們可以用fill屬性來規定它的顯示狀態。簡單的說就是我們是清屏還是凍結屏幕。看下面這個例子:
< smil> 
< body>
< video src="test.rm" dur="30s" fill="freeze"/>
< /body>
< /smil>
假設test.rm的長度是20秒,那麼我們這裏規定的就是:在test.rm播放終了以後,屏幕上顯示的是test.rm的最後一幀(通俗的說就是最後一幅畫面),顯示的時間是30-20=10秒;如果是圖片的話,那麼顯示就是圖片。
Fill屬性只有remove和freeze兩個,默認的值爲remove。建議大家在演示的最後的一個多媒體片斷上用凍結(freeze),以防止屏幕上空空如也!J
(5)repeat屬性
如果我們希望我們演示中的某個片斷或者全部的片斷重複播放若干次(姑且設爲2次)。那麼我們可以後用repeat屬性來實現該效果。分析下面這個例子:
< smil> 
< body>
< vedio src="test.rm" dur="1min" repeat="2"/>
< /body>
< /smil>
上面這個例子就是讓test.rm播放兩次。如果我們想讓某個片斷一直播放下去(網絡光廣告上可以考慮這個),那麼repeat="indefinite"就可以了。當然,想要它停下來的一種方法是按下播放器stop(停止)鍵(在網頁插件中就是右鍵菜單中的stop);另外的一種辦法(大家都知道的)是關閉計算機!
4、鏈接製作
傳統的流媒體的最大的一個弊端是沒有交互性(Interaction)。現在如日中天的flash本質上就是一種可交互性的流!由此可見可交互性的流的市場潛力。而SMIL是解決大部分流媒體交互性的最好的工具!這部分要求大家必須掌握,如果沒有的話,那麼我們學習SMIL就失去了意義。因爲這裏是SMIL的主要特色(與其他的視頻編輯軟件相比較),就好像指針是C語言的特色一樣。
(1)< a>< /a>標記
運行下面這個程序:
< smil>
< head>
< layout>
< root-layout width="300" height="300"/> 
< region id="videoregion" top="0" left="0" width="300" height="300"/> 
< layout>
< /head>
< body>
< a href="1.rm">
< video src="videotest.rm" region="videoregion"/>
< /a>
< /body>
< /smil>
正常情況下,我們看到播放器播放videotest.rm,如果我們把鼠標放到正在播放的videotest.rm上面,鼠標將有指針形狀變爲小手形狀。單擊鼠標左鍵,播放器播放將停止播放videotest.rm而播放1.rm這個文件。這裏我們就成功的創建了一個很簡單的鏈接。<a></a>屬性就是用於鏈接標記,href表示的是所要鏈接的文件。這種方法非常簡單,我們就不做過多的介紹。
如果我們要創建更加複雜的鏈接,我們就要用到下面的這個屬性。
(2)< anchor>屬性
將上例中的< body>< /body>換成下面這段代碼,看看效果是不是有區別?
< body>
< video src="videotest.rm" region="videoregion">
< anchor href="1.rm"/>
< /video>
< /body>
我們看到的效果是完全一樣的!那麼<anchor>屬性不就多餘了嗎? 那是不會的!JJ請看:
a、 分時斷鏈接
考慮這樣一個問題:我們要在0~10秒鏈到一個文件,10~20秒鏈到另一個文件,該怎麼辦?看我們的:
< body>
< video src="1.avi" region="videoregion">
< anchor href="1.jpg" begin="0s" end="10s" >
< anchor href="videotest.rm" begin="10s" end="20s" />
< /video>
大家將看到的效果:播放器播放1.avi,在0~10秒鏈到1.jpg,在10~20秒鏈到videotest.rm。警告:dur、clip-begin和clip-end這裏不支持!
B、鏈接部分SMIL
我們的鏈接可以鏈接的文件很多,幾乎所用的多媒體片斷都可以。*.smil和*.html也可以。但是,下面我們要討論的是如何鏈接部分SMIL。請看例子。
第一個SMIL文件,取名test11.smil
< smil>
< head>
< layout>
< root-layout width="400" height="300"/> 
< region id="videoregion" top="0" left="0" width="400" height="300" fit="meet"/> 
< /layout>
< /head>
< body>
< video src="1.avi" region="videoregion">
< anchor href="test11app.smil#testlink"/> 
< /video>
< /body>
< /smil>
第一個SMIL文件,取名test11app.smil
< smil>
< head>
< layout>
< root-layout width="400" height="300"/> 
< region id="videoregion" top="0" left="0" width="400" height="300" fit="meet"/> 
< /layout>
< /head>
< body>
< video id="testlink" src="1.avi" clip-begin="150" region="videoregion"/>
< /body>
< /smil>
大家一定看出來了!我就是在test11app.smil中爲我們要鏈接的那部分內容設上id,然後在test11.smil中的鏈接中用“#”來指向該標記id。應用的很多的時候是組內內容。我們把test11app.smil修改爲:
< body>
< par id="testlink">
< video src="1.avi" clip-begin="150" region="videoregion"/>
< /par>
< /body>
到這裏,鏈接可以說已經很完美了。但是,如果要錦上添花,那麼下面這個屬性是必不可少的。
(3)coords屬性
將上面的<anchor href="1.rm"/>代碼修改爲:
< anchor href="1.rm" coords="0, 0,150,300"/>
或者:
< anchor href="1.rm" coords="0%, 0%,50%,100%"/>
運行,看看效果。JJ我們看到左半部分有鏈接效果,而右半部分卻沒有!這是我們採用了座標規定鏈接區的緣故。coords屬性值的第一、二個數分別表示的是鏈接區的左上角點的水平(left)和垂直(top)座標;第三、四個數分別表示的是鏈接區的右下角點的水平(left)和垂直(top)座標。上面用的是像素點的絕對定義方法,下面用的是比例的相對定義方法。喜歡哪一個就看你的喜好了。
(5)鏈接注意
我們的演示最後基本上都要放到服務器上。因此,文件的位置的規定就非常重要,如果文件位置出錯,那麼播放器將找不到文件而不能播放。這是我們最不希望看到的!下面我們就來討論這個問題。
A、創建基地址
看下面的代碼:
< head>
< meta name="base" content="rtsp://abc.5dmedia.com/"/>
< /head>
上面就是在< head>< /head>中用附加信息的方式規定了整個smil文件的基地址爲rtsp://abc.5dmedia.com/。規定了基地址以後,我們在用該地址下的文件的時候,就只需要給出路徑就可以了。例如:
< body>
< video src="video/first.rm"/>
< video src=" video /second.rm"/> 
< audio src="rtsp:// abc.mysite.com:554/audio/test.mp3"/>
< img src="http// www.5dmedia.com/image/welcome.jpg"/>
< /body>
這個例子中的前面的兩個文件用的是基地址服務器上的文件,所以,可以之寫出相對地址。但是,後面的兩個文件用的是其他服務器上的文件,我們必須給出絕對地址。其中rtsp是實時流傳輸協議,它保證SMIL播放器正確地從流服務器abc.mysite.com上的audio文件夾下獲得我的所要的文件test.mp3。554爲流服務器的端口。http是超文本傳輸協議。它保證SMIL播放器正確地從web服務器www.5dmedia.com上的image文件夾下獲得我的所要的文件welcome.jpg。< audio src="rtsp:// abc.mysite.com:554/audio/test.mp3"/>說明的是該文件不在上面的基地址下,而在rtsp:// abc.mysite.com:554/audio/這個地方法,所我們必須修改地址。
如果我們用的是本地機器硬盤上的文件就可以用src="file:/c:\audio\first.rm"進行讀取該文件。
大家在調用文件之前,一定要弄清楚文件的位置!

7、 轉場效果

首先解釋一下什麼是轉場效果。我們的演示中多媒體片斷是很多的,不可避免的會有兩個片斷之間的切換。例如:一個圖片演示完了,該接着演示下一個圖片,兩圖片中間是有一個過渡的。這個過渡我們就稱謂轉場效果。如果我們不設置轉場效果,那麼,過渡的效果肯定不好。LSMIL中的轉場效果大致分爲wipe和fade兩類。
(1) fade類型
從名字就可以看出,這個是淡入淡出的效果。先睹爲快!J 請看例子!
< smil xmlns="http://www.w3.org/2001/SMIL20/Language">
< head>
< transition id="fade1" type="fade" subtype="fadeToColor" dur="4s" /> 
< transition id="fade2" type="fade" subtype="fadeFromColor" dur="4s" /> 
< /head>
< body>
< img src="g04.jpg" dur="10s" transIn="fade2" transOut="fade1"/>
< /body>
</smil>
解釋:a、transition聲明我們要設置轉場效果。id="fade1"設置了該轉場效果的id號。id號必須設置。type="fade"設置了轉場效果的基本類型爲fade。 subtype="fadeToColor"設置了轉場效果的具體類型(子類型)爲fadeToColor(注意這裏又是我們提到的駱駝寫法!)。dur="4s"設置了該場效果完成的時間。
b、transIn="fade2"設置了圖片g04.jpg顯示時採用轉場效果fade2; transOut="fade1"規定圖片g04.jpg完成顯示時採用轉場效果fade1。
c、fade只有三個子類型。上面我們用了2個。還有一個是crossfade,這個也是缺省設置。
(2) wipe類型
wipe爲擦去類型。該類型的效果很多很多。我們這裏所說的wipe只是他們的總稱(注意wipe不能作爲type的屬性值,而是它的子類作爲type的屬性值,子類的子類作爲subtype的屬性值!J誰讓它的屬性值這麼多!!!)。具體的有barWipe、boxWipe、fourBoxWipe等36大類!!!不管它有多少類,先看看怎麼弄。請看例子:
< smil xmlns="http://www.w3.org/2001/SMIL20/Language">
< head> 
< transition id="wipe1" type="slideWipe" subtype="fromTop"/>
< transition id="wipe2" type="waterfallWipe"/> 
< /head>
< body> 
< img src="g03.jpg" transIn="wipe1" transOut="wipe2" dur="5s"/> 
< /body>
< /smil>
解釋:a、JJJ和上面的寫法基本上是一致的!
b、type="waterfallWipe"後面沒有子類型表示使用的是waterfallWipe類型的默認子類型。
(3) 綜合應用
我們上面都只是用在單個多媒體片斷上的轉場效果。下面看看在多個多媒體片斷上怎樣設置轉場效果。還得看例子:J
< smil xmlns="http://www.w3.org/2001/SMIL20/Language">
< head> 
< layout>
< root-layout width="400" height="300"/>
< /layout>
< transition id="fade" type="fade" subtype="fadeToColor" fadeColor="green" dur="4s"/>
< transition id="fade1" type="fade" subtype="fadeFromColor" fadeColor="red" dur="4s"/>
< transition id="fade2" type="fade" subtype="crossfade" dur="2s"/>
< transition id="push" type="snakeWipe" dur="4" />
< /head>
< body> 
< seq>
< img dur="5s" src="g06.jpg" transIn="fade1" fill="transition"/>
< img dur="4s" src="g05.jpg" transIn="fade2" fill="transition"/>
< img dur="4s" src="g06.jpg" transIn="fade2" fill="transition"/>
< img dur="4s" src="g05.jpg" transIn="push" transOut="fade"/>
< /seq>
< /body>
< /smil>
解釋:a、fadeColor="green"設置了談出談入色爲綠色(green)。在這裏表示的就是從當前的多媒體片斷漸變爲綠色。下面的fadeColor="red"則表示從紅色漸變爲當前的多媒體片斷(如果是圖片則變爲圖片,如是視頻則變爲第一幀)。
b、fill="transition"表示的是最後的完成效果有下面的轉場效果來決定。
c、最後一個就不能用fill="transition"了。想想,它就是最後一個了,上哪裏去找下面的轉場效果呢?

SMIL的優點
SMIL語言是一套已經規定好的而且非常簡單的標記。它用來規定多媒體片斷(這裏多媒體的包括的範圍有:聲音文件、視頻文件、動畫、圖片、文字等)在什麼時候、在什麼地方、以什麼樣的方式播放。糊塗了嗎?J 我們下面一起來看看SMIL的優點(與衆不同的地方!):爲了方便起見,我們把我們想要完成的作品稱之爲演示(presentation)。
(1)  避免使用統一的包容文件格式:因爲我們的多媒體文件的格式的時非常多的,例如:像聲音就有*.mp3、*.wav、*.ra等等;視頻的格式更是多的出奇:*.mpg、*.avi、*.mov、*.rm等等;圖片的格式就更加不用說了。J 如果我們想在本地機器上直接播放或者在網絡上用流式播放的方式來播放若干個文件。當然我們希望的是不要總讓我們自己打開文件。而是,在上一個文件播放完成以後,就播放下一個。播放列表是個辦法。但是,如果格式不一樣,並且要求多個片斷同時播放(例如:顯示圖片的同時,有解說的聲音。圖片和聲音是兩個文件),那麼以前唯一可行的辦法就是用對媒體的編輯軟件把這些多媒體文件整合成一個文件。這就必須統一使用某種文件格式。如果你的源文件(多個多媒體片斷)沒有保存副本的話,在你下次要用其中的某個源文件的時候,J 你就後悔去吧!如果我們用SMIL來組織這些多媒體文件,那麼可以在不對源文件進行任何修改的情形下,獲得我們想要的效果(從這裏來看,SMIL好像是穿珍珠項鍊用的金絲線,只是把它們穿起來組成一個整體,而不會破會它們。)。當然SMIL的功能決非就這麼點。接下來就是:
(2)同時播放在不同地方(服務器上)的多媒體片斷:如果上面第一點你還可以用其他的辦法做到,那麼這一條恐怕你就沒轍了。考慮這樣一個實際問題:假如我們現在想把一段電視採訪的實況(視頻文件)加上解說(包括聲音解說(音頻文件)和文字解說)。姑且假定例子中的視頻文件是甲服務器上的A文件,音頻文件是乙服務器上的B文件,而解說文字卻是丙服務器上的C文件。傳統的方法在這裏就束手無策了(窮途末路了J),而SMIL可以非常輕鬆的做到這一點。
(3)時間控制:如果我們不想用整個視頻文件,而只想用其中的某一部分。傳統的方法中唯一可行的就是用剪輯軟件來剪輯。費時費力不說,弄不好就弄巧成拙,把想要的給剪掉了!而SMIL完成這件事真的是易如反掌!看這樣一個例子:設視頻文件A的時間長度是10秒,我們要用的是2~5秒,其他部分我們不想要,只要用SMIL規定:在該視頻文件A的第二秒開始播放,播放到第五秒結束就可以了。
時間控制的另外的部分是動畫和轉場效果。如果上面的時間控制是絲綢,那麼這個就是在它上面的雙面刺繡!後面我們將要詳細討論這個問題。
(4)對整個演示進行佈局:我們把上面提到的那個例子拿來說明這個問題:由於我們有視頻、有文字我們希望什麼樣的佈局呢?一般的情形下在一個區域(屏幕的上部)播放視頻,在另一個區域顯示文字(屏幕的底部)。當然,如果你認爲在視頻上面顯示文字效果更好的話,那也是可以的。用SMIL實現這樣的效果異常容易!:
(5)多語言選擇支持:分析這樣一個實際例子:我們要爲某種產品作宣傳,其宣傳對象是多個國家的人,有英語國家的、有法語國家的、有德語國家的等等。當然最主要是講中文的國家的人(我是中國人!)。如果我們想要所有的人都可以聽懂、看懂我們的介紹,那麼我們就的準備不同語言版本的媒體文件。傳統的方法是讓用戶來選擇,然後從服務器上下載相應的版本。麻煩就不用講了。萬一我們的選擇老外都看不懂(有時候,我到德文、日文、朝鮮文的站點上,就不知道他們講些什麼東西L),這怎麼辦?如果把他們用SMIL來組織起來、規定好,那麼SMIL語言將根據具體的語言設置來播放相應版本的演示。就是方便!
(6)多帶寬選擇支持:由於各個用戶連接到Internet的方式不盡相同,所以其連接的速度差別也較大。爲了讓他們都能夠看到我們的演示,我們可以製作適應不同傳輸速度的演示。在傳統的方法中,往往要用戶自己選擇他的機器連接所對應的傳輸速度,然後播放相應得演示文件。這確實解決了一些問題。實際上,並不是所有的用戶都知道自己的連接速度,就是知道了,還得選擇不也是非常麻煩嗎?L SMIL解決這個問題如同吹灰!播放器檢測出用戶的連接速度後,就同服務器“協商”,要求傳輸並播放相應的演示文件.

發佈了4 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章