我正在使用AVPlayer通过HTTP从外部服务器流式传输AAC音频,如下所示:
AVPlayer *player = [[AVPlayer alloc] initWithURL:[NSURL URLWithString:myStreamURL]];
[player play];
此方法有效(它确实播放音频),但不是我希望它工作的方式。问题是在调用播放方法后有一个很长的延迟(30秒),然后我必须等待30秒查看状态栏上旋转的“下载轮”,并且音频播放正常但总是在此延迟之后,而不是早。
我认为它实际上是下载音频,然后播放它而不是流式播放。
到目前为止,我还没有想过如何解决这个问题,所以任何帮助都会受到赞赏。
提前致谢。
答案 0 :(得分:4)
这取决于音频服务器,但我对AVPlayer的做法是通过KVO观察player.currentItem.status
属性。当它变为AVPlayerItemStatusReadyToPlay
时,调用prerollAtRate
。然后开始在其完成处理程序中播放。
[player prerollAtRate:1.0 completionHandler:^(BOOL finished){
if (finished) {
[player play];
}
}];
无论如何,首先建议观察AVPlayer实例上的"status"
,"currentItem.status"
和"currentItem.loadedTimeRanges"
个关键路径,并记录它们何时以及如何更改。你会看到哪个部分需要很长时间。