我對MEjs演示播放器進行了一些更改,以使用Cortado Java小程序在IE/Safari瀏覽器中啓用OGG播放。MediaElement.js中的Cortado Ogg播放器 - 幾乎可以工作
我有播放/暫停工作,雖然getPlayPosition()作爲用於此目的的documentation,applet.currentTime
和applet.duration
工作描述也沒有得到以毫秒爲單位的當前位置。
我認爲將它們連接到mejs播放器上的當前位置指示器很簡單,但我遇到了一個問題。對象上的setCurrentTime
在IE中導致DOM Exception: InVALID_STATE_ERR (11)
,並且在Safari中發生類似的錯誤。顯然我試圖設置的對象不再存在?
下面的代碼將播放和暫停,甚至在控制檯中給出秒/總數(F12工具必須在IE中啓用)。是否有一種很好的方法將它連接到播放欄?
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>HTML5 MediaElement</title>
<script src="../build/jquery.js"></script>
<script src="../build/mediaelement-and-player.js"></script>
<link rel="stylesheet" href="../build/mediaelementplayer.min.css" />
</head>
<body>
<h1>MediaElementPlayer.js</h1>
<p>Audio player</p>
<h2>OGG Player</h2>
<audio id="player2" src="http://www.archive.org/download/memoirs_holmes_0709_librivox/holmesmemoirs02doyle.ogg" type="" controls="controls">
</audio>
<script>
MediaElementPlayer.prototype.buildplaypauseOrig =
MediaElementPlayer.prototype.buildplaypause;
MediaElementPlayer.prototype.buildplaypause = function(a,b,c,d) {
if (d.src.indexOf('.ogg') !=-1 /* && IE or safari */) {
if (jQuery(this.$node).find('applet').length==0) {
jQuery(this.$node).append('<applet code="com.fluendo.player.Cortado.class" codebase="http://theora.org/" archive="cortado.jar" width="100" height="100">'+
'<param name="url" value="'+d.src+'"/><param name="seekable" value="true"/><param name="autoPlay", value="false"/></applet>');
}
var el = this.$node; //mejs audio element
var initonload = function() {
if (el.find('applet')[0].isActive) {
var applet = el.find('applet')[0];
// This is where it fails: mejs.players[0].setCurrentTime or d.setCurrentTime cause dom exception
console.log(applet.code);
console.log(applet.currentTime);
/*mejs.players[0]*/ //d.setCurrentTime(applet.currentTime);
console.log(applet.duration);
/*mejs.players[0]*/ //d.media.duration = applet.duration;
} else {
window.setTimeout(initonload,100);
}
}
d.addEventListener("play",function() {
var audio = el.attr('src');
window.setInterval(function() {
//try {
var applet = el.find('applet')[0];
console.log(applet.currentTime);
// This is where it fails: mejs.players[0].setCurrentTime or d.setCurrentTime cause dom exception
//mejs.players[0].setCurrentTime(applet.currentTime);
console.log(applet.duration);
/*mejs.players[0]*/ //d.media.duration = applet.duration;
//}catch(e) {console.log(e)}
//console.log(applet.getPlayPosition()+"ms");
},1000);
//jQuery(this).find('applet')[0].setParam('url',audio);
el.find('applet')[0].doPlay();
});
d.addEventListener("pause",function() {
var applet = el.find('applet')[0];
applet.doPause();
});
d.addEventListener("load",function(e) {
alert('load');
});
}
this.buildplaypauseOrig(a,b,c,d);
}
mejs.HtmlMediaElementShim.determinePlaybackOrig =
mejs.HtmlMediaElementShim.determinePlayback
mejs.HtmlMediaElementShim.determinePlayback = function(htmlMediaElement, options, supportsMediaTag, isMediaTag, src) {
var res = this.determinePlaybackOrig(htmlMediaElement, options, supportsMediaTag, isMediaTag, src);
//if (mejs.MediaFeatures.isIE) {
res.method = 'native';
//}
return res;
}
$('audio,video').mediaelementplayer();
</script>
</body>
</html>
這是使用MeJS 2.10.3。
謝謝,但它確實* *創建applet元素,播放和暫停工作,執行console.log-ING的時間工作,但調用'mejs.players [0] .setCurrentTime(applet.currentTime);'失敗。 – NoBugs 2013-03-25 14:06:33
檢查[MediaElement.js](http://mediaelementjs.com/)代碼後,似乎'mejs.players'不是一個數組,而是一個對象。要找到第一個玩家,你必須看看'mejs.players ['mep_0']'。 'mejs.players [0]'將是未定義的。 – ArtBIT 2013-03-27 11:33:58
我注意到當我用最新的ME.js再次嘗試時,但是這適用於我以前開始的舊版本。 – NoBugs 2013-03-28 00:58:00