1

我正在使用AVPlayer实时音频流。如果我暂停播放器并继续播放,它会从中断的地方重新开始(这很棒)。除非播放器已暂停很长时间以致停止从网络获取新数据。在这种情况下,当播放恢复时,它首先播放任何缓冲的数据,然后切换到实时数据。

这真的很烦人。听起来你刚刚从上次停下的地方接了过来,但是,令人惊讶的是,你跳到了前面。从收听旧的预暂停缓冲区数据到收听新的实时音频的转换很糟糕。

我想做的是,当暂停“长”时,释放AVPlayer. 这样,如果用户再次按下“播放”,他们只会获得新的实时音频,而不是旧的缓冲数据。我知道这将意味着播放开始前的延迟,但我认为这比我现在得到的音频不连续性要好。

我看不出有任何方法可以检测到这种情况。我以为我可以观察playbackBufferFull电流AVPlayerItem,但这似乎永远不会改变。即使 Instruments 显示没有传入网络流量,playbackBufferFull 仍然为 0。

目前我只是在使用两分钟的超时,即如果在两分钟内没有恢复播放,请释放 AVPlayer。如果用户稍后按下“播放”,则使用新播放器重新开始。实验上,两分钟似乎并不可怕,尽管实际上并不好。有一个更好的方法吗?

4

1 回答 1

0

以我的经验,播放缓冲区总是缓冲 50 秒的音频。您可以测量缓冲区中的秒数,当它达到 50 秒时(或者更好的是,当它停止增加时),您就知道是时候放弃该玩家了。

于 2013-10-18T20:51:05.250 回答