Как AVPlayer / AVPlayerItem информирует мое приложение о недоступном сбое сети?
Я используюAVPlayer
реализовать пользовательский видеоплеер в приложении для iOS. Для воспроизведения видео из сети я выделяю плеер:
[[AVPlayer alloc] initWithURL:_URL];
Создать актив:
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:self.URL
options:@{AVURLAssetPreferPreciseDurationAndTimingKey : @(YES)}];
загрузитьplayable
ключ асинхронно:
NSArray *keys = @[@"playable"];
[asset loadValuesAsynchronouslyForKeys:keys completionHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
for (NSString *key in keys) {
NSError *error;
AVKeyValueStatus status = [asset statusOfValueForKey:key error:&error];
if (status == AVKeyValueStatusFailed) {
NSLog(@"Failed to load asset key %@ error %@", key, [error localizedDescription]);
[self fail];
return;
}
}
if (asset.isPlayable) {
[self.player replaceCurrentItemWithPlayerItem:self.playerItem];
}
else {
[self fail];
}
});
}];
Проблема заключается в том, что, когда устройство не подключено к Интернету или не имеет большой потери пакетов,completionHandler
никогда не вызывается (даже после ожидания в течение нескольких минут), и поэтому я понятия не имею, когда показать пользователю сообщение о том, что загрузка видео не удалась.
Мои вопросы:
Я что-то упустил / есть ли лучший способ справиться с этим?Должен ли я бросить свою собственную логику тайм-аута или я просто никогдаloadValuesAsynchronouslyForKeys:
когдаReachability
считает, что сеть недоступна.Каковы лучшие практики в отношенииAVPlayer
а сбои сети?