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

因此,会出现一些问题:首先,也是最重要的是,歌曲最初会因回调和播放之间最初存在的偏移而被切断。其次,从用户体验的角度来看,我需要能够向用户指示他们处于SPAsyncLoading回调和实际播放之间的“死区”中(即,轨道正在准备播放,但尚未播放)。任何有关规避或解决这些问题的方法的建议都将受到赞赏!

最佳答案

首先,请勿将SPAsyncLoading用于与播放相关的内容-这不是它的用途,而且SPPlaybackManager仍然无法确认<SPAsyncLoading>

图书馆接受了要播放的曲目后,isPlaying属性将转换为YES,您应该基于此属性来创建播放/暂停UI。由于延迟,缓存和其他原因,音频可能需要一段时间才能显示出来。

但是,trackPosition属性被更新为音频被推送到扬声器的直接结果。使用计时器观看此消息是过分的-只需使用KVO观察该值,您将始终保持同步。

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

关于ios - SPPlaybackManager-延迟和加载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22103114/

10-11 19:49