我正在使用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
关于网络故障的最佳实践是什么?