【问题标题】:libspotify: music_delivery callback not firinglibspotify:music_delivery 回调未触发
【发布时间】:2013-01-06 15:28:23
【问题描述】:

我已经成功地从播放列表加载了一个 Spotify 曲目(通过将曲目名称跟踪到屏幕上来验证),将其传递给使用 sp_session_player_loadsp_session_player_play(sess, 1) 播放。

但是我的music_delivery 回调从未被调用(我有一些跟踪显示它何时被调用)。 libspotify FAQ 似乎暗示它将由 API 内部的内部线程调用,我不需要调用 sp_session_process_events 来启动流。

我的应用程序是单线程的,所以我假设我的代码中没有锁定问题。


来源:

libspotify Haskell 绑定: https://github.com/mrehayden1/libspotify (您需要安装 libspotify 才能编译:https://developer.spotify.com/technologies/libspotify/#download

申请代码: https://github.com/mrehayden1/harmony

【问题讨论】:

  • 您将需要展示代码,并且可能需要展示您正在使用的haskell 绑定。真的可以是任何东西。
  • 刚刚编辑了带有源链接的问题。 :)

标签: haskell spotify ffi


【解决方案1】:

一些想法:

我不需要调用sp_session_process_events 来开始流式传输。

这有点正确,但是,当您收到 notify_main_thread 回调时,您必须触发 sp_session_process_events — 这在另一个线程上,因此您需要正确地将其委托回您的主线程线程进行调用。

既然你提到你只有一个线程,请确保你没有在某个地方陷入紧密循环——比如while (!sp_track_is_loaded(track)) {}——因为 libspotify 中的很多工作都在你调用的线程中进行,这样做会导致 libspotify 无法进行任何工作,一切都会停止。

通过使用sp_session_player_loadsp_session_player_play(sess, 1) 播放。

这些调用的结果是什么?加载元数据与加载播放不同,因此您可能会从 play 调用返回 SP_ERROR_IS_LOADING。此外,由于某些其他原因,该曲目可能无法播放,因此错误很重要。


如果您仍然遇到问题,则问题可能出在绑定或代码中的其他地方。查看 libspotify 附带的自动唱片点唱机示例,了解播放的示例 C 实现。

【讨论】:

  • 感谢您的提示:notify_main_thread。我会试试看它的作用。 sp_session_play_loadsp_session_player_play 的结果都是 SP_ERROR_OK。请参阅我对 Haskell 资源的修改后的问题。我故意尝试通过调用 threadDelay 来避免紧密循环。
猜你喜欢
  • 2011-02-12
  • 2020-08-08
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
相关资源
最近更新 更多