63

编辑:这个问题写于 2008 年,就像 3 年前的互联网时代一样。如果这个问题仍然与您的环境相关,请接受我的哀悼。其他所有人都应转换为您的浏览器支持的格式(如果需要 Internet Explorer,那将是 H.264,如果不需要,则可能是 AV1、VP8/VP9)并使用<video>元素.


我们在内部站点上使用WMV视频,并将它们嵌入到网站中。这在 Internet Explorer 上运行良好,但在 Firefox 上却不行。我找到了使它在 Firefox 中工作的方法,但随后它在 Internet Explorer 中停止工作。

我们暂时还不想使用 Silverlight,尤其是因为我们无法确定所有客户端都将运行安装了 Windows Media Player 的 Windows XP。

是否有某种通用代码将 WMP 嵌入到 Internet Explorer 和 Firefox 中,或者我们是否需要实现一些用户代理检测并为不同的浏览器提供不同的 HTML?

4

10 回答 10

46

以下适用于 Firefox 和 Internet Explorer:

<object id="mediaplayer" classid="clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#version=5,1,52,701" standby="loading microsoft windows media player components..." type="application/x-oleobject" width="320" height="310">
<param name="filename" value="./test.wmv">
     <param name="animationatstart" value="true">
     <param name="transparentatstart" value="true">
     <param name="autostart" value="true">
     <param name="showcontrols" value="true">
     <param name="ShowStatusBar" value="true">
     <param name="windowlessvideo" value="true">
     <embed src="./test.wmv" autostart="true" showcontrols="true" showstatusbar="1" bgcolor="white" width="320" height="310">
</object>
于 2008-08-03T14:27:20.967 回答
19

我可以推荐jQuery Media Plugin吗?为所有类型的视频提供嵌入代码,而不仅仅是 WMV 并进行浏览器检测,将所有混乱的 switch/case 语句排除在模板之外。

于 2008-08-08T18:29:13.057 回答
8

使用以下内容。它适用于 Firefox 和 Internet Explorer。

        <object id="MediaPlayer1" width="690" height="500" classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95"
            codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"
            standby="Loading Microsoft® Windows® Media Player components..." type="application/x-oleobject"
            >
            <param name="FileName" value='<%= GetSource() %>' />
            <param name="AutoStart" value="True" />
            <param name="DefaultFrame" value="mainFrame" />
            <param name="ShowStatusBar" value="0" />
            <param name="ShowPositionControls" value="0" />
            <param name="showcontrols" value="0" />
            <param name="ShowAudioControls" value="0" />
            <param name="ShowTracker" value="0" />
            <param name="EnablePositionControls" value="0" />


            <!-- BEGIN PLUG-IN HTML FOR FIREFOX-->
            <embed  type="application/x-mplayer2" pluginspage="http://www.microsoft.com/Windows/MediaPlayer/"
                src='<%= GetSource() %>' align="middle" width="600" height="500" defaultframe="rightFrame"
                 id="MediaPlayer2" />

在 JavaScript 中,

    function playVideo() {
        try{
                if(-1 != navigator.userAgent.indexOf("MSIE"))
                {
                        var obj = document.getElementById("MediaPlayer1");
                            obj.Play();

                }
                else
                {
                            var player = document.getElementById("MediaPlayer2");
                            player.controls.play();

                }
             }  
        catch(error) {
            alert(error)
        } 


        }
于 2009-08-04T14:55:37.377 回答
6

Elizabeth Castro 有一篇关于这个问题的有趣文章:Bye Bye Embed。值得一读她如何解决这个问题,以及处理 QuickTime 内容。

于 2008-11-10T19:52:28.537 回答
5

在网络上部署视频的最佳方式是使用 Flash——它更容易干净地嵌入到网页中,并且可以在或多或少的任何浏览器和平台组合上播放。使用 Windows Media Player 的唯一原因是,如果您正在流式传输内容并且需要非常强大的数字版权管理,即使这样,供应商现在也开始使用 Flash 来处理这些内容。请参阅 BBC 的 iPlayer 以获得极好的示例。

我建议您切换到 Flash,即使是内部使用。您永远不知道将来谁需要访问它,这将为您提供最佳的未来兼容性。

