来源:http://www.phpchina.com/54842/viewspace_31724.html

如果你不总是用Windows上的InternetExplorer 来上网的话,你可能会注意到,许多网站上的视频点播之类的多媒体内容,你无法直接在 Internet Explorer 以外的其它浏览器中观看,比如明明已经安装了插件却提示缺少插件,或者什么都不提示出现空的框框,或者显示了播放器插件却始终连不上打不开之类的问题,而在 Internet Explorer 上却能够正确的打开并播放。显然这不是由于网络不通或者媒体不存在造成的,而是由于网页内的代码有问题。你可能觉得这无关紧要,因为你已经习惯用 Internet Explorer 来浏览它们了;也可能你曾为此而头疼,如果你是一个Linux用户。可是不管怎么样,如果能在所有操作系统平台的所有浏览器上都能正常播放这些多媒体内容,总是一件好的事情。本文就是来解决这些问题的。

本文将介绍如何在网页中內嵌 Windows Media、RealPlayer、Quicktime 和 Flash 的完美方法。这些方法适用于 Windows、Linux、Mac OS X 等操作系统平台上的 Internet Explorer、Mozilla、Firefox、NetScape、Opera 等多种浏览器。

  • 完美内嵌 Windows Media
  • 完美内嵌 RealPlayer (RealMedia)
  • 完美内嵌 Quicktime
  • 完美内嵌 Flash
  • 让内嵌多媒体通过 XHTML 验证

完美内嵌 Windows Media

客户端要求:

对于 Windows 用户,需要安裝 Windows Media Player 7 以上的版本,Windows Media Player 6 不支持 WMV/WMA,推荐安装Windows Media Player 10。对于非 Internet Explorer 用户,还需要安装Windows Media Player Plug-in for Netscape Navigator

对于 Mac OS X 用户,需要Windows Media Player 9 for Mac OS X,对于 Mac OS 8.1-9x,需要安装Windows Media Player 7.1 for for Mac OS 8.1-9x

对于 Linux 以及FreeBSD、Solaris 等 Unix 系统用户,需要VLC media player及其浏览器插件或者MPlayer及其浏览器插件。VLC media player 0.80 及其以上的版本支持 WMV/WMA。

实现代码:

<objectwidth="420"height="360"classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95"><paramname="filename"value="http://vod.ujn.edu.cn/movies%2Fasf%2F%B6%AC%CC%EC%C1%B5%B8%E8%2Easf"/><embedwidth="420"height="360"type="application/x-mplayer2"src="http://vod.ujn.edu.cn/movies%2Fasf%2F%B6%AC%CC%EC%C1%B5%B8%E8%2Easf"></embed></object>

也可以用下面这段代码:

<objectwidth="420"height="360"classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6"><paramname="url"value="http://vod.ujn.edu.cn/movies%2Fasf%2F%B6%AC%CC%EC%C1%B5%B8%E8%2Easf"/><embedwidth="420"height="360"type="application/x-mplayer2"src="http://vod.ujn.edu.cn/movies%2Fasf%2F%B6%AC%CC%EC%C1%B5%B8%E8%2Easf"></embed></object>

要点分析:

这两段代码的区别主要是针对 Internet Explorer 的。这两段代码使用了两个不同的 Media Player对象, 第一个是 MediaPlayer.MediaPlayer,第二个是 WMPlayer.OCX。这两个 ActiveX 对象都是针对 Internet Explorer 的,因此它们不影响 Firefox、Opera 等浏览器。这两个对象在 Internet Explorer 上的显示效果是不一样的,第一个对象的显示效果跟在 Windows 上的 Firefox、Opera 内的显示效果是一样的,而第二个对象在 Internet Explorer 上的显示效果是采用 Windows Media Player 本身的皮肤效果,如果你安装了 Windows Media Player 10,采用第二种写法,你在 Internet Explorer 上将会看到 Windows Media Player 10 那种晶莹剔透的皮肤效果。

Firefox 不支持 object 中 classid 属性,只支持 type 属性,而如果发现 object 有 classid 属性以后,它将不理会 object,而只执行 embed。而对于 Opera 则很有趣,它既支持 object,又支持 embed,但是因为 embed 是嵌入到 object 中的,如果它能正确识别 object,它就不再理会 embed,如果它不能识别 object,则执行 embed。因此它不会显示两个播放器。至少我是用的 8.5 版的 Opera 是这样的。而 Internet Explorer 则只识别 object 中的 classid 属性。因此在 object 中,我们不需要指定 type 属性。

