关于.wmv的兼容问题

以下方法可以在360的极速模式下运行,chrome还是不行。

<object id="MusicPlayer2" type="video/x-ms-wmv" 
   viewastext="VIEWASTEXT"  
    width="320" height="260">
    <param name="FileName" 
      value="/a.wmv" />
    <param name="autostart" value="true" />
    <param name="controller" value="true" />
 </object>

看到这里已经可以了,没有必要深究下边。
最近在处理.wmv的兼容性问题(这问题貌似只能通过将视频转为其他格式才能很好地解决,可以使用ffmpeg进行),黯然发现了一篇文章,渣翻了一下,如有错误请指出。
原文链接:http://alistapart.com/article/byebyeembed
题目:再见embed
我一直惊讶于ie对对象标签的非标准使用迫使爱好标准的浏览器使用非标准embed标签在网页上嵌入视频,即使是苹果公司的网站,一个为Pete而设的Netscape扩展的embed标签,非常稳固,以至于很难找到有关QuickTime的object元素的信息,除非以非标准方式。
embed的使用已经持续了 很长时间,希望它成为官方规格的一部分就像是希望你的半女会开始在牙膏上套帽子一样,不可能发生。如果你想validate你的网站,你必须摆脱embed,在这篇文章中,我会告诉你如何做。
在线视频:google video 和 Youtube
ALA读者会记得Drew McLella关于Flash Staty的开创性文章。在那篇文章中,Drew描述了一种在不使用embed元素的情况下在页面上插入flash动画的方法。Flash Satay有两个部分,首先,Drew发现,只要你充分指定其类型,就可以使用单个object元素来调用Flash.其次,要正确传输Flash电影,你必须嵌入一种参考电影。
我一直在使用Drew的谷歌视屏和Youtube内容代码。我很震惊地发现GoogleVideo建议你只是用embed标签将它们的视频插入到网页中。唉,并不是震惊于他们会建议这样的事情,只是震惊于,它实际上成功运行在ie上,那个几年前停止支持非标准,但普遍支持embed标签,以替代标准object标签的专有实现方法而放弃对于爱好标准的浏览器不可见的标签。

(not shocked that they would suggest such a thing—just shocked that it actually works on Internet Explorer, which stopped supporting the non-standard, but universally-supported embed tag years ago in favor of its proprietary implementation of the standard object tag that renders that tag completely invisible to standards-loving browsers.)
既然Google视频和YouTube都通过Flash播放器提供电影,不管您上传视频的格式如何,您都可以使用Drew的单一object方法将这些电影嵌入到您的网页中。事实上,你不必使用他的代码的 Satay部分;即使没有他建议的参考电影,也可以在Google Video和YouTube流上播放电影。

<object type="application/x-shockwave-flash" 
  data="http://video.google.com/googleplayer.swf? »
8755581808731033658" 
  width="400" height="326" id="VideoPlayback">
  <param name="movie" 
    value="http://video.google.com/googleplayer.swf? »
docId=8755581808731033658" />
  <param name="allowScriptAcess" value="sameDomain" />
  <param name="quality" value="best" />
  <param name="bgcolor" value="#FFFFFF" />
  <param name="scale" value="noScale" />
  <param name="salign" value="TL" />
  <param name="FlashVars" value="playerMode=embedded" />
</object>

然而,正如我上面提到的,我真正的愤怒的并不在于我几乎没有经验的Flash电影 而是使用QuickTime和Windows Media Player电影。我一直试图用标准方式嵌入这些东西多年,但没有多少成功。最近,我遇到了MIME类型,它允许您为Windows Media Player文件(.wmv)使用单个object。我仍然无法相信它。

找到了! Windows Media Player的一个object
我坚信要注意错误。只有当我注意到我做错了什么,并弄清楚为什么,我才能找出正确做事的新方法。正如我在审查这项技术时,我注意到,虽然它对QuickTime电影(如下所述)确实很好,但它不适用于Windows Media Player电影…在Opera上…对于Windows。我抑制了忽视它的冲动,当我为解决这个问题而努力时,我遇到了MIME类型,它允许您使用单个object来嵌入Windows Media Player文件:video / x-ms-wmv。

要嵌入Windows Media Player文件,您应该可以使用此代码

<object type="video/x-ms-wmv" 
  data="http://www.sarahsnotecards.com/catalunyalive/ »
fishstore.wmv" 
  width="320" height="260">
  <param name="autostart" value="true" />
  <param name="controller" value="true" />
</object>

But it turns out that IE6 and IE7 and Safari (strange bedfellows if ever there were), all need a little extra push, in the form of an extra param element:

但事实证明,IE6和IE7以及Safari(如果曾经有过奇怪的同床异形),都需要额外的推动,形式为额外的参数元素:

