我正在尝试对Soundcloud Javascript SDK Stream方法使用onfinish事件。我有下面的代码,除了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;
});

提前致谢!

更新:

由于onfinish不起作用,因此我在SC.stream()中返回的soundPlayer对象上使用getState()方法。值得庆幸的是,流完成后,有一个唯一的状态称为“结束”。这是我已经实现的:
setInterval(function() {
    if (soundPlayer != null && soundPlayer.getState() == "ended") {
        soundPlayer.play();
    }
}, 250);

我对此并不满意,但是它给了我经验丰富的需求并符合要求。我真的希望有人可以帮助您阐明为何未记录的onfinish方法。

有人有主意吗?

最佳答案

这是使用回调而不是轮询的解决方法。它通过定位动态html5音频播放器元素本身并注册 native 事件来工作。我不希望它在后备模式下工作,但是强制使用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'); });
});

关于javascript - Soundcloud Javascript SDK 2.0-流onfinish事件不执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31010292/

10-11 08:03