(3)时间控制:如果我们不想用整个视频文件,而只想用其中的某一部分。传统的方法中唯一可行的就是用剪辑软件来剪辑。费时费力不说,弄不好就弄巧成拙,把想要的给剪掉了!而SMIL完成这件事真的是易如反掌!看这样一个例子:设视频文件A的时间长度是10秒,我们要用的是2~5秒,其他部分我们不想要,只要用SMIL规定:在该视频文件A的第二秒开始播放,播放到第五秒结束就可以了。时间控制的另外的部分是动画和转场效果。如果上面的时间控制是丝绸,那么这个就是在它上面的双面刺绣!后面我们将要详细讨论这个问题。
(4)对整个演示进行布局:我们把上面提到的那个例子拿来说明这个问题:由于我们有视频、有文字我们希望什么样的布局呢?一般的情形下在一个区域(屏幕的上部)播放视频,在另一个区域显示文字(屏幕的底部)。当然,如果你认为在视频上面显示文字效果更好的话,那也是可以的。用SMIL实现这样的效果异常容易!
(5)多语言选择支持:分析这样一个实际例子:我们要为某种产品作宣传,其宣传对象是多个国家的人,有英语国家的、有法语国家的、有德语国家的等等。当然最主要是讲中文的国家的人(我是中国人!)。如果我们想要所有的人都可以听懂、看懂我们的介绍,那么我们就的准备不同语言版本的媒体文件。传统的方法是让用户来选择,然后从服务器上下载相应的版本。麻烦就不用讲了。万一我们的选择老外都看不懂(有时候,我到德文、日文、朝鲜文的站点上,就不知道他们讲些什么东西L),这怎么办?如果把他们用SMIL来组织起来、规定好,那么SMIL语言将根据具体的语言设置来播放相应版本的演示。就是方便!
(6)多带宽选择支持:由于各个用户连接到Internet的方式不尽相同,所以其连接的速度差别也较大。为了让他们都能够看到我们的演示,我们可以制作适应不同传输速度的演示。在传统的方法中,往往要用户自己选择他的机器连接所对应的传输速度,然后播放相应得演示文件。这确实解决了一些问题。实际上,并不是所有的用户都知道自己的连接速度,就是知道了,还得选择不也是非常麻烦吗?L SMIL解决这个问题如同吹灰!播放器检测出用户的连接速度后,就同服务器“协商”,要求传输并播放相应的演示文件。方便乎?这也就是流技术中常常说的智能流(Surestream)中的一种。
SMIL语言主要的优点大的方面有以上这些。相信大家在实际应用中,会体会到它更多的优点。注意:我们在创建SMIL文件以前,我们要做好以下几件事:
1、下载并安装Realone Player。目前,SMIL的版本是2.0,全面支持SMIL的版本是2.0只有Realone Player!所以我建议大家使用它。大家可以从http://www.realnetworks.com/上下载,国内的很多的网站上也提供下载。下载GOLD版,不要下载BETA版。
2、我们编辑SMIL源文件(程序)用的是windows附件中的记事本,希望检查一下你的记事本是否正常。当然,任何普通的文本编辑器都是可以的(ultra Edit就很不错),但是考虑到大家学习的方便,故使用最容易找到的记事本来编辑。
3、在我们的学习阶段,我希望我们大家不要用专门SMIL编辑器。一方面,现有的这些SMIL编辑器不太好用。另一方面,那样也不利于我们彻底理解SMIL语言。
二、SMIL基本知识
下面我们看一个实际的SMIL的例子(用记事本编写就可以,注意:在英文状态下编辑。也就是不要打开中文输入法。因为SMIL播放器不认识中文的标点符号!):
显然,SMIL和HTML语言的语法格式非常相像!所以,如果大家对HTML熟悉的话,SMIL学习起来就很容易。但是,二者的差别是很大的,所以如果想学的很好,大家一定要认真地学!
从上面这个例子可以看出:
(1)SMIL程序以<smil>开始,以</smil>结束。
SMIL必须以<smil>开始,以</smil>结束,其他的一切标记都在这二者之间。这个和HTML好像是一样的。
(2)整个程序由body和head两个部分组成
其中body是必须要有的。而head部分则看实际情况。如果需要的话,我们就写。若是整个SMIL程序非常简单并且没有必要用head部分,那么,我们可以不写。从个人的经验来看,如果要写出一个效果好的演示,head部分是必不可少的!
(3)属性和标记要求小写
SMIL要求其标记和标记的属性必须小写!
我们在这里不想给出属性和标记的定义。SMIL语言就是由标记组成的。每一行都是标记,而标记基本上都有属性。例如:< img src="image1.jpg" />中,img是标记,而src是属性,image1.jpg是src的属性值。注意:属性值可以大小写都可以。后面我们会碰到有些属性值要求骆驼写法。什么是骆驼写法?像fadeTocolor这样的属性值(看看,中间高,两边低,是不是非常像骆驼的驼峰?)就是骆驼写法。
(4)有些标记必须有一斜杠作为结束标记
在SMIL中,如果标记不是配对标记(例如:< smil>< /smil>、< head>< /head>、< body>< /body>等),那么,必须有一斜杠作为结束标记(例如:< img src="image1.jpg" />)。
(5)属性值必须用双引号括起来
例如:src="image1.jpg"。注意:SMIL文件中出现的文件名必须和服务器上的文件名一致,其路径一定要正确。否则,SMIL播放器找不到该文件。
(6)SMIL文件的拓展名为*.smil或者*.smi
我们必须以*.smil或者*.smi的拓展名来保存SMIL文件。这样SMIL播放器才能认出SMIL文件,以采用正确的解码方式解码、播放。为了防止与其它类型文件的拓展名冲突,强烈建议采用*.smil这个拓展名!注意:文件名必须是以数字、字母开始的,中间可以有下划线,不可以有空格。例如:test_one.smil可以,而test one.smil坚决不行!如果你喜欢的话,可以用我们上面讲的骆驼写法testOne.smil。注意:上面的例子大家可以原版复制,保存为testOne.smil。并且找一个图片放到testOne.smil同一个文件夹下,并将image1.jpg改成你的图片的名字(后面如果没有特殊说明,都得这么做),就可以用Realone player打开该源程序,看看我们的第一个演示的效果了。
(7)附加信息写在< head>< /head>之间
如果我们有些关于源代码的一些说明也就是附加信息,例如版权、作者、标题、基地址等等,我们可以在< head>< /head>中说明。其基本的格式是:< meta name=" " content=" " />,例如:< meta name="author " content="litterone " />< meta name="title " content="I want to learn SMI:L " />。
(8)用<!-- … -->进行注释
这个标记和HTML里面的是一样的。我们可以对我们的源文件进行注释。SMIL播放器遇到这个标记后,将跳过去而不予理睬。例如:我们可以在写源代码以前,将我们想要实现的效果在< !-- … -->中写出来,然后在编写源代码,假如我们忘记了删除该段说明,也不会影响演示的执行。
上面简单介绍了SMIL语言的基本知识,接下来要详详细细地学习SMIL!
三、 SMIL详细解析SMIL语言的内容很多,我们从最常用的开始谈起。(准备好了吗?上路了!)
1、多媒体片断结构组织
(1)< seq>< /seq>标记,我们首先看下面这个例子:
请保存(记得要用*.smil这样的文件格式)并运行该源程序看看效果。我相信如果大家看到的是这样的效果:Realone player先显示image1.jpg,然后显示image2.jpg。这就是我们这里用< seq>< /seq>这对顺序播放标记规定的结果。<seq></seq>规定的是:在<seq></seq>中间的多媒体片断顺序播放。如下图所示:
(2)<par></par>标记
接下来瞧瞧这个例子:
保存->运行->看效果。Realone player同时显示image1.jpg和image2.jpg。这就是我们这里用<par></par>这对并行播放标记所得到的结果。<par></par>规定的是:在< par>< /par>中间的多媒体片断并行播放。如下图所示:
(3)< seq>< /seq>和< par>< /par>标记协同使用分析下面这个例子:
这个例子的效果是这样的:Realone player先显示image1.jpg,接下来同时显示image2.jpg和image3.jpg, 然后显示image4.jpg。为什么会这样?其中原因我想大家一定非常清楚了。我就不罗嗦了。
有了< seq>< /seq>和< par>< /par>这样两对标记后,我们对多媒体片断播放的先后顺序的控制就变得非常方便了。但是,我们上面的这些演示虽说是演示了。但是,它们的显示时间好像没有受到我们的控制。接下来着手解决这个问题。
2、时间控制
(1)dur属性,请大家看看下面这段代码的效果。
clip-begin和clip-end属性是用内部时间控制的属性。这里的内部指的就是多媒体片断自己的时间线(timeline)。前者规定在什么地方开始播放,后者规定放到什么地方结束播放。为了更清楚的理解这些时间控制,我们看下面的这个例子:
时间标记 |
指代 |
例子 |
说明 |
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分处开始。真的注意呀。
时间控制非常重要,它直接影响我们演示的效果。而我们上面讲的这部分是最重要的,所以大家一定要理解上面的各个时间概念及其含义。
(4)fill属性:当演示中的某个片断播放完成以后,我们可以用fill属性来规定它的显示状态。简单的说就是我们是清屏还是冻结屏幕。看下面这个例子:
假设test.rm的长度是20秒,那么我们这里规定的就是:在test.rm播放终了以后,屏幕上显示的是test.rm的最后一帧(通俗的说就是最后一幅画面),显示的时间是30-20=10秒;如果是图片的话,那么显示就是图片。
Fill属性只有remove和freeze两个,默认的值为remove。建议大家在演示的最后的一个多媒体片断上用冻结(freeze),以防止屏幕上空空如也!
(5)repeat属性:如果我们希望我们演示中的某个片断或者全部的片断重复播放若干次(姑且设为2次)。那么我们可以后用repeat属性来实现该效果。分析下面这个例子:
上面这个例子就是让test.rm播放两次。如果我们想让某个片断一直播放下去(网络光广告上可以考虑这个),那么repeat="indefinite"就可以了。当然,想要它停下来的一种方法是按下播放器stop(停止)键(在网页插件中就是右键菜单中的stop);另外的一种办法(大家都知道的)是关闭计算机!
3、布局设计
我们这里所说的布局就是在我们的屏幕上定出各个多媒体片断显示的位置(单纯的声音文件是不需要布局的!为什么?因为我们的耳朵听不出声音在屏幕上的什么地方;而我们的眼睛可以看到图片、动画和文字在什么地方!),准确地说是在播放器中。从前面我们并行播放的例子可以看出来,如果我们不对布局进行设计,那么显示的效果一塌糊涂!这里是SMIL的重点和精华部分之一,打起精神,Let’s go!
(1)定义基本显示窗口,看下面的代码:
说明:
a、布局标记必须以<layout>开头,以</layout>结束,其他具体的标记都在这中间。<layout></layout>必须放在<head></head>之间。
b、root-layout标记表明的是规定最基本的、最底层的窗口。其他一切窗口都在它的基础上划分出来。
c、 width="300" 表明窗口宽为300个像素点;height="200"表明窗口高为200个像素点;background-color="black"表明窗口的背景颜色为黑色。这里也可以用颜色代码。例如:background-color="#000000"。个人更喜欢代码,因为颜色代码表达颜色众多,但是代码不直观。