我正在使用Mediaelement.js ver:2.16.2 如果使用youtube插件并且使用IFrame渲染插件,则不会触发canplay envent。
如果这是一个已知错误或应该有效吗?
我应该补充一点,Youtube插件与IFrame的合并发生在Android设备上。
我查看了源代码,如果我没有弄错,那就是“可以播放'使用iframe时不会调用event。
应该这样:
mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'canplay');
在iframe' onready'中调用代码事件
使用iframe的Youtube插件:
iFrameReady: function () {
this.isLoaded = true;
this.isIframeLoaded = true;
while (this.iframeQueue.length > 0) {
var settings = this.iframeQueue.pop();
this.createIframe(settings);
}
}
createIframe: function (settings) {
var
pluginMediaElement = settings.pluginMediaElement,
player = new YT.Player(settings.containerId, {
height: settings.height,
width: settings.width,
videoId: settings.videoId,
playerVars: { controls: 0 },
events: {
'onReady': function () {
// hook up iframe object to MEjs
settings.pluginMediaElement.pluginApi = player;
// init mejs
mejs.MediaPluginBridge.initPlugin(settings.pluginId);
// create timer
setInterval(function () {
mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'timeupdate');
}, 250);
},
'onStateChange': function (e) {
mejs.YouTubeApi.handleStateChange(e.data, player, pluginMediaElement);
}
}
});
}
带闪光灯的Youtube插件:
flashReady: function (id) {
var
settings = this.flashPlayers[id],
player = document.getElementById(id),
pluginMediaElement = settings.pluginMediaElement;
// hook up and return to MediaELementPlayer.success
pluginMediaElement.pluginApi =
pluginMediaElement.pluginElement = player;
mejs.MediaPluginBridge.initPlugin(id);
// load the youtube video
player.cueVideoById(settings.videoId);
var callbackName = settings.containerId + '_callback';
window[callbackName] = function (e) {
mejs.YouTubeApi.handleStateChange(e, player, pluginMediaElement);
}
player.addEventListener('onStateChange', callbackName);
setInterval(function () {
mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'timeupdate');
}, 250);
mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'canplay');
}