<object type="video/x-ms-wmv" 
  data="http://www.sarahsnotecards.com/catalunyalive/ »
fishstore.wmv" 
  width="320" height="260">
  <param name="src" 
    value="http://www.sarahsnotecards.com/catalunyalive/ »
fishstore.wmv" />
  <param name="autostart" value="true" />
  <param name="controller" value="true" />
</object>

它成功运行了。
个人认为这是一个十分实验性的,甚至说是一个亵渎的试验,。。。嵌入一个没有classid的WindowsMedia Player(接下来是什么?没有DOCTYPE的有效文档?)我在IE5.5,IE6,IE7,Opera Win / Mac,Firefox Win / Mac和Safari中测试了这个简单的例子,它工作得很好。也就是说,我不做很多脚本或微软的东西,所以你的结果可能会有所不同。 (注意:当然,您可能希望使用更多的参数元素。)

不使用embed嵌入QuickTime影片
不幸的是,我仍然非常确定没有类型可以说服IE浏览器在没有ActiveX控件的情况下打开QuickTime电影。显而易见的选择,type =“video / quicktime”或者甚至t​​ype =“application / x-quicktime”,只适用于爱好标准的浏览器。所以我走了一条不同的路线。

一些基本的场所
这项技术基于两个前提:
首先,对象元素被设计为嵌套,以帮助浏览器优雅地降级。如果浏览器无法显示最外层的对象,它应该尝试下一个,然后再尝试下一个,直到找到可以处理的对象。一旦找到了可以处理的对象,就应该忽略其余的。
其次,大多数主流浏览器完全支持对象元素。最大的例外是(惊喜)Internet Explorer。 IE6显示了它可以处理的所有对象元素 - 即使它们是嵌套的 - 也是相当丑陋的,它们不能的幽灵般的幻影。值得庆幸的是,IE7不会做幽灵,但不幸的是,如果外部对象出现问题,它不会支持嵌套对象。它只是给你一个错误。
第三,Internet Explorer(高于并包括第7版)以非标准方式实现object元素,使得其他浏览器忽略它。
我认为可以在IE的有条件注释系统中找到答案(I think the answer can be found in IE’s system of conditional comments.)。当人们试图决定如何处理IE7对CSS的新兼容时,我开始听到这个消息。虽然IE的注释是IE特有的(阅读:专有),但它没有正确使用对象元素。这是一个完美的匹配。

为互联网探索者提供嵌入式快速入门
我将使用QuickTime作为我的示例,但您可以使用具有classid属性的Windows Media Player电影的相同技巧,因为我会向您展示更多。

要在Internet Explorer中插入基本的QuickTime电影,我们将使用类似这样的内容:

<object classid="clsid:02BF25D5-8C17-4B23-BC80 »
-D3488ABDDC6B" 
  codebase="http://www.apple.com/qtactivex/qtplugin.cab" 
  width="320" height="256">
  <param name="src" 
    value="http://www.sarahsnotecards.com/catalunyalive/ »
diables.mov" />
  <param name="controller" value="true" />
  <param name="autoplay" value="false" />
</object>

不要忘记height或者width或者可怕的调用QuickTime ActiveX 控件的classid。请注意,指定电影URI的param元素具有名称属性“src”,而不是“url”或“movie”。
你可以在这里预览效果。在IE中,你会看到一部电影,而在其他浏览器中你不会看到任何东西。

为所有人嵌入QuickTime电影
虽然标准爱好的浏览器无法处理该object,因为classid属性是可怕的数字而不是URL,他们将继续查看是否有任何可处理的嵌套对象。

因此,在关闭标记之前,我们将使用object元素的标准实现

<object classid="clsid:02BF25D5-8C17-4B23-BC80- »
D3488ABDDC6B" 
  codebase="http://www.apple.com/qtactivex/qtplugin.cab" 
  width="320" height="256">
  <param name="src" 
    value="http://www.sarahsnotecards.com/catalunyalive/ »
diables.mov" />
  <param name="controller" value="true" />
  <param name="autoplay" value="false" />
  <object type="video/quicktime" 
    data="http://www.sarahsnotecards.com/catalunyalive/ »
diables.mov" 
    width="320" height="256">
    <param name="autoplay" value="false" />
    <param name="controller" value="true" />
  </object>
</object>

宽度和高度是必需的,类型也是如此、

如果你在一个爱好标准的浏览器中查看这个组合,它看起来很棒,如果有点大声。正如我们之前提到的,IE 6(及更早版本)不能完全决定如何处理第二个对象,并且基本上用幽灵般的幽灵来解决它。

IE看不见的东西,它无法完成.

