通过HTTP流式传输AAC音频时AVPlayer延迟

时间:2015-03-03 17:53:39

标签: ios objective-c iphone avplayer

我正在使用AVPlayer通过HTTP从外部服务器流式传输AAC音频,如下所示:

AVPlayer *player = [[AVPlayer alloc] initWithURL:[NSURL URLWithString:myStreamURL]];
[player play];

此方法有效(它确实播放音频),但不是我希望它工作的方式。问题是在调用播放方法后有一个很长的延迟(30秒),然后我必须等待30秒查看状态栏上旋转的“下载轮”,并且音频播放正常但总是在此延迟之后,而不是早。

我认为它实际上是下载音频,然后播放它而不是流式播放。

到目前为止,我还没有想过如何解决这个问题,所以任何帮助都会受到赞赏。

提前致谢。

1 个答案:

答案 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"个关键路径,并记录它们何时以及如何更改。你会看到哪个部分需要很长时间。