使用 player.play(songURI) 时 Spotify 崩溃

Posted

技术标签:

【中文标题】使用 player.play(songURI) 时 Spotify 崩溃【英文标题】:Spotify crashes when using player.play(songURI) 【发布时间】:2012-04-20 20:41:46 【问题描述】:

我正在 OSX 机器上为 Spotify (javascript) 进行开发,当我尝试播放歌曲时应用程序崩溃。

我对 API 的调用是:player.play(trackURI);

发生的情况是 Spotify 客户端将播放歌曲大约 1/4 秒,然后它就会崩溃。我确实相信正是这种方法使客户端崩溃,因为我已经对其进行了调试。

如果您需要任何其他信息,并且对为什么会发生这种情况有任何线索,我期待您的回复。


更多信息:

所以,我设法复制了它。发生的事情是我已经注册了EVENT_CHANGE 事件,就像player.observe(models.EVENT.CHANGE, function (e)

当歌曲结束并开始新的歌曲时,我想播放假队列中的下一首歌曲。因此,当使用e.data.curtrack == true 触发 EVENT.CHANGE 时,我会调用 player.play(nextSongId)

然后我猜 Spotify 会尝试播放其队列中的下一首歌曲,但我想播放我自己的下一首歌曲,所以 Spotify 崩溃了。

【问题讨论】:

您能否提供一个代码 sn-p 来说明您如何使用播放器对象?您还可以提供客户端在执行时正在执行的操作的日志。在 Spotify 上运行 console.app 和过滤器。 @pompa,似乎它不再崩溃了。我不确定我做了什么来“解决”这个问题。当曲目已经在播放时,我可能一直在调用 player.play(trackuri)。不过不确定... @pompa,有关更多信息,请参阅问题的更新描述。干杯! 【参考方案1】:

我认为问题在于,当您告诉 Spotify 播放您的下一首曲目时,您的观察者会一遍又一遍地被调用。每次您执行 player.play 时,都会触发另一个 EVENT.CHANGE,您将尝试再次播放该曲目。

要验证,请尝试输入 console.log("playing next track") 并观察 js 控制台以查看是否发生。

如果是,请尝试检查是否player.track.uri === queue[index].uri,如果为否,则播放队列中的下一首曲目

【讨论】:

是的,好主意。我也注意到了这一点,并使用 bool 变量解决了它。我会尝试这样的。虽然,这不应该真的造成问题。播放器应该一遍又一遍地播放同一首歌曲,但不会崩溃。【参考方案2】:

经过一些修复后,我认为发生这种情况是因为我在之前调用过 player.play(trackURI) 之后几乎立即调用了它。发生这种情况是因为我正在更改一首歌曲,这触发了 EVENT.CHANGE 事件,然后我会再次调用 player.play()。请参阅这段代码,了解处理歌曲更改的好方法。

player.observe(models.EVENT.CHANGE, function (e) 

    // Only update the page if the track changed
    if (e.data.curtrack == true && !justChangedSong) 
        var songId = queue.shift();
        if (songId != null)
        
            player.play(songId);
            justChangedSong = true;
        
    
    else if (justChangedSong)
    
        justChangedSong = false;
    
);

另外,如果您有一个名为“下一首歌曲”的按钮,请将其连接到playNextSong() 方法:

function playNextSong()

    var songId = queue.shift();
    if (songId != null)
    
        player.play(songId);
        justChangedSong = true;
    

似乎 Spotify 不再崩溃了。干杯!

【讨论】:

以上是关于使用 player.play(songURI) 时 Spotify 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

停止在电影XNA结束时播放视频

Spotify App API:播放专辑中的特定曲目

quick player运行分析

AVPlayer SET fps

Django RelatedManager 的 .create() 用法?

AvPlayer 正在下载 mp3 而不是流式传输