Chapter9流媒体嵌入技术9.1网页浏览器和服务器是如何工作的9.1网页浏览器和服务器是如何工作的你的浏览器是从你最喜欢的网站请求显示主页。服务器返回HTML源代码,可能包含有来自完全不同的服务器上的图片、文本、动画和其他组成网页的元素。你的浏览器分析这些文件,并根据得到的HTML源代码完成这些文件的请求。服务器得到请求并发送所要求的文件和合适的MIME类型。使用MIME的类型信息,你的浏览器放弃文件或是断开这些文件,你的主页就被显示出来。9.1.1端口和协议网络上的每一个数据包都携带着很多重要信息,包括发出请求的计算机的IP地址,被请求的服务器的目标IP地址和端口号。许多端口号应用于特定的服务。防火墙根据端口号决定是否将数据包进入企业网。不同的程序使用不同的协议建立相互连接。一个协议就是一个规则集,它决定了两个应用程序之间的数据如何来回传输。应用程序可以在使用网络的时候,同时使用不同的端口和协议。流媒体服务器使用RTSP或MMS与其他播放器通信。注:HTTP不是特别适合流媒体,因为其内部有大量的数据构件,且缺少控制渠道。9.1.2MIME确定文件的内容层次和结构。一个MIME类型是一个文本的简单字符串,它包含在文件头中。你的浏览器比较这个字符串和一个已经知道的(注册的)MIME列表中的每一项来决定这个文件中包含的是什么类型的数据。然后便可以播放并显示这些不同数据类型。根据数据类型的内容,浏览器可以决定它能不能使用本地应用程序打开这种文件,或是需要其他的帮助性质的程序或是插件。9.1.2MIME——注册MIME类型媒体播放器必须和机器上安装的所有浏览器一起注册。问题一:有些数据类型可以被很多不同的应用程序打开。问题二:流媒体播放器只能和计算机中已经安装了的浏览器一起注册MIME类型。网页浏览器必须拥有所有合适的注册了的MIME类型。9.1.2MIME——流媒体的MIME类型任务一:网络服务器必须为重定向的文件(或是流媒体文件,如果你正从网络服务器上下载它)配置正确的MIME类型。任务二:播放器必须正确的注册了MIME类型。MINE类型有规范化标准,但如何用到不同的机器和浏览器上没有标准。9.2如何链接到流媒体文件1.文件通过HTTP协议传输,浏览器拥有播放器或是其插件用于解码流文件。2.文件通过HTTP协议传输,浏览器不参与处理,而是由一个单独的播放器播放。3.文件通过其他协议传输,浏览器不参与处理,而是由一个单独的播放器播放。4.文件通过其他协议传输,浏览器拥有播放器或是其插件用于解码流文件。9.2.1使用元文件使用MIME类型并标记了使用流媒体播放器打开的小文件。元文件(Real系统中的文件格式),重定向文件(Windows媒体文件),引用电影(QuickTime)。可以包含其他信息,如元数据、播放列表或是供播放器使用来选择打开文件的条件状态。9.2.1使用元文件——使用元文件,脱离浏览器,将流媒体定位到指定的流媒体播放器9.2.2关于元文件的问题大量的流媒体供应者和成千的流媒体文件,并拥有其他附加的同样数目的元文件,会增加文件系统的负担。拥有不受控制的元文件的拷贝会表现为文件系统的问题。对于静态的元文件,灾难性的打击是动态的生成元文件。解决方法:访问数据库、使用服务端的脚本或是简单的文本格式的脚本语言;重新整理网站上的代码。9.3嵌入式播放器如何工作优点:在独立的媒体播放器中播放流文件简单可行。缺点:流文件无论使用什么媒体播放器都会将视觉和感觉混淆。嵌入式流媒体播放器能够选择让媒体播放器的那些元素可见,以及希望它们出现在什么位置上。使用HTML表格或是框架中的图片文件为任何流媒体播放器创建用户界面。9.3嵌入式播放器如何工作浏览器与嵌入式播放器的通信使用下面两种方式之一:使用Netscape插件;使用Microsoft公司提供的ActiveX控件。注:Netscape浏览器不支持ActiveX;InternetExplorer不支持Netscape插件。编写代码,同时支持Netscape插件和ActiveX控件。9.3.1MicrosoftActiveX控件的模板9.3.2Netscape插件的的模板注:Windows媒体播放器7.0和InternetExplorer5.5以及其后的版本不再支持使用Netscape插件。9.3.3使用嵌入式媒体播放器创建跨平台的网页注:一些参数只对特定版本的播放器有用。9.4JavaScript是如何工作的提供(合理的)交互平台,用于控制网页上的各种元素以及和它们交互,包括嵌入式的播放器。控制嵌入式流媒体播放器。为了让网页动起来而应运而生的一项技术,不用每次向服务器发送请求。为浏览器添加智能,和用户动态交互。不是HTML的一部分。是独立的软件,可以嵌入浏览器、可以操纵HTML和其他在浏览器窗口内的软件。跨平台兼容。在不同的浏览器和不同版本的浏览器中,使用的是不同层次的应用标准。9.4.1对象、属性、方法和事件JavaScript把浏览器中的任何事件都看作是对象,包括实际的浏览器本身。每个对象都有一套它自己的属性,可以访问或是设置。跟踪浏览器的事件。使用带有等级的“.”操作符。9.4.2操作和控制语句9.4.3在老版本浏览器中隐藏JavaScript9.5与嵌入式播放器协同工作——遵循原则当使用Netscape插件给一个嵌入式的对象命名时,一定要保证使用参数name,而不是参数id,当使用ActiveX控件是,两种参数都可以,但是通常是使用id标签。9.6WindowsMedia的嵌入9.6.1Windows媒体技术9.6.1.1简单的ASX文件注:可以放置到网页服务器上,保存为任何格式的元文件。当链接被点击时,网页服务器发送一个小的元文件给浏览器,它会根据MIME类型,把任务交给WindowsMediaPlayer。9.6.1.2Windows媒体元文件标签9.6.1.3元文件标签的作用范围起作用的时间段eg.9.6.1.3元文件标签的作用范围——优先级ref/级别的标签中指定的属性具有最高优先权;其次是entry或是event级别的标签中的属性;asx级别的标签中指定的属性具有最低优先权9.6.1.4Windows媒体URL单点广播内容:通过Windows媒体服务器上的发布端点访问。多点广播内容:被站点呼叫,通过Windows媒体服务器上创建并放置在网页服务器上的NSC文件访问。表不同Windows媒体流类型的URL语法9.6.1.5使用多重ref标签翻转媒体文件翻转:流媒体播放器在连接播放器、播放某个特定文件片的时候,会遇到困难。为了处理这种情况,可以给播放器指定其他文件,当播放器遭遇困难会试图连接这个文件。使用多重ref/标签,在entry或是entry标签中指定多个文件片,可以指定延迟的文件。当WindowsMediaPlayer遇到连接困难时,试图连接下一个文件,以此类推直到它成功的连接某个文件或是所有可能都试过并且失败为止。只要建立起一个成功的连接,WindowsMediaPlayer播放流文件直到它结束,然后移动到元文件中的下一个文件入口。在特定入口中剩下的流文件将被忽略。如果希望所有的流文件都要播放,必须把它们中的每一个放到单独的文件入口中。这种方法只用于多余的目的,且不必尝试连接直到播放器打开所有可能的连接。9.6.1.6使用event标签9.6.1.7创建Windows媒体元文件9.6.2嵌入Windows媒体播放器9.6.2.1嵌入式Windows媒体播放器的例子9.6.2.2Netscape插件支持注:如果在Windows媒体播放器之后安装Netscape,那么插件可能不会被正确的安装。可以在网页上添加一个链接到Windows媒体下载中心,以及如何下载插件的指令。使用JavaScript控制Windows媒体Windows媒体播放器6.4和Windows媒体播放器7.0都可以使用Netscape插件或是ActiveX控件,通过JavaScript来控制。如果希望让IE用户使用最新的播放器,希望Netscape能够让最广泛的用户保持兼容,就要嵌入两种独立版本的播放器。9.6.3.1Windows媒体播放器7.0与Windows媒体播放器6.4document.wmtPlayer.Play()document.wmtPlayer.controls.Play()JavaScript方法被分在三个子类别中:controls,settings和network。9.6.3.2跨平台的方法9.6.3.2跨平台的方法9.7RealMedia的嵌入9.7.1RealSystem9.7.1.1使用.ram/.rpm文件RAM文件通常使用单独的RealPlayer应用程序打开。RPM文件通常使用嵌入在网页上的RealPlayer播放器播放。注:RAM和RPM文件内容完全一样,但MIME类型稍有区别。9.7.1.2创建.ram/.rpm文件{protocol}://{server}/{filename}[?{option}][&{option}]...9.7.1.2创建.ram/.rpm文件RAM文件的URL的例子:指定老版本的RealSystem文件,语法如下:9.7.1.3在RealServer中使用ramgenhttp://{RealServer}:{RealServerHTTPport}/ramgen/{filepath/name}[?{option}][&{option}]...9.7.1.3在RealServer中使用ramgen在ahref标签中使用ramgenURL:如果点击这个连接,将会向浏览器返回标记有MIME类型是RAM的元文件,并且包含下面的内容:9.7.1.4使用SMIL链接RealMedia文件RealSystem支持SMIL文件中的扩展SMIL。这种SMIL文件是简单的文本文件,可以在RealSerer或是网页服务器上使用。在SMIL文件中,使用RTSP或HTTP协议,URL可以是相对的或是绝对的。9.7.2嵌入RealPlayer使用Netscape或是ActiveX控件嵌入RealPlayer。在Active标签中添加Netscape插件的内容,可以创建大多数浏览器都可以正常工作的网页。对于ActiveX控件,必须提供正确的参数classid。RealPlayer没有使用参数codebase,所以ActiveX控件不会自动地被正确安装。为用户提供RealPlayer的下载网页的链接。9.7.2.1嵌入式RealPlayer的例子——eg.19.7.2.1嵌入式RealPlayer的例子——eg.29.7.2.2使用被选择的RealPlayer控制嵌入的RealPlayer可以被分成很多块。对于单独的RealPlayer播放器可以使用的每一个按钮、显示或是控制都可以独立的嵌入到网页中。对每一个所希望嵌入的RealPlayer的元素使用独立的对象和/或嵌入语句。使用同样的console名字或是它们各自的名字(如果它们是独立的),把不同的RealPlayer元素聚集到一起。也可以使用“_master”控制页面中的所有RealPlayer元素。每一个想嵌入的组件必须包含在独立的object和/或embed标签中,使用合适的console值。9.7.3使用JavaScript控制RealPlayer通过JavaScript,在IE和Netscape中都可以控制RealPlayer。使用Netscape插件和使用ActiveX控件嵌入播放器,所使用的JavaScript方法