Можно ли заставить AVURLAsset работать без расширения файла?

Я пытаюсь создать эскизы для видеофайлов:

- (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. Я протестировал код, тот же файл с правильным расширением отлично отображает эскизы.

14
задан zoul 15 February 2012 в 09:41
поделиться