У меня была точно такая же проблема, и я потратил на это десять часов...
Но теперь это исправлено путем добавления метода "insertItem" в основной поток.
Итак, у меня есть свой плеер как свойство:
@property AVQueuePlayer * player;
Я просто запускаю его так:
_player = [[AVQueuePlayer alloc] init];
И вот мой метод добавления элементов из пути:
- (void)addInQueuePlayerFile:(NSString *)path {
AVAsset * asset = [AVAsset assetWithURL:[[NSURL alloc] initFileURLWithPath:path]];
AVPlayerItem * playerItem = [AVPlayerItem playerItemWithAsset:asset];
dispatch_async(dispatch_get_main_queue(), ^{
[_player insertItem:playerItem afterItem:nil];
});
}
Так что это работает, но я действительно не понимаю, почему... Так что, если у кого-то есть ответ...
Но также, если это не работает для вас, попробуйте добавить наблюдателя к вашему игроку (и/или вашему playerItem). Вы можете добавить наблюдателя следующим образом:
[_player addObserver:self forKeyPath:@"status" options:0 context:nil]
И поймать его с помощью этого метода:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if (object == _player && [keyPath isEqualToString:@"status"]) {
if (_player.status == AVPlayerStatusFailed) {
NSLog(@"AVPlayer Failed");
} else if (_player.status == AVPlayerStatusReadyToPlay) {
NSLog(@"AVPlayer item Ready to Play");
} else if (_player.status == AVPlayerStatusUnknown) {
NSLog(@"AVPlayer item Unknown");
}
}
}
Дайте мне знать, если это работает для вас.
person
Julien Benichou
schedule
10.11.2014