使用 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 崩溃的主要内容,如果未能解决你的问题,请参考以下文章