2011-09-09 44 views
3

我已經看到關於此的一些討論,但沒有真正的答案。我已經獲得了很多成功mediaelement.js爲我工作,除了它不會讓我閃光fallbacks讓我setSrc()。經過這麼多的工作,這是一個巨大的失望。MediaElement.js setSrc不適用於FF,IE7-8上的閃回回退

對於一個小背景我正在使用mediaelement-and-player.js v2.1.9並使用他們的播放器API通過player.setSrc更改媒體src。我在播放音頻MP3。

我得到這個錯誤在FF的Mac:

this.media.setSrc不是一個函數

而這個錯誤在IE8 WIN:

SCRIPT445:對象不支持此動作

我發現它d認爲這沒有完全測試,因爲它似乎是其API的基礎部分。我已經看到類似問題的其他一些問題,但是再次沒有真正的答案。

+0

更新:我找到了解決辦法,雖然它不是沒有它的錯誤,它似乎工作得相當好。請參閱我在mediaelement的github問題中發佈的以下討論的評論:https://github.com/johndyer/mediaelement/issues/246 – vrbl

+1

任何人都可以在此方面獲得明確的解決方案? – Gluip

+0

沒有得到上面的錯誤,但不得不在'setSrc()'之前調用'pause()',那麼一切爲我工作 – schellmax

回答

-2
var plugin = new MediaElementPlayer(#mplay_audio_p', 
{ 
//...params... 
}); 

var url="http://www.somesite.com/audiofile.mp3"; 

plugin.setSrc(url); 
plugin.load(); 
plugin.play(); 
0

您需要將「flashmediaelement.swf」添加到您的代碼中。

0

有同樣的問題。通過添加非空srctype="audio/mp3"屬性解決了這個問題:

<audio id="player" controls src="#" type="audio/mp3" preload="none"></audio> 

preload="none"存在推薦這裏,因爲沒有它的元素將在試圖下載音頻發送到當前頁面的URL的附加請求。


更新:發現的另一種方式,長度爲零的WAV文件可以被嵌入src,因此您可以正常使用preload屬性,並停止擔心是不需要的請求將被髮送,如果一個用戶會點擊播放按鈕之前,您設置正常src

<audio id="player" controls type="audio/mp3" src="data:audio/wav;base64,UklGRiQAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQAAAAA="> 

不要擔心typesrc不兼容,因爲按照audio element specificationtype是不是所有audio標籤的法律屬性(type只是一個source標籤的屬性),在這裏它只是放在解決MediaElement.js行爲。

0

我在github上回答了類似的問題。這是我的解決方案:

這會在初始化mediaElement播放器後過早調用setSrc方法時發生。由於閃回回退,在成功事件被觸發之前,swf(以及其api方法)將不可用。之後,setSrc在IE8中工作正常..

我不想在成功處理程序中設置初始源。因此我使用了一個布爾變量來檢查成功事件是否發生。在我的源代碼設置方法中,每當布爾變量var等於false時,我檢查它的值並使用遞歸(使用setTimeout來防止矯枉過正)。對我來說有詭計了。

//create the tag 
var video = $("<video>",{id:"videoElement",width:640,height:360}).appendTo('body');//jquery 

var mediaElementInitialized = true 

//create the mediaelement 
var mediaElement = new MediaElementPlayer("#videoElement",{ 
      /** 
      * YOU MUST SET THE TYPE WHEN NO SRC IS PROVIDED AT INITIALISATION 
      * (This one is not very well documented.. If one leaves the type out, the success  event will never fire!!) 
      **/ 
      type: ["video/mp4"], 
      features: ['playpause','progress','current','duration','tracks','volume'], 

      //more options here.. 

      success: function(mediaElement, domObject){ 
       mediaElementInitialized = true; 
      }, 
      error: function(e){alert(e);} 
      } 
     ); 

var setSource = function(src){ 

    if(mediaElementInitialized == true){ 

     if(mediaElement){ 
      mediaElement.setSrc(src); 
      mediaElement.play(); 
     } 

    } else { 
     //recursive.. ie8/flashplayer fallback fix.. 
     var self = this; 
     setTimeout(function(){ 
      self.setSource(src); 
     },100); 
    } 
} 
相關問題