Я пытаюсь создать миниатюры для видеофайлов:
- (UIImage*) thumbnailForVideoAtURL: (NSURL*) videoURL
{
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
CGImageRef imageHandle = [generator copyCGImageAtTime:kCMTimeZero actualTime:NULL error:NULL];
if (imageHandle) {
UIImage *frameImage = [UIImage imageWithCGImage:imageHandle];
CFRelease(imageHandle);
return frameImage;
} else {
return nil;
}
}
Проблема в том, что видеофайлы хранятся в адресно-ориентированном хранилище и не имеют расширений.Похоже, это сбрасывает AVURLAsset
, так как ресурс создается, но после прочтения изображения кадра я получаю следующую ошибку:
Error Domain=AVFoundationErrorDomain Code=-11828 "Cannot Open" UserInfo=0x167170 {NSLocalizedFailureReason=This media format is not supported., NSUnderlyingError=0x163a00 "The operation couldn’t be completed. (OSStatus error -12847.)", NSLocalizedDescription=Cannot Open}
Это задокументировано или где-то упоминалось?Я не могу поверить, что я действительно вынужден передавать информацию о формате файла через имя файла.Аргумент options
инициализатора AVURLAsset
выглядит как хорошее место для предоставления типа файла, но, согласно документации, поддержка этого, похоже, не поддерживается.
PS.Я проверил код, тот же файл с правильным расширением производит миниатюры очень хорошо.