编辑 - 2013 年 3 月 20 日。有趣的是,这些老问题如何不时重现!今天的世界多么不同,这一切看起来多么过时。我今天无论如何都不会推荐仅使用 Flash 的路线 - 这些天的最佳做法可能是使用 HTML 5 嵌入 H264 编码的视频,并使用 Flash 后备,如下所述:http: //diveintohtml5.info/video.html

于 2008-08-02T11:05:55.460 回答
5

你可以使用条件注释让 IE 和 Firefox 做不同的事情

<![if !IE]>
<p> Firefox only code</p>
<![endif]>

<!--[if IE]>
<p>Internet Explorer only code</p>
<![endif]-->

浏览器本身会忽略不适合他们阅读的代码。

于 2008-08-01T18:08:53.080 回答
3

使用 ffmpeg 编码 Flash 视频实际上非常容易。您可以使用一个命令从几乎任何视频格式进行转换,ffmpeg 足够聪明,可以解决剩下的问题,并且它将使用您机器上的每个处理器。调用它很容易:

ffmpeg -i input.avi output.flv

ffmpeg 会猜测你想要的比特率,但如果你想指定一个,你可以使用 -b 选项,-b 500000例如 500kbps。当然有很多选择,但我通常不用太多修修补补就能得到很好的结果。如果您正在寻找更多选项,这是一个很好的起点:视频选项

您不需要特殊的网络服务器来显示 Flash 视频。通过简单地将 .flv 文件推送到标准 Web 服务器,并使用好的 swf 播放器(如flowplayer )链接到它们,我已经做得很好了。

如果您可以确定所有用户将始终仅使用 [最新的、最新版本的] Windows,那么 WMV 就很好,但即便如此,Flash 通常更适合 Web。该播放器甚至非常可换肤,并且可以使用 javascript 进行控制。

于 2008-08-04T02:14:59.477 回答
3

我在 MSDN 上找到了一篇关于在 Firefox 中使用 WMP的好文章。

根据 MSDN 的文章,经过反复试验,我发现使用 JavaScript 比使用条件注释或嵌套的“EMBED/OBJECT”标签要好。

我创建了一个基于给定参数生成 WMP 对象的 JS 函数:

<script type="text/javascript">
    function generateWindowsMediaPlayer(
        holderId,   // String
        height,     // Number
        width,      // Number
        videoUrl    // String
        // you can declare more arguments for more flexibility
        ) {
        var holder = document.getElementById(holderId);

        var player = '<object ';
        player += 'height="' + height.toString() + '" ';
        player += 'width="' + width.toString() + '" ';

        videoUrl = encodeURI(videoUrl); // Encode for special characters

        if (navigator.userAgent.indexOf("MSIE") < 0) {
            // Chrome, Firefox, Opera, Safari
            //player += 'type="application/x-ms-wmp" '; //Old Edition
            player += 'type="video/x-ms-wmp" '; //New Edition, suggested by MNRSullivan (Read Comments)
            player += 'data="' + videoUrl + '" >';
        }
        else {
            // Internet Explorer
            player += 'classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6" >';
            player += '<param name="url" value="' + videoUrl + '" />';
        }

        player += '<param name="autoStart" value="false" />';
        player += '<param name="playCount" value="1" />';
        player += '</object>';

        holder.innerHTML = player;
    }
</script>

然后我通过编写一些标记和内联 JS 来使用该函数,如下所示:

<div id='wmpHolder'></div>

<script type="text/javascript">        
    window.addEventListener('load', generateWindowsMediaPlayer('wmpHolder', 240, 320, 'http://mysite.com/path/video.ext'));
</script>

您可以使用jQuery.ready代替窗口加载事件来使代码更加向后兼容和跨浏览器。

我在 Windows 7/8 上测试了 IE 9-10、Chrome 27、Firefox 21、Opera 12 和 Safari 5 上的代码。

于 2013-06-06T16:03:02.890 回答
2

我在 Elizabeth Castro 的网站上发现了一些在 FireFox 和 IE 中都有效的东西(感谢本网站上的链接)——我在这里尝试了所有其他版本,但无法让它们在两种浏览器中都工作

<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>

查看她的网站:http ://www.alistapart.com/articles/byebyeembed/以及初始对象标签中带有 classid 的版本

于 2009-11-06T20:00:01.033 回答
1

2020 年 12 月:

要回答这个问题:

我认为这个问题应该结束。

于 2020-12-11T11:59:32.313 回答