是否有任何方式/ API与<object>播放视频?</object>进行交互

时间:2013-10-10 14:34:45

标签: javascript html internet-explorer video

查看我自己的答案,让它正常运作!

我使用video.js在网站上播放视频也必须脱机工作,因此无法使用闪存。由于video.js使用flash后备,我自己写了。

例如在IE8中创建了对象:

<OBJECT codeBase="http://www.microsoft.com/Windows/MediaPlayer/" classid=CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95 width=660 height=418 type=application/x-oleobject>
<embed src="Videos/Aktionen_Coffee-Stop/Teaser_Coffee-Stop.wmv" type="application/x-mplayer2" enabled="1" showstatusbar="1" ShowControls="1" ShowStatusBar="0" ShowDisplay="0" autostart="true" width="660" height="418" scale="tofit"></embed></OBJECT>

这完全正常,该对象呈现视频播放器(Windows媒体播放器,即旧版mac / safari版本中的快速时间)。

在JavaScript中是否有任何方法可以播放此视频以停止,重放,触发“已结束”的事件?

编辑:even when looking at these "docs" - 如何创建一个Player对象?人们如何创建这样的文档?认真的MS ......

更新

var wmp = $('#wmp').get(0);

setTimeout(function() {

    console.log(wmp.Controls.currentPosition());
    wmp.Stop();
}, 2000);

wmp.stop()可行,但wmp.Controls.controls始终会抛出错误。我只想知道视频何时结束。

2 个答案:

答案 0 :(得分:0)

好的,我发现了一些非常奇怪的东西(谁会猜到,它的MS)。

首先,我总是遇到Player.controls不可用的错误。可能与我有关,我在代码中使用CLASSID="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95"而不是CLASSID="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6"中描述的"docs"。这是因为使用任何其他classid会导致wmp无法加载/播放视频,因此我必须使用该classid。

var player = document.getElementById("player");

所以,无论我做了什么,我的播放器对象中都没有任何objects listed here,例如player.controlsplayer.media,没有。{/ p>

所以我试着记录整个玩家对象,看看究竟是什么:console.log(player)。 IE8,非常棒,在日志中优雅地打印出来:[object]。真是太令人惊讶了。调试不起作用(怎么可能......)。所以,我做了一个for (a in player)日志:) IE崩溃了。真棒。

奇怪的是,打开一个新标签后,控制台出现了所有日志。我发现了,这是奇怪的,但很棒 - 从现在开始工作:所有属性,方法和东西都直接放入播放器var中,所以它不是player.controls.currentPosition而是player.currentPosition。 Booya。

这是我的工作代码:

    var obj = '<object id="wmp" CLASSID="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95" TYPE="application/x-oleobject" width="' + parseInt(parsed.width) + '" height="' + (parseInt(parsed.height) + 0) + '" codebase="http://www.microsoft.com/Windows/MediaPlayer/">';
..
obj += '</object>';

$('#wrapper').html(obj);

var wmp = document.getElementById("wmp");

wmp.attachEvent('playStateChange', function(a) {
    if (a == 8 || a === 0 || a === '0' || parseInt(a) === 0 || a == 'MediaEnded') {
        // check if playback has really finished
        var cpos = wmp.currentPosition,
            dur = wmp.duration;

        if (dur - cpos >= dur - 0.1 ) {
            console.log('the video has ended');
        }
    }
});

This page here suggests在视频播放结束时使用状态8,实际上永远不会是8。它相当随机0,2或3.大部分为0.

希望这有助于任何人!

答案 1 :(得分:-1)

用于WMV播放器的Javascript API在视频结束后重新开始播放..

document.getElementById("Player").attachEvent("PlayStateChange",function(newState) {
         if(newState == "1") // stopped, restart playback paused at 3 seconds
        {
             document.getElementById("Player").controls.play();
             document.getElementById("Player").controls.pause();
             document.getElementById("Player").controls.currentPosition = "3";
        }
    });