对于 embed 标签,我们指定它的 type 为 application/x-mplayer2,在安装了 Windows Media Player 的系统上,它对应于所有 Windows Media Player 能识别的类型,因此你可以任意指定 asf,asx,wmv,wma,avi,mp3 等类型的媒体,而在没有 Windows Media Player,却安装了 VLC media player(或 MPlayer)的系统上,它对应于所有 VLC media player(或 MPlayer)能识别的类型,Windows Media Player 支持的媒体类型 VLC media player(或 MPlayer)均能支持,甚至 VLC media player(或 MPlayer)支持的媒体类型比 Windows Media Player 更多,因此上面这种写法是完全支持多平台多浏览器的。

对于上面两个不同的 ojbect,指定播放文件的参数是不一样,第一个是用 filename 来指定,第二个是用 url 来指定。而 embed 中指定播放文件的参数是 src,虽然用 filename 也可以,但是 src 更标准一些。

embed 中的文件名必须是完整的 url 路径,否则 VLC media player 不能正确识别,另外要对文件路径进行 url 编码,否则如果文件路径中如果有中文或者其他非英文文字的话,在非 Internet Explorer 浏览器中也无法正确识别。不要对 “协议://域名/” 部分进行 url 编码,否则所有的浏览器都不能识别。呵呵。

对文件路径进行 url 编码,在php中可以使用 rawurlencode 函数,在 asp 中可以使用 Server.URLencode 函数。

完美内嵌 RealPlayer (RealMedia)

客户端要求:

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

实现代码:

<objectclassid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"width="420"height="310"><paramname="src"value="link.php?link=rtsp%3A%2F%2Fvod%2Eujn%2Eedu%2Ecn%2F%D0%C2%D4%FA%CA%A6%C3%C3%2F1%2Erm"/><paramname="controls"value="Imagewindow"/><paramname="console"value="clip1"/><paramname="autostart"value="true"/><embedsrc="link.php?link=rtsp%3A%2F%2Fvod%2Eujn%2Eedu%2Ecn%2F%D0%C2%D4%FA%CA%A6%C3%C3%2F1%2Erm"type="audio/x-pn-realaudio-plugin"autostart="true"console="clip1"controls="Imagewindow"width="420"height="310"></embed></object><br/><objectclassid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"width="420"height="44"><paramname="src"value="link.php?link=rtsp%3A%2F%2Fvod%2Eujn%2Eedu%2Ecn%2F%D0%C2%D4%FA%CA%A6%C3%C3%2F1%2Erm"/><paramname="controls"value="ControlPanel"/><paramname="console"value="clip1"/><paramname="autostart"value="true"/><embedsrc="link.php?link=rtsp%3A%2F%2Fvod%2Eujn%2Eedu%2Ecn%2F%D0%C2%D4%FA%CA%A6%C3%C3%2F1%2Erm"type="audio/x-pn-realaudio-plugin"autostart="true"console="clip1"controls="ControlPanel"width="420"height="44"></embed></object>

link.php

