4、链接制作
传统的流媒体的最大的一个弊端是没有交互性(Interaction)。现在的flash本质上就是一种可交互性的流!而SMIL是解决大部分流媒体交互性的最好的工具!这部分要求大家必须掌握,如果没有的话,那么我们学习SMIL就失去了意义。因为这里是SMIL的主要特(与其他的视频编辑软件相比较),就好像指针是C语言的特一样。
(1)<a></a>标记
运行下面这个程序:
<smil>
<head>
<layout>
animate下载安装<root-layout width="300" height="300"/>
<region id="videoregion" top="0" left="0" width="300" height="300" fit="meet"/>
</layout>
</head>
<body>
<a href="1.jpg">
<img src="2.jpg" region="videoregion"/>
</a>
</body>
</smil>
正常情况下,我们看到播放器播放2.jpg,如果我们把鼠标放到正在播放的2.jpg上面,鼠标将有指针形状变为小手形状。单击鼠标左键,播放器播放将停止播放2.jpg而播放1.jpg 这个文件。这里我们就成功的创建了一个很简单的链接。<a></a>属性就是用于链接标记,href表示的是所要链接的文件。这种方法非常简单,如果要创建更加复杂的链接,就要用到下面的这个属性。
(2)<anchor>属性
将上例中的<body></body>换成下面这段代码,看看效果是不是有区别?
<body>
<video src="file://D:\雾里看花25.rmvb" region="videoregion">
<anchor href="1.jpg"/>
</video>
</body>
我们看到的效果是完全一样的!那么<anchor>标记不就多余了吗?下面分析<anchor>与<a></a>标记的2个与不同点。
a、分时断链接
考虑这样一个问题:我们要在0~10秒链到一个文件,10~20秒链到另一个文件,该怎么办?看下列程序:
<body>
<video src=" file://D:\雾里看花25.rmvb " region="videoregion">
<anchor href="1.jpg" begin="0s" end="10s" />
<anchor href="2.jpg" begin="10s" end="20s" />
</video>
</body>
大家将看到的效果:播放器播放雾里看花25.rmvb,在0~10秒链到1.jpg,在10~20秒链到2.jpg。
注意: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="雾里看花25.rmvb " region="videoregion" fill="freeze">
<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属性(使用坐标规定超链接区)
<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>
<img src="4.jpg" region="videoregion" fill="freeze" >
<anchor href="test11app.smi" coords="0,0,400,300"/>
</img>
</body>
</smil>
修改后的运行效果,看到左半部分有链接效果,而右半部分却没有。这是采用了坐标规定链接区的缘故。coords属性值的第一、二个数分别表示的是链接区的左上角点的水平(left)和垂直(top)坐标;第三、四个数分别表示的是链接区的右下角点的水平(left)和垂直(top)坐标。上面用的是像素点的绝对定义方法。
(4)链接路径的定义(目录问题)
我们的演示最后基本上都要放到服务器上。因此,文件的位置的规定就非常重要,如果文件位置出错,那么播放器将不到文件而不能播放。这是我们最不希望看到的。下面我们就来讨论这个问题:创建基地址。看下面的代码:
<head>
<meta name="base" content="rtsp://dia/"/>
</head>
上面就是在<head></head>中用附加信息的方式规定了整个smil文件的基地址为rtsp://dia/。规定了基地址以后,我们在用该地址下的文件的时候,就只需要给出路径就可以了。例如:
<body>
<video src=""/>
<video src=" "/>
</body>
这个例子中的前面的两个文件用的是基地址服务器上的文件,所以,可以之写出相对地址。
5、语言选择和智能流
(1)语言选择如果,我们想要扩大我们演示的收看人,那么我们的听众就会有中国人、美国人、法国人、俄罗斯等等。那么怎样才能提供这种多国语言的支持呢?Switch 属性可以方便地解决该问题。例:
<smil>
<switch>
<video src=\"\" system-language=\"en-us\"/>
<video src=\"\" system-language=\"zh-cn\"/>
</switch>
</body>
</smil>
在SMIL播放器播放该SMIL文件时,检测你的播放器设置的是什么语言,如果是美国英语(en-us),那么就从服务器下载播放;如果是简体中文(zh-cn),那么就从服务器下载文件播放。
下面我们给出经常使用的一些语言的代码:
(2)智能流(surestream)
用户的联网速度是不尽相同的。有的可能只有50K左右,有的可能有几百K。如果我们满足了高速用户的要求,那么低速用户可能由于速度太慢而不能收看。如果我们满足了低速用户的要求,那么高速用户看到的效果就打了不少的折扣,浪费了高速的带宽。通过下面的例子,可以看出SMIL是如何解决这个问题的。例:
<smil>
<body>
<switch>
<vedio src="\" system-bitrate="250000"/>
<vedio src="\" system-bitrate="80000"/>
<vedio src="\" system-bitrate="20000"/>
</switch>
</body>
</smil>
当用户的联网速度大于250kbps时,播放器就从服务器下载播放;如果用户的联网速度大于80kbps小于250kbps时,播放器就从服务器下载播放;如果用户的联网速度大于20kbps小于80kbps时,播放器就从服务器下载播放。上面讲的就是智能流(surestream)的本质实现方法。我们下面看一个复杂的一点的例子。
<body>
<switch>
<par system-bitrate="225000"> <!--联网速度大于250kbps时,播放该组-->
<audio src=""/>
<video src="" region="videoregion"/>
<text src="" region="textregion"/>
<par system-bitrate="80000">
<!--联网速度大于80000bps而小于250000bps时,播放该组-->
<audio src=""/>
<video src="" region="videoregion"/>
<textstream src="" region="textregion"/>
</par>
<par system-bitrate="20000">
<!--联网速度大于20kbps而小于80kbps时,播放该组-->
<audio src=""/>
<video src="" region="videoregion"/>
<text src="" region="textregion"/>
</par>
</switch>
</body>
(3)语言与速度的同时检测
<body>
<switch> <!—简体中文并且速度大于28kbps -->
<text src=" " system-language="zh-cn" system-bitrate="28000" />
<!--简体中文并且速度大于14kbps --!>
<text src="" system-language="zh-cn" system-bitrate="14000" />
<!—美国英文并且速度大于28kbps --!>
<text src="" system-language="en-us" system-bitrate="28000" />
<!--美国英文并且速度大于14kbps --!>
<text src="" system-language="en-us" system-bitrate="14000" />
</switch>
</body>
(4)演示速度的控制上面我们讲的是在演示文件已经创建好的条件下进行的。那么,我们怎样制作好多媒体片断。下面是我们的建议:
a、用Realproducer或者其他的压缩工具制作流文件时,选择正确的压缩比例。为高速用户准备的文件的压缩比可以小一些,对于低速用户准备的文件的压缩比要大一点。
b、在网络传输过程中,视频占用的带宽是最多的,音频次之,接下来是动画、图片,文字是最少的。所以,我们充分考虑我们的演示的结构。例如:如果并行播放多个视频,这显然是不合适的。我们可以用图片来替代一部分视频效果。
c、我们在传输中不能全部占用用户的带宽,必须留出一部分给用户浏览网页或者是干其它用途的。
6、动画效果
我们前面学习的内容是SMIL1.0规定的。在SMIL2.0中添加了不少的内容,其中动画就是其中一个。很多的国外的教程上把flas件*.swf归为这一类。我们不能同意这样的分类方法。我们认为把这样已经做好的动画该归为视频一类。真正的动画(从SMIL2.0规

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。