Tôi đang sử dụng AVPlayer
để triển khai trình phát video tùy chỉnh trong ứng dụng iOS. Để chơi video từ mạng tôi bố trí một cầu thủ:AVPlayer/AVPlayerItem thông báo cho ứng dụng của tôi về lỗi mạng không thể truy cập như thế nào?
[[AVPlayer alloc] initWithURL:_URL];
Tạo một tài sản:
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:self.URL
options:@{AVURLAssetPreferPreciseDurationAndTimingKey : @(YES)}];
tải phím playable
không đồng bộ:
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];
}
});
}];
Vấn đề là khi thiết bị có không có kết nối internet hoặc mất gói cao, completionHandler
không bao giờ được gọi (thậm chí sau khi đợi vài phút) và vì vậy tôi không có ý tưởng khi nào hiển thị thông báo cho người dùng rằng tải g video không thành công.
Câu hỏi của tôi là:
- Am tôi thiếu một cái gì đó/là có một cách tốt hơn để xử lý này?
- Tôi có nên cuộn logic hết thời gian chờ của riêng mình hoặc tôi chỉ không bao giờ
loadValuesAsynchronouslyForKeys:
khiReachability
tin rằng mạng không thể truy cập được. - Các phương pháp hay nhất về
AVPlayer
và lỗi mạng là gì?