我正在使用AVPlayer
实时音频流。如果我暂停播放器并继续播放,它会从中断的地方重新开始(这很棒)。除非播放器已暂停很长时间以致停止从网络获取新数据。在这种情况下,当播放恢复时,它首先播放任何缓冲的数据,然后切换到实时数据。
这真的很烦人。听起来你刚刚从上次停下的地方接了过来,但是,令人惊讶的是,你跳到了前面。从收听旧的预暂停缓冲区数据到收听新的实时音频的转换很糟糕。
我想做的是,当暂停“长”时,释放AVPlayer
. 这样,如果用户再次按下“播放”,他们只会获得新的实时音频,而不是旧的缓冲数据。我知道这将意味着播放开始前的延迟,但我认为这比我现在得到的音频不连续性要好。
我看不出有任何方法可以检测到这种情况。我以为我可以观察playbackBufferFull
电流AVPlayerItem
,但这似乎永远不会改变。即使 Instruments 显示没有传入网络流量,playbackBufferFull 仍然为 0。
目前我只是在使用两分钟的超时,即如果在两分钟内没有恢复播放,请释放 AVPlayer。如果用户稍后按下“播放”,则使用新播放器重新开始。实验上,两分钟似乎并不可怕,尽管实际上并不好。有一个更好的方法吗?