Мое приложение представляет собой средство просмотра для пользовательского формата, zip-файла с четко определенным XML-манифестом и ресурсами, такими как изображения и фильмы. Я использую zlib, чтобы открыть zip-файл в памяти и затем перейти к отображению указанных ресурсов.
Одна проблема, с которой я столкнулся, заключается в том, что я не могу правильно отображать видео, очевидно, потому что QTMovie не может определить тип пантомимы. Фильм, загруженный из файла ([QTMovie movieWithFile]), работает отлично. Загруженный из памяти ([QTMovie movieWithData]) отказывается работать.
Это имеет смысл, поскольку из-за отсутствия расширения файла QTMovie не может определить информацию типа mime. После небольшого поиска я прибег к использованию QTDataReference следующим образом:
NSData *movieData = ...read from memory...;
QTDataReference *movieDataReference = [[QTDataReference alloc] initWithReferenceToData:movieData name:fileName MIMEType:@"video/x-m4v"];
QTMovie *mov = [QTMovie movieWithDataReference:movieDataReference error:&err];
Это хорошо работает, однако жесткое кодирование MIMEType далеко от идеала. У меня есть доступ к имени файла и расширению, поэтому я попытался найти MIME-тип с помощью UTI (спасибо замечательным людям из #macdev):
- (NSString*)mimeTypeForExtension:(NSString*)ext {
CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,(CFStringRef)ext,NULL);
return NSMakeCollectable(UTTypeCopyPreferredTagWithClass((CFStringRef)UTI,kUTTagClassMIMEType));
}
Это, однако, не работает. Очевидно, что где-то есть внутренняя база данных расширений OS X и соответствующих типов MIME. В противном случае фильмы с диска не будут работать. Как мне получить к нему доступ?
Спасибо!