Soundcloud Javascript SDK 2.0 - 流onfinish事件不会执行

Mik*_*ike 5 javascript soundcloud

我正在尝试将onfinish事件用于Soundcloud Javascript SDK Stream方法.我有以下代码正在工作,除了onfinish事件永远不会触发.任何想法都会非常有用.

var soundPlayer;
var smOptions = {
    useHTML5Audio: true,
    preferFlash: false,
    onfinish: function() {
        console.log('Finished playing');
    }
};

SC.initialize({
    client_id: "..."
});

SC.stream("/tracks/12345", smOptions, function(sound) {
    soundPlayer = sound;
});
Run Code Online (Sandbox Code Playgroud)

提前致谢!

更新:

由于onfinish不起作用,我在SC.stream()中返回的soundPlayer对象上使用了getState()方法.值得庆幸的是,当流完成时,有一个名为"已结束"的唯一状态.这是我实施的:

setInterval(function() {
    if (soundPlayer != null && soundPlayer.getState() == "ended") {
        soundPlayer.play();
    }
}, 250);
Run Code Online (Sandbox Code Playgroud)

我对此并不满意,但它给了我经验丰富的期望并满足要求.我真的希望有人可以帮助解释为什么记录的onfinish方法没有解雇.

有人有主意吗?

Cra*_*ons 2

这是使用回调而不是轮询的解决方法。它的工作原理是针对动态 html5 音频播放器元素本身并注册本机事件。我不希望它在后备模式下工作,但强制 html5 可能会完成解决方案,直到 SDK v2 返回声音对象。

var soundPlayer;
var smOptions = {
    useHTML5Audio: true,
    preferFlash: false
};

SC.initialize({
    client_id: "..."
});

SC.stream("/tracks/12345", smOptions, function(sound) {
    soundPlayer = sound;
    html5Audio = sound._player._html5Audio;
    html5Audio.addEventListener('ended', function(){ console.log('event fired: ended'); });
});
Run Code Online (Sandbox Code Playgroud)