根据浏览器功能替换MediaElementsJS中的媒体源(http with rtmp)

时间:2012-02-02 14:02:32

标签: mediaelement.js

首先,如果John Dyer正在阅读此内容,非常感谢您的播放器,这太棒了! : - )

现在,我的问题。我正在尝试使用HTML5(iPad,iPhone,Android,Chrome桌面)提供MP4视频,并回退到Flash(Firefox,IE,Opera)。 MediaElementJS可以开箱即用,除了HTML5解决方案允许使用HTTP随机跳转到视频,而Flash后备使浏览器在播放前下载整个文件。

因此,我想在使用Flash后备时使用rtmp而不是http(除了传统的网络服务器,我们还有一个Flash Media Server可以为视频提供服务),所以我想在这些情况下更改源代码。但我不知道MediaElementJS是否以及如何告诉我Flash是否会被使用。我试过这个:

<video autoplay controls width="800" height="600" id="video-tag" preload="auto">
  <source id="media-source-mp4" type="video/mp4" src="http://localhost/video1.mp4" />
  <object width="800" height="600" type="application/x-shockwave-flash" data="js/flashmediaelement.swf">
    <param name="movie" value="js/flashmediaelement.swf" />
    <param name="flashvars" value="controls=true&amp;autostart=true&amp;file=rtmp://localhost/video1.mp4" />
  </object>
</video>
<script type="text/javascript">$("#video-tag").mediaelementplayer({
     success: function(media, node, player) {
         if (media.pluginType != 'native') {
             media.setSrc('rtmp://localhost/video1.mp4');
             media.load();
             media.play();
         }
     }
 });</script>

但它显然不起作用。我浏览了medialement.js代码,而我认为媒体元素暴露了pluginType属性,但我可能错了。 &lt;对象&gt;或者&lt; embed&gt;在&lt; div class =“me-plugin”&gt;内创建的元素仍然带有http网址。

我做错了什么,或者我不能简单地完成我正在尝试的事情?

1 个答案:

答案 0 :(得分:4)

我刚刚通过Github问题找到了我自己的问题的答案MediaElementJS:

https://github.com/johndyer/mediaelement/issues/337

诀窍是在URL中的媒体文件名称前添加“mp4:”。所以,在我的例子中,最后一行是:

if (media.pluginType != 'native') {
    media.setSrc('rtmp://localhost/mp4:video1.mp4'); // NOTE the "mp4:" prefix
    media.load();
    media.play();
}

它适用于Flash Media Server 3.5。 : - )