Soundcloud Javascript SDK 2.0 - Stream onfinish 事件不执行

Soundcloud Javascript SDK 2.0 - Stream onfinish event does not execute

我正在尝试为 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() 方法。值得庆幸的是,当流完成时,有一个名为 "ended" 的独特状态。这是我实现的:

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

我对此并不满意,但它给了我想要的体验并满足了要求。我真的希望有人能帮助阐明为什么没有触发记录的 onfinish 方法。

有人有什么想法吗?

我有同样的问题,我似乎无法触发任何回调。这是一个简单的例子,除了回调之外。 (这应该是评论而不是答案,但我没有这样做的声誉。)

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<h1>Sound Cloud API callback test</h1>
<script src="//connect.soundcloud.com/sdk-2.0.0.js"></script>
<script type="text/javascript">
    SC.initialize({
        client_id: "YOUR_CLIENT_ID"
    });

    SC.stream(
            '/tracks/293',
            {
                onload: function() { console.log("Does not fire."); },
                onplay: function() { console.log("Does not fire."); },
                onfinish: function() { console.log("Does not fire."); }
            },
            function(sound) { sound.play(); });
</script>
</body>
</html>

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

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'); });
});

这与 SDK 版本 3 完美配合

SC.stream('/tracks/293', function(player) {
  player.on('finish', function() {
    stopPlayer();
  });
});