<?phpecho(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")%>

完美内嵌 Quicktime

客户端要求:

对于 Windows 用户和 Mac OS X 用户,安装相应版本的 QuickTime 播放器即可。Windows 版下载QuickTimeinstaller.exe,Mac OS X 版下载QuickTimeinstaller.exe

Windows 用户也可以安装暴风影音等带有 QuickTime 解码器和浏览器插件的其他播放器,例如暴风影音。

对于 Linux 以及 FreeBSD、Solaris 等 Unix 系统用户,需要VLC media player及其浏览器插件或者MPlayer及其浏览器插件。

实现代码:

<objectclassid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B"codebase="http://www.apple.com/qtactivex/qtplugin.cab"width="420"height="360"><paramname="autoplay"value="true"/><paramname="src"value="mov%2F%B2%E2%CA%D4%2Emov"/><embedsrc="mov%2F%B2%E2%CA%D4%2Emov"type="video/quicktime"autoplay="true"width="420"height="360"></embed></object>

要点分析:

QuickTime 格式的内嵌比较简单,像上面那样写就可以了,基本上没有什么要注意的地方。媒体路径 src 的值,可以是完整地址,也可以是相对地址,可以用 url 编码,也可以不编码,QuickTime 插件和 VLC 插件都能正确的支持,当然为了保险起见,最好还是采用 url 编码方式里写媒体路径。

虽然 embed 中指定的是 video/quicktime 类型,但是即使链接的媒体是 mp3 仍然能播放。对于 QuickTime 支持的其他类型的没有进行测试,但我想应该也是可以的。

完美内嵌 Flash

客户端要求:

安装你所使用的浏览器的 Flash 插件。

实现代码:

<objectclassid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"width="420"height="320"><paramname="movie"value="flash/打电话记.swf"/><paramname="quality"value="high"/><embedsrc="flash/打电话记.swf"quality="high"type="application/x-shockwave-flash"width="420"height="320"></embed></object>

要点分析:

对于 Flash 似乎没什么好说的,因为这个用的很普遍。在这里写下来只是为了查阅方便,算是凑数吧。呵呵。

让内嵌多媒体通过 XHTML 验证

问题:

上面的所有的代码,虽然能够完美的在各个浏览器上很好的播放了,但是还有一点美中不足,那就是这样的页面无法通过 XHTML 验证。原因是 embed 标签从来都不是HTML标准中的标签,因此 XHTML 中也没有它。

解决:

如果你不在乎你的网页是否符合标准,那照上面那样做就可以了。如果你还想追求更加完美,请看下面的解决方案:

下面以 flash 为例来介绍,方法同样适用于其他类型的多媒体内容。

我 们知道 W3C 推荐使用的是 object 标签,但用法却不是 Internet Explorer 那种用 classid 来区分控件类型,而是采用 type 来指定 MIME 类型。现在的 Mozilla、Firefox 和 Opera 都支持这种用法,虽然 IE 目前的版本也支持这种用法,不过很可惜的是,IE 还是有 bug,那就是只有全部下载完毕才能播放。而且还不是所有的情况下都能用。在某些 IE 浏览器上还显示空白。所以单纯用 W3C 推荐的 object 标签用法还是不够的。但是我们可以作一下变通,如果是用户浏览器是 IE 的话,我们就用 IE 的 object 的用法,如果是其他浏览器,我们就采用 W3C 的用法。这样就可以两全其美了。也许此刻,你觉得我们该用到脚本了。不,我们不需要脚本。我们只需要用 IE 所特有的条件注释和CSS就可以做到了。例子如下:

<styletype="text/css">.mozilla {
  display:block;
}
</style><!--[if IE]>
<style type="text/css">
.mozilla {
  display:none;
}
</style>
<![endif]-->
<objectdata="flashdatei.swf"type="application/x-shockwave-flash"height="275"width="256"class="mozilla"><paramname="autoplay"value="true"></object><!--[if IE]>
<object
  classid="cclsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
  width="256"
  height="275">
  <param name="src" value=""flashdatei.swf">
</object>
<![endif]-->

你 会发现其实就是把 embed 替换成了 object,而且位置也从 IE 的 object 中移出来了。embed 标签里的 src 属性在 object 中变成了 data 属性。而 firefox 等非 IE 浏览器因为不认识 <!–[if IE]> 标签,所以其中的部分都当作注释忽略了。而 IE 因为执行了 <!–[if IE]> 中的内容,所以 firefox 中可以识别的那个 object 因为 css 被重新定义而被隐藏了。

网页内嵌多媒体 IE,Mozilla、Firefox、NetScape、Opera相关推荐

  1. 点聚AIP电子签章在Chrome、Edge新内核、360系列、FireFox、IE、Opera等浏览器中实现网页内嵌效果案例(二)

    B.函数功能请求:公司网站 http://zorrosoft.com/ 1) 显示关于对话框 请求:{"req":"AIP_AboutBox","ri ...

  2. 网页内嵌lodop控件,部分电脑一直提示未安装

    网页内嵌lodop控件,部分电脑一直提示未安装 工作中遇到部分电脑的内嵌网页用不了lodop控件 lodop 提供了 C-Lodop 支持ppapi的打印方法. 工作中遇到部分电脑的内嵌网页用不了lo ...

  3. 网页内嵌B站视频,隐藏相关控件

    网页内嵌 B 站视频主要是用 ifame , 其地址是: https://player.bilibili.com/player.html?cid=&aid=84267566&page= ...

  4. 网页歌单html制作,网页内嵌网易云插件全程(包括生成自己歌单的外链)

    网页内嵌网易云插件全程(包括生成自己歌单的外链) 1.首先附图,网易云官网教程.(music.163.com) 2.实例操作, 首先第一步在网页版网易云,随便打开一个歌单,点击生成外链播放器. 3.你 ...

  5. HTML-图片热点、网页内嵌、网页拼接、快速切图

    图片热点 规划出图片上的一个区域,可以做出超链接,直接点击图片区域就可以完成跳转的效果.与图片链接不同,热点是图片上的某一个区域或多个区域. 我们用魔兽世界图片来做一个图片热点,点击logo.区域和不 ...

  6. php嵌入 播放mp4,nginx支持网页内嵌mp4视频播放

    整了很久,mp4流媒体播放这方面资料很少,捣鼓了N天,刚申请开通CSDN博客,准备发表一下,共享给那些跟我一样苦逼找资料的兄弟们,TMD CSDN居然说"开通博客三天内不允许发表文章&quo ...

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

    日期:2006-1-13 1:38:50    发布:xiaodaolee 作者 andot 如果你不总是用 Windows 上的 Internet Explorer 来上网的话,你可能会注意到,许多 ...

  8. C# 内嵌 浏览器 CEF 、FireFox、Miniblink

    项目 地址  https://github.com/TL-GuiZhou/windows.Browers Windows 平台下,C# 内嵌网页的 demo,包括当前流行的 CEF .FireFox. ...

  9. 网页内嵌播放器之完全代码

    1.avi格式 代码片断如下: <object id="video" width="400" height="200" border= ...

  10. html在网页中内嵌百度搜索,如何在我的网页内嵌一个百度搜索的网页

    满意答案 double0821 2016.05.18 采纳率:51%    等级:10 已帮助:1069人 网页内包含百度搜索框代码: 查看代码打印 01 02 function g(formname ...

最新文章

  1. 第3关:单链表循环队列
  2. 从换脸到换姿势,AI 在图像处理的道路上越走越魔幻
  3. 4种事务特性,5种隔离级别,7种传播行为
  4. Java多线程模式-Balking模式
  5. linux教程 sed命令的用法,Linux文本处理三剑客——sed命令使用教程
  6. Android应用程序框架
  7. 发挥游戏人工智能的最大价值:线程化
  8. SQLite的基本使用一
  9. Python 捕获异常
  10. ElasticSearch学习(二):ElasticSearch下载与运行
  11. SYNOPSYS DDR VIP use note
  12. 专业办公套件WPS Office 2020 for Mac
  13. SpringBoot设置网站页面小图标——Favicon
  14. 3D建模:角色手办的制作流程,分分钟一个手办
  15. [经验教程]手机上微信新消息不提示也不显示微信消息通知怎么办?
  16. 全球及中国食品级隔膜泵行业需求分析与发展战略规划研究报告2022-2028年
  17. 快商通肖龙源:从智能客服到智能营销,客服中心迎来价值升级节点
  18. 网络入侵检测IDS常用数据集KDD Cup99/NSL-KDD/UNSW-NB15/ADFA/CIC IDS2017/2018下载途径
  19. 《有限与无限的游戏》第三章 我是自己的天才:经典摘抄(2)
  20. 计算机毕业设计Java物流站环境监测系统(源码+系统+mysql数据库+Lw文档)

热门文章

  1. 微信开发源代码详细分析-微信开发教程6
  2. Go语言编程(旧读书笔记)
  3. 架设好传奇登录器显示无法连接服务器,完美登录器使用常见问题解决办法
  4. 利用CSkin组件设计漂亮的WinForm登录界面
  5. qq强制聊天对话php代码,qq强制聊天代码大全
  6. 【备注】【C11】《Android游戏编程之从零开始》PDF 下载
  7. 基础的数据处理(1)—出租车数据的基础处理,由gps生成OD(pandas)
  8. 2012年2月份第1周51Aspx源码发布详情
  9. 收集整理的125个微信小程序模板源码分享
  10. Centos 7/linux 安装gcc 教程