我已经看过一些关于此的讨论,但没有真正的答案。我mediaelement.js
为我工作取得了很大的成功,除了它不会让我setSrc()
闪回后退。经过这么多工作,这是一个巨大的失败。
对于一些小背景我正在使用mediaelement-and-player.js
v2.1.9并使用其播放器的API通过player.setSrc
更改媒体src。我正在播放音频MP3。
我在FF Mac中收到此错误:
this.media.setSrc不是函数
IE8 Win中的这个错误:
SCRIPT445:对象不支持此操作
我觉得很难相信它没有经过全面测试,因为它似乎是他们API的基础部分。我已经看到了一些关于类似问题的其他问题但又没有真正的答案。
答案 0 :(得分:0)
您需要在代码中添加“flashmediaelement.swf”。
答案 1 :(得分:0)
有同样的问题。通过添加非空src
和type="audio/mp3"
属性来解决此问题:
<audio id="player" controls src="#" type="audio/mp3" preload="none"></audio>
此处建议使用preload="none"
,因为没有它,元素会向当前页面的网址发送额外请求,以尝试下载音频。
更新:找到了另一种方法,可以在src
中嵌入零长度WAV文件,因此您可以正常使用preload
属性并停止担心不需要的如果用户在设置正常src
之前点击播放按钮,则会发送请求。
<audio id="player" controls type="audio/mp3" src="data:audio/wav;base64,UklGRiQAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQAAAAA=">
不要担心type
和src
不兼容,因为根据audio element specification,type
不是audio
的合法属性完全标记{type
只是source
标记的属性),此处它仅用于修复MediaElement.js行为。
答案 2 :(得分:0)
我在github上回答了类似的问题。这是我的解决方案:
在初始化mediaElement播放器后过早调用setSrc方法时会发生这种情况。由于闪回后退,swf(因此其api方法)在成功事件被触发之前将不可用。之后,setSrc在IE8中工作正常。
我不想在成功处理程序中设置初始源。因此我使用boolean var来检查是否发生了成功事件。在我的源设置方法中,我检查它的值并使用递归(使用setTimeout来防止过度杀伤)每当布尔值var等于false时。对我来说是诀窍。
//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);
}
}
答案 3 :(得分:-2)
var plugin = new MediaElementPlayer(#mplay_audio_p',
{
//...params...
});
var url="http://www.somesite.com/audiofile.mp3";
plugin.setSrc(url);
plugin.load();
plugin.play();