我正在使用SPPlaybackManager来播放曲目,但在播放的一些小但重要的方面,我遇到了困难。曲目是加载和流,但通常开始播放.25 - 1.25秒后,回调函数的SPAsyncLoading被调用。我已经尝试过许多方法来查看歌曲何时真正开始播放,但所有这些似乎都表明,在调用SPAsyncLoading回调时(包括playbackManager.isPlaying、playbackManager.currentTrack等),回放已经启动。我确定回放实际上是在我前面提到的短暂延迟之后开始的,方法是将NSTimer设置为在SPAsyncLoading回调时运行10秒,在10秒后获取playbackManager.trackPosition并找到差异。TL;DR -当CocoaLibSpotify说它启动时,回放实际上不会启动。
因此出现了一些问题:第一,也是最重要的,歌曲在结束时被回放和回放之间的任何偏移所切断。其次,从UX的角度来看,我需要能够向我的用户表明他们在SPAsyncLoading回调和实际回放之间的“死胡同”(即轨道正在准备播放,但尚未播放)。任何关于如何规避或解决这些问题的建议都非常感谢!
发布于 2014-03-01 10:23:30
首先,不要使用SPAsyncLoading来播放相关内容--这不是它的目的,而且SPPlaybackManager也不向<SPAsyncLoading>确认。
一旦库接受了回放的轨道,isPlaying属性就会切换到YES,您应该将play/pause建立在这个属性上。由于延迟、缓存和诸如此类的原因,音频可能需要一段时间才能像您看到的那样出现。
然而,trackPosition属性作为音频被推送到扬声器的直接结果而被更新。使用计时器来观察这是过分的-只要使用KVO来观察这个值,您将始终保持同步。
请注意,SPPlaybackManager是一个非常简单的类,专为播放单曲而设计。对于更高级的回放,我建议查看SPPlaybackManager的代码,并使用它作为您自己类的基础,直接使用SPSession和SPCoreAudioController的回放方法--这样可以更好地控制回放。我所知道的唯一目标--C示例是在Viva项目中--特别是VivaPlaybackManager类在GitHub上。该类支持洗牌、本地文件回放、Last.fm等,因此它可能太复杂了,但它可以很好地进行多声道播放,而不会丢失一个示例。
https://stackoverflow.com/questions/22103114
复制相似问题