尽管IE的条件注释旨在用于为其提供隐藏于其他浏览器的特殊代码的相当可疑的目的,但我们将在此处使用它们来隐藏IE中的代码,但不会从其他浏览器中隐藏代码。 (虽然这并不令人惊讶,但微软有勇气将这些其他浏览器称为“低级”)。

用微软的“原始语法”编写的注释不会运行(惊喜),但幸运的是,Lachlan Hunt找到了一种调整方法,以便他们这样做。

我们需要使用IE的注释系统来隐藏第二个object.在第一个关闭标记后面插入<! - [if!IE]> - >第二个标记和<! - <![endif] - >。

<object classid="clsid:02BF25D5-8C17-4B23-BC80- »
D3488ABDDC6B" 
  codebase="http://www.apple.com/qtactivex/qtplugin.cab" 
  width="320" height="260">
  <param name="src" 
    value="http://www.sarahsnotecards.com/catalunyalive/ »
diables.mov" />
  <param name="controller" value="true" />
  <param name="autoplay" value="false" />
  <!--[if !IE]>-->
  <object type="video/quicktime" 
    data="http://www.sarahsnotecards.com/catalunyalive/ »
diables.mov" 
    width="320" height="260">
    <param name="autoplay" value="false" />
    <param name="controller" value="true" />
  </object>
  <!--<![endif]-->
</object>

现在非常漂亮。
更重要的是,您可以使用Apple开发人员网站上描述的object元素的整个参数集合。

下一次,我会用稍微不那么喧闹的电影进行测试。

Windows Media Player的详细信息
如果您希望将Windows Media Player文件嵌入到classid中,而不是在本文开头附近演示的单对象方法中,则代码仅稍有不同。对于初始object标签中的classid,请使用classid =“CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6”。要指定Windows Media Player影片的URL,请为大多数浏览器使用名称属性等于“url”的param元素,然后使用等于“src”的名称属性为Safari重复该值。

然后,在第二个对象的符合标准的实现中,使用与单对象方法相同的代码。

这是一个例子(线条标记为“Ed”):

<object classid="CLSID:6BF52A52-394A-11d3-B153- »
00C04F79FAA6" 
  id="player" width="320" height="260">
  <param name="url" 
    value="http://www.sarahsnotecards.com/catalunyalive »
/fishstore.wmv" />
  <param name="src" 
    value="http://www.sarahsnotecards.com/catalunyalive »
/fishstore.wmv" />
  <param name="showcontrols" value="true" />
  <param name="autostart" value="true" />
  <!--[if !IE]>-->
  <object type="video/x-ms-wmv" 
    data="http://www.sarahsnotecards.com/catalunyalive »
/fishstore.wmv" 
    width="320" height="260">
    <param name="src" 
      value="http://www.sarahsnotecards.com/ »
catalunyalive/fishstore.wmv" />
    <param name="autostart" value="true" />
    <param name="controller" value="true" />
  </object>
  <!--<![endif]-->
</object>

一个小小的瑕疵,或者,还有什么可做的
截至2006年1月,Apple开始推广使用JavaScript来为网页调用电影,以便用户不必点击ActiveX控件即可激活它们。这是一个漫长而令人费解的故事,起因于对微软的诉讼,最终导致我们其他人生活艰难。无论如何,上面描述的方法几乎可以在没有任何JavaScript的情况下工作,但有一点需要注意:QuickTime电影不会在IE中自动播放。我不确定我甚至想要示例视频自动播放!尽管如此,我发现Windows Media Player文件在后台加载并且没有任何交互时自动播放,而QuickTime电影在播放音频时仅显示初始帧,但没有显示动态图片,这一点非常令人怀疑。

无论如何,我希望看到在实施我认为对我整个站点相当费力的JavaScript解决方案之前,如何激活ActiveX控件问题。我使用很少的JavaScript,并喜欢保持这种方式。

无论你是否使用JavaScript路线,实际上都与文章无关。无论如何,您仍然可以避开标准对象元素的嵌入标签。

因为IE 7(至少在测试版2中)似乎正确处理嵌套对象元素,所以我希望找出一种方法来隐藏IE 6及更早版本的内部对象,但是我没有成功。虽然有一个条件注释允许这样的事情发生(<! - [if gte IE 7]> - >),但Lachlan提供的用于验证事件的额外字符( - >)在IE7中可见(因为他们应该在逻辑上)。有任何想法吗?

在巨人的肩膀上
其他人也在解决这个问题。本文同意两个嵌套对象元素应该工作,但依赖于我认为相当复杂的CSS来隐藏第二个对象。

Ian Hickson使用IE注释来隐藏IE中含有Flash内容的第二个对象。

前面提到的Lachlan Hunt想出了如何编写有效的IE浏览器条件注释,这些注释隐藏IE中的内容,同时向其他浏览器显示它。

猜你喜欢

转载自blog.csdn.net/qq_29729735/article/details/80227556