我需要连续播放一些音频,因此需要使用AVQueuePlayer
来实现此目的。我加载音频在它:在AVQueuePlayer中异步加载AVURLAsset会扰乱订单 - iOS
for (NSInteger i = row ; i<_messagesArray.count ; i++)
{
_urlString = ((PFFile*)(_messagesArray[i][@"messageFile"])).url;
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL URLWithString:_urlString] options:nil];
NSArray *keys = @[@"playable"];
AVPlayerItem *item = [AVPlayerItem playerItemWithAsset:asset];
// Subscribe to the AVPlayerItem's DidPlayToEndTime notification.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:item];
if (_queuePlayer == nil)
{
_queuePlayer = [[AVQueuePlayer alloc] initWithPlayerItem:item];
}
else
{ /*This loads Async*/
[asset loadValuesAsynchronouslyForKeys:keys completionHandler:^() {
[_queuePlayer insertItem:item afterItem:nil];
}];
}
}
[_queuePlayer play];
现在的问题是,因为我通过Async
加载从URL资产(见上面的代码else
条件),音频文件在我AVQueuePlayer
顺序不一样的,在_messagesArray
例如网址: _messagesArray = audioURL1 , audioURL2, audioURL3
然后由于异步,取其先加载,进入AVQueuePlayer
第一
AVQueuePlayer = audio2 (from URL2) , audio1 (from URL1) , audio3 (from URL3)
请建议一个解决方案来维持我的播放器的顺序。
谢谢。
当您插入时,您可以根据项目URL检查_messageArray的位置在哪里? – Larme
@Larme可以请你详细说一下吗?不明白 – hyd00
请任何人帮忙... – hyd00