您的位置:首页 > 编程语言 > ASP

Asp.net URL重定向后css路径问题

2010-04-28 17:57 309 查看
如果你不总是用 Windows


上的 Internet


Explorer
来上网的话,你可能会注意到,许多网站上的视频点播之类的多媒体内容,你无法直接在 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


实现代码:



<
object

width=
"420
"
height=
"360
"
classid=
"CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95
">

<
param

name=
"filename
"
value=
"http://vod.ujn.edu.cn/movies%2Fasf%2F%B6%AC%CC%EC%C1%B5%B8%E8%2Easf
"
/>

<
embed

width=
"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
>

也可以用下面这段代码:

<
object

width=
"420
"
height=
"360
"
classid=
"CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6
">

<
param

name=
"url
"
value=
"http://vod.ujn.edu.cn/movies%2Fasf%2F%B6%AC%CC%EC%C1%B5%B8%E8%2Easf
"
/>

<
embed

width=
"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
上可以安装暴风影音



实 现代码:



<
object

classid=
"clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA
"
width=
"420
"
height=
"310
">

<
param

name=
"src
"
value=
"link.php?link=rtsp%3A%2F%2Fvod%2Eujn%2Eedu%2Ecn%2F%D0%C2%D4%FA%CA%A6%C3%C3%2F1%2Erm
"
/>

<
param

name=
"controls
"
value=
"Imagewindow
"
/>

<
param

name=
"console
"
value=
"clip1
"
/>

<
param

name=
"autostart
"
value=
"true
"
/>

<
embed

src=
"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

/>

<
object

classid=
"clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA
"
width=
"420
"
height=
"44
">

<
param

name=
"src
"
value=
"link.php?link=rtsp%3A%2F%2Fvod%2Eujn%2Eedu%2Ecn%2F%D0%C2%D4%FA%CA%A6%C3%C3%2F1%2Erm
"
/>

<
param

name=
"controls
"
value=
"ControlPanel
"
/>

<
param

name=
"console
"
value=
"clip1
"
/>

<
param

name=
"autostart
"
value=
"true
"
/>

<
embed

src=
"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


<?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
")%
>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: