正 文

网页内嵌多媒体内容的完美实现


www.7dspace.com  更新日期:2006-1-9 3:08:14  七度空间


完美内嵌 RealPlayer (RealMedia)

客户端要求:

对于 Windows,Linux 和 Mac OS X,可以安装 Realplayer 播放器及其浏览器插件,也可以安装带有 RealPlayer 解码器及其浏览器插件的其他播放器,例如 Windows 上可以安装暴风影音。

实现代码:

<object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width="420" height="310">
<param name="src" value="link.php?link=rtsp://vod.ujn.edu.cn/ÐÂÔúʦÃÃ/1.rm" />
<param name="controls" value="Imagewindow" />
<param name="console" value="clip1" />
<param name="autostart" value="true" />
<embed src="link.php?link=rtsp://vod.ujn.edu.cn/ÐÂÔúʦÃÃ/1.rm" type="audio/x-pn-realaudio-plugin" autostart="true" console="clip1" controls="Imagewindow" width="420" height="310">
</embed>
</object>
<br />
<object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width="420" height="44">
<param name="src" value="link.php?link=rtsp://vod.ujn.edu.cn/ÐÂÔúʦÃÃ/1.rm" />
<param name="controls" value="ControlPanel" />
<param name="console" value="clip1" />
<param name="autostart" value="true" />
<embed src="link.php?link=rtsp://vod.ujn.edu.cn/ÐÂÔúʦÃÃ/1.rm" type="audio/x-pn-realaudio-plugin" autostart="true" console="clip1" controls="ControlPanel" width="420" height="44">
</embed>
</object>
link.php
<?php
echo (get_magic_quotes_gpc() ? stripslashes($_GET['link']) : $_GET['link']);
?>

要点分析:

上面的代码实现了的效果是在任何安装了 realplayer 插件的浏览器上,都可以看到一个播放窗口和一个播放控制栏,并且媒体被自动加载播放。对于 object 一段,这里就不做详细解释了,因为它是针对 Internet Explorer 的,相信大部分写过这种代码的人都能看得懂。我们重点来说一下 embed 一段,它是针对 Firefox 和 Opera 等浏览器的。

大部分人在使用 Firefox 和 Opera 时经常会遇到一个问题,就是安装了 RealPlayer 及其浏览器插件以后,仍然不能观看嵌入到网页中的 rm 或 rmvb 流媒体,提示找不到插件,或者显示空白,或者显示了内嵌的播放器却不能播放,这是什么原因造成的呢?

如果你在 Firefox 和 Opera 的地址栏中键入:about:plugins ,可以看到你所安装的所有插件。不管你的系统里是否安装的是真的 RealPlayer 播放器,只要你看到下面的内容,

Windows

    RealPlayer(tm) G2 LiveConnect-Enabled Plug-In (32-bit)

        文件名: nppl3260.dll
        RealPlayer(tm) LiveConnect-Enabled Plug-In

    MIME 类型  描述  后缀  已启用
    audio/x-pn-realaudio-plugin  RealPlayer(tm) as Plug-in  rpm  是

Linux

    Helix DNA Plugin: RealPlayer G2 Plug-In Compatible

        文件名: nphelix.so
        Helix DNA Plugin: RealPlayer G2 Plug-In Compatible version 0.4.0.552 built
        with gcc 3.2.0 on May 13 2005

    MIME 类型  描述  后缀  已启用
    audio/x-pn-realaudio-plugin  RealPlayer Plugin Metafile  rpm  是

就说明你已经安装好了 RealPlayer 的插件。不能够播放的原因就是他没有像我上面那样写代码。

从上面的插件信息里我们可以看到,RealPlayer 插件只提供了一种 rpm 格式的媒体类型可以播放,而其他诸如 rm,rmvb 等类型却好像没有提供支持。是这样吗?可以说是也可以说不是。

比如你如果在 embed 里指定 type 为 audio/x-pn-realaudio 类型,这个是正确的 mime 类型,但是你会发现你的浏览器将不能播放,而会让你安装插件,即使你已经安装了 RealPlayer 插件。因为 RealPlayer 插件不能识别这种正确的 mime 类型。

于是有的人认为只要指定 type 为 audio/x-pn-realaudio-plugin,然后后面直接指定 rm 或者 rmvb 等 RealPlayer 媒体类型的文件就可以了。是这样吗?也不是。这样做的话,你可以看到内嵌的播放器,但是你会发现播放器始终无法连接到服务器并播放你所指定的媒体。因为你所指定的类型并不是 audio/x-pn-realaudio-plugin 所对应的类型。

于是有人说 RealNetworks 已经将非 IE 的浏览器给放弃了,其实这样说是不对的。虽然存在上面的种种情况,但那是因为那些编写网页代码的人没有理解 RealNetworks 的真正意图, RealNetworks 不但没有放弃在非 IE 浏览器中嵌入 RealMedia,反而是提供了一种通用的方式,让你可以所有浏览器中都能内嵌播放所有的 RealMedia。因为我的代码就能够如我所说的这样工作。

首先我们必须要先知道一件事情,那就是 rpm 是一种什么文件。从上面 Linux 上的插件的信息中我们可以得知,它是 RealPlayer 插件元文件(RealPlayer Plugin Metafile)。因此它不是媒体内容文件,更不是红帽的安装包文件。它里面的内容是实际媒体的位置信息(url)。这样我们就很容易理解 RealNetworks 为什么要这样做了,因为这样只要指定一种 type,就能够播放所有的 Real 媒体了。这不是很方便吗?

在这里需要注意的一点是,embed 的 src 属性里指定的路径不需要是完整的 url,相对路径就可以了,而且也不一定是 rpm 后缀的文件,因此上面的代码中,src 中指定的是一个程序 link.php,而这个程序的结果就是一个 rpm 格式的文件,因此它能够被正确的播放。这个 link 程序很简单,它只是把传入的参数 link 以文件内容的形式返回就行了。

虽然 embed 的 src 属性不需要完整的 url,但是 link.php 的参数 link 是需要实际媒体的完整 url 的,并且参数 link 要以 url 编码形式进行编码,否则 RealPlayer 插件不能够识别带有非英文的路径。但是返回的 rpm 文件内容中的 url 无需编码了,RealPlayer 能够识别 rpm 文件内容中的非英文编码的路径,如果你实在不放心,也可以对它进行 url 编码,但是仍然不要对 “协议://域名/” 部分进行 url 编码,否则 RealPlayer 插件就不能识别了。

PHP 程序中的 $_GET 中的变量,如果 php 配置文件中 magic_quotes_gpc 设为 true 的话(默认配置),它会对某些特殊字符加上反斜杠,这样做是为了避免数据库注入漏洞,但这里我们不写数据库,因此这里我们需要根据 magic_quotes_gpc 的状态来判断是否去掉多出来的反斜杠。否则输出的文件内容可能是错误的。

如果用 ASP,则不需这么麻烦,只需要一行代码就搞定了:

<%=Request("link")%>

6页,页码:[1] [2] [3] [4] [5] [6] 

上一篇:互联网的翻译方式 在线翻译点评
下一篇:推荐一款 Linux 上比较漂亮的字体
作者:andot  来源:CoolCode.CN ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