IPTV节目的多媒体同步描述

发布时间: 2022-06-10 15:01:53
       通过本章前面相关内容的介绍,读者了解了音频、视频、图片、文本以及动画等不同媒体信息如何流式传输、如何控制媒体流的进程,以及不同媒体如何通过注册数据类型而在终端上进行呈现。然而,IPTV系统是一个集成了上述各种媒体类型,并将其有机结合在一起表现同一主题的多媒体应用系统。上述各种媒体信息都不能独立完成IPTV节目内容的表达,如何将它们在空间上、时间上有机地同步地组织在一起丰富多彩地表现节目内容,是各种IPTV应用系统需要面对的重要问题之一。在各种解决方案中使用的方法尽管不尽相同,但都具有某些共同的特点。其中,SMIL是IPTV系统中各类节目内容呈现描述方式中最为典型的一个,了解它的工作原理后,理解不同IPTV系统使用的其他描述方式就较为容易了。

1.SMIL简介

同步多媒体集成语言
       SMIL即同步多媒体集成语言(Synchronized Multimedia Integration Language),是为了在网络上应用多媒体技术,在W3C(World Wide Web Consortium)的赞助下于1998年开发的一种语言。开发SMIL是因为需要一种支持多种共存数据类型,提供交互功能,可以安排控制布局并且能够与时间相关的多媒体设计语言。
       SMIL是一种简单的基于XML的标记语言,可以让多媒体设计者在一个节目呈现中组合很多不同的数据类型,用来规定节目片断在什么时候、在什么位置、以什么样的方式播放。该语言本身简单直接,由尖括号中的标签组成。该标签集合可以让设计者定义控制布局,定义所有必需的时间信息。
       SMIL的显示主要分成两个部分。第一个部分是开始部分(HeaderSection),设计者可以在此定义显示的全局特性,比如节目显示的宽度、高度、显示中不同部分的屏幕区域面积。元数据也可以在开始部分指定。第二部分是主体部分(BodySection),在此指定所有的时间信息。各类文件可以按顺序播放,或是并行播放,也就是同时播放。设计者也可以为每一个文件序列指定精确的开始时刻和结束时刻。主体部分还可以包含一些标签,根据浏览者带宽、语言支持或是播放器版本指定播放的媒体流文件。
        下面是一个简单的SMIL文件,在播放一个音频文件后播放视频文件。
<head>
<root-layoutwidth="640"height="480”/>
</head>
<body>
<seq>
<audiosrc="rtsp://my.server,com/audio.rnT/>
<videosrc="rtsp://your,server,com/video.rm"/>
</seq>
</body>
</smi]>
       所有SMIL文件必须用标签Vsmil>开始,用标签V/smil>结束。在打开Vsmil>标签后,节目显示的布局定义在开始部分。开始部分在标签〈head>和V/head>之间,只包含一行代码,用于定义显示的尺寸大小。在该例中,显示的尺寸规定是640X480。
       紧接着开始部分的是主体部分,定义在标签Vbody>和</body>之间。在主体中,标签<seq>和V/seq>中包含两个媒体流,指定它们按次序播放。在实现时,先是播放站点my.server,com上的audio,rm,接着是your,server,com上的vedio.rm。
