SPPlaybackManager - 延迟和加载

时间:2014-02-28 18:32:56

标签: ios cocoalibspotify-2.0

我正在使用SPPlaybackManager播放曲目,但是在回放的一些小但重要的方面我很难过。跟踪正在加载和流式传输,但通常在调用SPAsyncLoading的回调函数后的.25 - 1.25秒开始播放。我已经尝试了很多方法来查看轨道何时真正开始播放,但似乎都表明在调用SPAsyncLoading回调时启动了播放(包括playbackManager.isPlaying,playbackManager.currentTrack等)。我确定播放实际上是在我之前提到的短暂延迟之后开始的,方法是在SPAsyncLoading回调时设置NSTimer运行10秒,在10秒后获取playbackManager.trackPosition并找到差异。 TL; DR - 当CocoaLibSpotify开始播放时,播放实际上并未启动。

由于这个原因,出现了一些问题:首先,最重要的是,歌曲最后会被回调和回放之间存在的任何偏移量切断。其次,从用户体验的角度来看,我需要能够向用户表明他们处于SPAsyncLoading回调和实际回放之间的“死空间”(即赛道准备播放,但尚未播放)。关于如何规避或解决这些问题的任何建议都非常赞赏!

1 个答案:

答案 0 :(得分:1)

首先,不要将SPAsyncLoading用于与播放相关的内容 - 这不是它的用途,SPPlaybackManager无法向<SPAsyncLoading>确认。

图书馆接受了播放曲目后,isPlaying属性会翻转为YES,您应该将此播放/暂停界面基于此媒体资源。由于延迟和缓存等等,音频可能需要一段时间才能显示出来。

然而,trackPosition属性会更新为音频被推送到扬声器的直接结果。使用计时器来观察这是过度的 - 只需使用KVO观察值,您将始终保持同步。

请注意,SPPlaybackManager是一个非常简单的课程,专为播放单曲。要获得更高级的播放效果,我建议您查看SPPlaybackManager的代码并将其用于您自己的类的基础,该类使用SPSessionSPCoreAudioController的播放方法直接 - 您将获得通过这种方式更好地控制播放。我所知道的唯一Objective-C示例是在Viva项目中 - 特别是VivaPlaybackManagerover on GitHub。该类支持随机播放,本地文件播放,Last.fm等,因此它可能复杂,但它可以很好地进行多轨播放,而不会丢失单个样本。