下面是一段实际的SMIL代码:

        SMIL和HTML语言的语法格式非常相像,从上面这段代码可见如下特点:
  (1) 属性和标记要求小写
       SMIL要求其标记和标记的属性必须小写。SMIL语言是由标记组成的。每一行都是标记,而标记基本上都有属性。例如:<imgsrc=http://www.qqread.com/cpp/”imagel.jpg7>中,img是标记,而src是属性,imagel.jpg是src的属性值。属性值大小写都可以。
  (2) 有些标记必须有一斜杠作为结束标记
       在SMIL中大部分为配对标记(例如:<smil></smil>、<head></head>、
< bodyX/body>等),如果不是,那么必须有一斜杠作为结束标记(例如:<img src="imagel.jpg'/>)。
  (3) 属性值必须用双引号括起来
       例如:src="http://www.qqread.com/cpp/imagel.jpg‘。’注意:SMIL文件中出现的文件名必须和服务器上的文件名一致,其路径一定要正确。否则,SMIL播放器找不到该文件。
   (4) SMIL文件的扩展名为*.smil或者*.smi
       必须以*.smil或者*.smi的扩展名来保存SMIL文件。这样SMIL播放器才能认出SMIL文件,以采用正确的解码方式解码、播放。
  (5) 附加信息写在<head></head>之间
        如果有些关于源代码的一些说明也就是附加信息,如版权、作者、标题、基地址等,可以在<head></head>中说明。其基本的格式是:<meta name=""content=""/>,如:
< meta name=”author"content=”litterone"/><meta name="title"content="l want to learn SMIL"/>。
   (6) 用<! --…-->进行注释
        该标记和HTML是相同的,可以对源文件进行注释。可以解析SMIL的播放器遇到该标记后将跳过去。可以在写源代码以前,将想要实现的效果在V! >中写出来,然
后在编写源代码,该段说明不会影响节目的呈现。

2.SMIL详细解析

(1)节目中多媒体片断的结构组织

① <seq></seq>标记
首先分析下面这段代码的执行结果:
< smilZ>
<head>
< /headZ>
< body>
< seq>
<imgsrc="http://www.qqread.com/cpp/imagel.jpg"/>
< igsrc="image?.jpg"/>
< /seq>
< /body>
< /smil>
媒体播放器先显示imagel.jpg,然后显示image2.jpg。
<seq></seq>规定的是:在<seq></seq>中间的多媒体片断顺序播放。
② <par></par>标记
再看下面这段代码的执行结果:
< smil>
< head>
< /head>
< body>
< par>
< imgsrc="http://www.qqread.com/cpp/imagel.jpg"/>
<imgsrc="http://www.qqread.com/cpp/image2.jpg"/>
< /par>
< /body>
V /smil.>
        媒体播放器同时显示imagel.jpg和image2.jpg。<par></par>规定的是:在Vpar></par>中间的多媒体片断并行播放。

(2)时间控制

① dur属性
观察下面这段代码的效果:
< smil^>
< head>
< /head>
< body>
< seq>
< imgsrc="http://www.qqread.com/cpp/imagel.jpg"dur="5s"/>
< imgsrc="http://www.qqread.com/cpp/image2.jpg"dur="10s"/>
< /seq>
< /body>
< /smil>
      这里对imagel.jpg和image2.jpg的持续时间做了规定。其中imagel.jpg持续时间为5sjmage2.jpg持续时间为10s。
② begin和end属性
上面规定的是播放多长时间,如果想规定在什么时候开始播放,请看下面的程序:
< smiJ.>
< head>
< /head>
< body>
< imgsrc="http://www.qqread.com/cpp/imagel.jpg"begin="2s"dur="5s"/>
< /body>
< /smi1>
       上面的这段程序规定图片imagel.jpg在整个演示进行2s后开始显示,持续时间是5so系统常常还需要对视频/音频的时间进行控制。下面这个例子可说明这个问题:
< smil>
< head>
< /head>
< body>
< videosrc="test,rm"begin="5s"end="40s"/>
< /body>
< /smil>
       test,rm这个视频文件在整个演示开始5s后开始播放,在整个演示播放40s以后结束播放。实际的播放时间是:40-5=35so但是,一般情形下视频总处于一个序列中,此时它就要服从序列的时间了。下面的这个例子解释了这一问题。
< smil>
< body>
< seqdur=
< imgsrc="http://www.qqread.com/cpp/imagel.jpg"begin="2s"dur="10s"/>
< /seq>
< /body>
< /smil>
imagel.jpg所在序列的持续时间为5s,而imagel.jpg要求持续10s,这是不能执行的。实际上imagel.jpg的显示时间将只有5—2=3s。
③ clip-begin和clip-end属性
在节目中如果只要播放某个视频/音频的一个时间片断,就要用到clip-begin和clip¬end属性。
<smil>
< body>
< videosrc="test,rm"clip-begin="5s"clip-end="10s"/>
< /body>
< /smil>
       clip-begin和clip迫nd属性是用内部时间控制的属性。这里的内部指的就是多媒体片断自己的时间线。前者规定在什么地方开始播放,后者规定放到什么地方结束播放。为了更清楚地理解这些时间控制,观察下面这段代码:
< smil>
< body>
<par>
< audiosrc="testone.rm"clip-begin="5s"dur="10s"/>
< audiosrc="testtwo.rm"begin="7s"clip-begin="2s'clip-end="15s"/>
< /par>
< /body>
< /smil>
       显然,首先是testone.rm从5s处开始播放,播放7s以后,testtwo.rm从自己的2s处开始与testone.rm一起播放,testone.rm播放到自己的15s处停止播放,testone.rm播放了15—5=10s0testtwo.rm播放到自己的15s处停止播放,testtwo.rm播放了15—2=13s。
接下来对时间的表示方法作说明:
 
        正确的时间写法是:hh:mm:ss.xyohh表示小时;mm表示分钟;ss表示秒;x表示1/10s;y表示1/100s。例如:begin="01:40.0"表示的是1分40秒处开始,而begin="01:40”表示的是1小时40分处开始。时间控制非常重要,它直接影响节目呈现的效果。而上面讲的这部分是最重要的,所以一定要理解上面的各个时间概念及其含义。
④ fill属性
当节目呈现中的某个片断播放完成以后,可以用fill属性来规定它的显示状态,简单地说就是清屏还是冻结屏幕。
<smil>
< body>
< videosrc-"test,rm"dur="30s"fill-"freeze"/>
< /body>
< /smil>
        假设test,rm的长度是20s,那么这里规定的就是:在test,rm播放终了以后,屏幕上显示的是test,rm的最后一帧(即最后一幅画面),显示的时间是30—20=10s;如果是图片,那么显示就是图片。
fill属性只有remove和freeze两个,默认的值为remove.
⑤ repeat属性
       如果希望节目呈现中的某个片断或者全部的片断重复播放若干次,那么可以用repeat属性来实现该效果。
< smil>
< body>
< vediosrc="test,rm"dur="Indn"repeat="2"/>
< /body>
< smil>
         上述代码使test,rm播放两次,如果需要某个片断一直播放下去,如网络广告,可置repeat=indefinite"。

(3) 布局设计

所谓布局就是在终端屏幕上定出各个多媒体片断显示的位置。
① 定义基本显示窗口
观察下面的代码:
< smil>
<  head>
<  layouts
<root-layoutwidth="300"height="200"background-color="black"/>
<  /layout>
<  /head>
<  body>
<  /body>
</smil>
说明:
       • 布局标记必须以< layout>开头,以< /layout>结束,其他具体的标记都在这中间。< layoutX/layout>必须放在<head></head>之间。
       •  root-layout标记表明的是规定最基本的、最底层的窗口,其他一切窗口都在它的基础上划分出来。
       •  width="300”表明窗口宽为300个像素点;height="200”表明窗口髙为200个像素点^ackground-color^'blacV表明窗口的背景颜色为黑色。这里也可以用颜色代码。例如:background-color=w井000000wo
② 定义多媒体片断显示窗口
分析下面这段源程序:
<  smil>
<  head>
<  layouts
<  root-layoutwidth="300"height="300"background-color="yellow"/>
<  regionid=,,vedio_region"left="5"top="5"width="290"height="260"/>
<regionid=,text_region,left="5"top="270"width="290"height="25"back-ground-color="white"/>
<  /layout>
<  /headZ>
< body>
< par>
< vediosrc="test,rm"region="vedioregion"/>
< textsrc="test,txt"region="text_region"/>
</par>
< /body>
< /smil>
说明:
       • <regionid="vedio_region"left="5"top="5"width=n290Hheight="260"/>定义多媒体片断显示窗口,它的ID是vedio_region,这个ID是必要的。相对基本显示窗口而言,离顶端和左端各有5个像素点的距离。窗口宽为290个像素点,高为260个像素点。下面的显示窗口的定义和这个是一样的。
       •  <vediosrc="test.rm"region="vedio_region"/>声明了多媒体片断test,rm在ve-dio_region这个区域播放;<textsrc="test.txt"region="text_region"/>声明了文本文件test,txt在vedio_region这个区域显示。
        上面对多媒体片断显示窗口采用的是绝对定义的方法。多媒体片断显示窗口也可以用相对定义的方法来定义。例如:
       •  <regionid="vedioregion"top="10%”left="10width="80%"height="80%”/>上面的比例是相对基本显示窗口而言的。这样的定义方法更为直观。
③ fit属性
     在实际制作节目时如果显示窗口的大小和多媒体片断的尺寸大小不一致,解决的办法有:
     • 修改窗口的大小;
     • 使用恰当的多媒体片断和窗口的匹配方式。
观察下面这段代码:
< regionid="vedioregion"width="80%”height="80%”fit=~meet~/>
其含义是窗口vedio_region以meet方式显示多媒体片断。
fit属性的属性值有hidden,meetJill,scroll和sliceo其中hidden是默认的属性值。
       •  hidden表示保持多媒体片断的尺寸不变,从窗口的左上角开始显示。如果多媒体片断尺寸比窗口的尺寸小,那么空白的地方将用背景色填充。如果多媒体片断尺寸比窗口的尺寸大,那么多媒体片断超岀窗口部分被裁去,不被显示。
     ・ meet表示在保持多媒体片断宽/高比例不变的情况下,对多媒体片断的尺寸进行缩放。从左上角开始显示,缩放到高度和宽度中的一个尺寸等于窗口的相应的尺寸,而另外的一个小于窗口的相应的尺寸。空白处用背景色填充。
       • fill表示缩放多媒体片断使得其大小正好和窗口的大小一致。如果多媒体片断的宽/高比例和窗口的宽/高比例不等,那么多媒体片断就会变形。
       • scroll表示对多媒体片断的尺寸不做修改,以正常的尺寸大小显示。但是,如果多媒体片断的尺寸超岀了窗口的尺寸,那么将会相应出现水平或者垂直滚动条。
       •  slice表示在保持多媒体片断宽/高比例不变的情况下,对多媒体片断的尺寸进行缩放。从左上角开始显示,缩放到高度和宽度中的一个尺寸等于窗口的相应的尺寸,而另外的一个大于窗口的相应的尺寸。超出的部分被裁去而不显示。
④ z-index属性
某个源程序如下:
<smil>
<head>
< layout>
<root-layoutwidth="300"height="300"/>
< regionid=,,vediol_region"width="300"height="300"/>
< regionid="vedio2_region"left="270"top="270"width="30"height="30”/>
< /layout>
< /head>
< body>
< par>
< vediosrc="testone.rm"region=,,vediol_region7>*
< vediosrc="testtwo.rm"region=,,vedio2_region,/>
< /par>
< /body>
< /smil>
       这里做的是电视的画中画效果。但是在实际显示的时候,小画面有时候被大画面所覆盖。此时z-index属性可以解决这个问题。
修改:<regionid="vediol_region"width="300"height=,,300,,/>
<regionid="vedio2_region"left="270"top="270"width="30"height="30"/>成:<regionid="vediol_region"width="300"height="300"z-index="0"/>
< regionid="vedio2_region"left="27O"top="270"width="30"height="30"z4ndex="l"/>z-index属性规定相互重叠的窗口的显示次序,数字大,那么显示就在上面。但是以下几点要注意:
       •  root层窗口总是在最后一层,并且不用z-index属性;
       •  z-index属性值可以是负数,当然它就得排在0以后;
       • 没有重叠的窗口可以使用同一z-index属性值。

(4)链接制作

传统流媒体最大的弊端是没有交互性,而SMIL是解决流媒体交互性最好的工具之一。
① <a><4>标记
运行下面这个程序:
< smil>
< head>
< layouts
< root-layoutwidth="300"height="300"/>
< regionid="videoregion"top="0"left="0"width="300"height=‘3007>
<layout>
< /head>
< body>
< ahref="1.rm">
< videosrc="videotest,rm"region="videoregion"/>
< /a>
< /body>
< /smil>
       正常情况下看到播放器播放videotest,rm,如果把鼠标指针放到正在播放的videotest,rm上面,鼠标指针将由指针形状变为小手形状。单击鼠标,播放器将停止播放videotest,rm而播放1.rm这个文件。这就成功地创建了一个很简单的链接。<a></a>属性就是链接标记,href表示的是所要链接的文件。
② <anchor>属性
将上例中的<body></body>换成下面这段代码,看到的效果是一样的。
<body>
<videosrc="videotest,rm"region="videoregion">*
<anchorhref="1.rm"/>
</vide。>
</body>
a. 分时段链接
在0〜10s链接到一个文件,10〜20s链接到另一个文件时的实现如下:
< body>
< videosrc="1.avi"region="videoregion">
< anchorhref="http://www.qqread.com/cpp/1.jpg"begin="Os"end="10s">
<anchorhref="videotest,rm"begin="10s"end="20s"/>
< /vide。>
看到的效果是:播放器在0〜10s链接到l.jpg,在10~20s链接到videotest.rmo
b. 链接部分SMIL
节目可以链接的文件种类很多,几乎所用的多媒体片断都可以,*.smil和*.html也可以。下面主要讨论如何链接部分SMIL。
第一个SMIL文件,名为testll.smiL
< smil>
< head>
< layout>
< root-layoutwidth="400"height="300"/>
< regionid="videoregion'top="0"left="0"width="400"height="300"fit="meet"/>
< /layouts
</head>
< body>
< videosrc="1.avi"region="videoregion">
< anchorhref="testllapp.smil#testlink"/>
< /video>
< /body>
< /smil>
第二个SMIL文件,名为testllapp.smilo
< smil>
< head>
< layout>
< root-layoutwidth="400"height="300"/>
<regionid="videoregion"top="0"left="0"width="400"height="300"fit="meet”/>
< /layouts
< /head>
<body>
< videoid="testlink"src="1.avi"clip-begin="150"region="videoregioiT/>
< /body>
       在testllapp.smil中为要链接的那部分内容设上ID,然后在testll.smil中的链接中用“时来指向该标记ID。很多时候应用的是序列内容。如果把testllapp.smil修改为:
< body>
< parid="testlink">
< videosrc="1.avi"clip-begin="150"region="videoregioiT/>
< /par>
< /body>
③ coords属性
把上面的Vanchorhref="l.rm"/>代码修改为:
< anchorhref="1.rm"coords="0,0,150,300”/>
或者:
< anchorhref="1.rm"coords="0%,0%,50%,100%"/>
         将看到左半部分有链接效果,而右半部分却没有。这是采用了坐标规定链接区的缘故。co-ords属性值的第一、二个数分别表示的是链接区的左上角点的水平和垂直坐标;第三、四个数分别表示的是链接区的右下角点的水平和垂直坐标。第一种修改用的是像素点的绝对定义方法,第二种修改用的是比例的相对定义方法。
④ 链接注意
      节目呈现最后都要放到服务器上。因此,文件的位置的规定非常重要,如果文件位置出错,那么播放器将找不到文件而不能播放。
a.创建基地址
< head>
< metaname="base"content="rtsp://abc.5dmedia.com/"/>
< /head>
这就是在<headX/head>中用附加信息的方式规定了整个SMIL文件的基地址为rtsp://abc.5dmedia.com/。规定了基地址以后,在用该地址下的文件的时候,就只需要给出路径。
< body>
< videosrc="video/first.rm"/>
< videosrc="video/second.:rm"/>
< audiosrc="rtsp://abc.mysite.com:554/audio/test.mp3"/>*
< imgsrc="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.jpgo<audiosrc=//rtsp://abc.mysite.com:554/audio/test.mp3V>说明的是该文件不在基地址下,而在rtsp://abc.mysite.com:554/audio/下,必须修改地址。如果用的是本地机器硬盘上的文件就可以用src=wfile:/c:\audio\first.rm"读取该文件。

(5)语言选择和智能流

① 语言选择
提供多国语言支持的方法是利用switch属性:
< smil>
<body>
<switch>
< videosrc="English,rm"system-1anguage="en-us"/>
< videosrc="Chinese,rm"system-1anguage="zh-cn"/>
</switch>
< /body>
< /smil>
       在SMIL播放器播放该SMIL文件时,检测播放器设置的是什么语言,如果是美国英语,那么就从服务器下载English,rm播放;如果是简体中文,那么就从服务器下载Chinese,rm文件播放。下面是经常使用的一些语言代码。
zh-cn        中文(中华人民共和国)
en-us        英语(美国)
fr              法语(标准法语)
de            德语(标准德语)
it              意大利语(标准意大利语)
ja             日语
es            西班牙语(西班牙)
② 智能流(surestream)
用户的联网速度是不尽相同的,有的可能只有50K左右,有的可能有几百K。如果满足了高速用户的要求,那么低速用户可能由于网速太慢而不能收看。如果满足了低速用户的要求,那么高速用户看到的效果就打了不少的折扣,浪费了高速的带宽。为解决这些矛盾,可采用智能流。
< smil>
< body>
< switch>
< vediosrc="highspeed,rm"system-bitrate="250000"/>
< vediosrc="midspeed,rm"system-bitrate="80000"/>
< vediosrc="lowspeed,rm"system-bitrate="20000"/>
</switch>
< /body>
< /smil>
       当用户的联网速度大于250kbit/s时,播放器就从服务器下载highspeed,rm播放;如果用户的联网速度大于80kbit/s小于250kbit/s时,播放器就从服务器下载midspeed,rm播放;如果用户的联网速度大于20kbit/s小于80kbit/s时,播放器就从服务器下载low-speed.rm播放。
上面介绍的是智能流的实现方法。下面是一段较为复杂的代码:
< body>
<switch>
< parsystem-bitrate="225000">
< !一联网速度大于250kbit/s时,播放该组一>
< audiosrc="audio/musicl.rin"/>
< videosrc="video/videol.rm"region="videoregion"/>
<textsrc="Words/narration,txt"region="textregionV>
</par>
<parsystem-bitrate="80000">
< !一联网速度大于80kbit/s而小于250kbit/s时,播放该组一>
< audiosrc=/zaudio/music2.rm"/>
< videosrc="video/video2.rm"region="videoregion"/>
< textstreamsrc="words/narration.rt"region="tsextregion"/>
< /par>
< parsystem-bitrate="20000">
< !-联网速度大于20kbit/s而小于80kbit/s时,播放该组一>
< audiosrc="audio/music3.rm"/>
<videosrc="video/video3.rm"region="videoregion"/>
< textsrc="words/narration.txt"region=textregion7>
< /par>
< /switch>
< /body>
③ 语言与速度的同时检测
< body>
< switch>
< !一简体中文并且速度大于28kbit/s->
< textsrc="Chinese_14000.txt"system-language="zh-cn"system-bitrate="28000"/>
< !一简体中文并且速度大于14kbit/s~>
<Ctextsrc="Chinese_28000.txt"systerarlanguage="zhncn"system-bitrate="14000"/>
< !一美国英文并且速度大于28kbit/s->
< textsrc="english_14000.txt"system-language="en-us"systan-bitrate="28000"/>
< !一美国英文并且速度大于14kbit/s->
< textsrc="english_2800(Ltxt"system-language="ernus"system-bitrate="14000"/>
</switch>
< /body>
④ 演示速度的控制
        上面讲的是在节目呈现文件已经创建好的条件下进行。为制作好多媒体片断,一些建议如下:
      •  用节目制作工具或者其他压缩工具制作流文件时,选择正确的压缩比例。为高速用户准备的文件的压缩比可以小一些,对于低速用户准备的文件的压缩比要大一点。
      •  在网络传输过程中,视频占用的带宽是最多的,音频次之,接下来是动画、图片,文字是最少的。所以,应充分考虑节目呈现的结构。例如:如果并行播放多个视频,这显然是不合适的,可以用图片来替代一部分视频效果。
      •  在传输中不能全部占用用户的带宽,必须留出一部分给用户浏览网页或作为其他用途。表3-1列出了一些建议。
表3-1建议最大流占用带宽
建议最大流占用带宽
 

(6) 动画效果

前面的内容是由SMIL1.。规定的。在SMIL2.0中添加了一些新的内容,包括动画。
①运动动画
运行下面的程序:
< smilxmlns="http://www.w3.org/2000/SMIL20/CR/Language">
< head>
< layout>
< root-layoutwidth="800"height="600"/>
<regionid="Images"left="0"width="800"height="600"/>
< /layout>
</head>
< body>
< imgregion="Images"src="htt:p:〃www.qqread.com/cpp/g03.jpg"dur="6s">
< animateMotionfrom="00"to=“600400"dur="4s"/>
< /img>
< /body>
< /smil>
解释:
•这里用到的是SMIL2.。规范中的规定,所以,在第一行声明所用的规范。
• animateMotion标记声明的是所要的动画类型。
• from="00"to="60040。"属性及其属性值声明的是动画从坐标点(0,0)运动到坐标点(600,400)o也可以写成:VanimateMotionfrom="0,0"to="600,400"dur=
• dur="4s”属性及其属性值声明的是动画在4s内完成。在这个例子中,图片的存在时间是6s,那么动画完成后,将有2s的时间静止不动。如果图片的存在时间小于动画存在时间,那么动画运动到半路上就停止,这样的情况是应该避免的。
②缩放动画
下面看另外的一种动画形式:缩放动画。
< smilxmlns="http://www.w3.org/2000/SMIL20/CR/Language">
< head>
< layout>
< root-layoutwidth="800"height="600"/>
< regionid="Images"left="0"width="800"height="600"fit="meet"/>
< /layouts
< /head>
< body>
< imgregion="Images"dur="10s"src="http;//www.qqread.com/cpp/g03.jpg"width="400"height="320">
< animateattributeName="height"from="320"to="160"fill="freeze"dur="lOs"/>
< /img>
</body>
< /smil>
解释:animateattributeName="height"from="320"to="160"声明了动画的缩放参数。

(7)转场效果

        节目呈现中多媒体片断可以有多个,一定会有两个片断之间的切换。当一幅图片演示完毕开始演示下一幅图片时,两图片中间需要一个过渡,这个过渡就称为转场效果。SMIL
中的转场效果大致分为fade和wipe两类。
① fade类型淡入淡出效果
< smil xmlns="http://www.w3.org/2001/SMIL20/Language">
< head>< transitionid=“fadel"type="fade"subtype="fadelbColor"dur=“4s"/>
< transitionid="fade2"type="fade"subtype="fadeFromColor"dur="4s"/>
< /head>
</body>
<imgsrc="http://www.qqread.com/cpp/g04.jpg"dur="10s"transIn="fade2"transOut=
< /body>
</smil>
解释:
       •  transition声明要设置转场效果。id="fadel”设置了该转场效果的ID号。type-"fade"设置了转场效果的基本类型为fade。subtype-"fadeToColor”设置了转场效果的具体类型(子类型)为fadeToColorodur="4s”设置了该场效果完成的时间。
       • transIn="fade2"设置了图片g04.jpg显示时采用转场效果fade2;transOut="fadel”规定图片g04.jpg完成显示时采用转场效果fadelD
        • fade只有3个子类型,上面用了两个,还有一个是crossfade,这个也是默认设置。
② wipe擦去类型
此处的wipe只是其总称,具体的有barWipe^boxWipe^fourBoxWipe等36大类。
< smilxmlns="http://www.w3.org/2001/SMIL20/Language">>
< head>
< transitionid="wipel"type="slideWipe"subtype="fromTop"/>
< transitionid="wipe2"type="waterfallWipe"/>
</head>
</body>
<imgsrc="http://www.qqread.com/cpp/g03.jpg"transIn="wipel"transOut="wipe2"dur="5s"/>
< /body>
</smil>
解释:type="waterfallWipe"后面没有子类型表示使用的是waterfallWipe类型的默认子类型。
③ 综合应用
上面只是用在单个多媒体片断上的转场效果。下面介绍多个多媒体片断设置转场效果的方法。
< smilxmlns="http://www.w3.org/2001/SMIL20/Languagex,Z>
< head>
< layout>
< root-layoutwidth="400"height="300”/>
< /layout>
< transitionid="fade"type="fade"subtype="fadeToColor"fadeColor="greendur="4s"/>
< transitionid="fadel"type="fade"subtype="fadeFromColor"fadeColor='recT,dur="4s7>
< transitionid="fade2"type="facte"subtype="crossfade"dur="2s"/>
< transitionid="push"type="snakeWipe"dur="4"/>
< /head>
< body>
< seq>
< imgdur="5s"src=^http://www.qqread.com/cpp/g06.jpg"transIn="fadel"fill="transition"/>
< imgdur="4s"src="http://www.qqread.com/cpp/g05.jpg"transIn="fade2"fill="transition"/>
<imgdur="4s"src="http://www.qqread.com/cpp/g06.jpg"transIn="fade2"fill="transition7>
< imgcfur=“4s"src="http://www.qqread.can/cpp/g05.jpg"transIn="pusKtransOut="fade"/>
< /seq>
< /body>
< /smil>
解释:
      • fadeColor=“green"设置了淡入淡出色为绿色。在这里表示的是从当前的多媒体片断渐变为绿色。下面的fadeColor="red”则表示从红色渐变为当前的多媒体片断,如果是图片则变为图片,如是视频则变为第一帧。
      • fill="transition"表示最后的完成效果由下面的转场效果来决定。
      • 最后一个就不能用fill="transition”了。

3.SMIL的不足

       SMIL的内容是很丰富的,上面所提到的是其最基础、比较重要且实用的部分。SMIL目前支持的媒体对象有:animation、video、audio、imRge、text和textstream,它们所支持的格式由选择的播放器来决定。虽然SMIL的优点很多,但也有一定缺点。
       (1) 目前全面支持SMIL2.0的播放器较少,而支持SMIL1.。的播放器较多;
       (2) 各播放器不兼容,在*.smil文件中使用的多媒体格式必须考虑到播放器是否能支持;
       (3) 制作的工具匮乏,目前还没有发现很好的SMIL制作软件;
       (4) 中文支持能力差。
exit

申请演示

IPTV网络电视系统仅适用于企业和公司。

电话:028-83110277
  • 端到端解决方案
  • IPTV/OTT 中间件 (CMS)
  • OTT 播放器应用程序(支持超过 11 个平台)
  • IPTV电视系统媒体服务器
  • 转码器
  • 机顶盒
  • 数字版权管理/CAS
  • 酒店IPTV系统方案
联系我们