私のアプリケーションは、カスタム形式のビューアーであり、明確に定義された XML マニフェストとリソース (画像や動画など) を含む zip ファイルです。zlib を使用してメモリ内の zip ファイルを開き、リソースの表示に進みます。
私が遭遇した問題の 1 つは、どうやら QTMovie が MIME タイプを判別できないため、ビデオを適切に表示できないことです。ファイルからロードされたムービー ([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 のハードコーディングは理想とはほど遠いものです。ファイル名と拡張子にアクセスできるので、UTI を使用して MIME タイプを見つけようとしました (#macdev の親切な方々に感謝します)。
- (NSString*)mimeTypeForExtension:(NSString*)ext {
CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,(CFStringRef)ext,NULL);
return NSMakeCollectable(UTTypeCopyPreferredTagWithClass((CFStringRef)UTI,kUTTagClassMIMEType));
}
ただし、これは機能しません。明らかに、拡張機能と対応する MIME タイプの内部 OS X データベースがどこかにあります。そうしないと、ディスクからのムービーは機能しません。どうすればアクセスできますか?
ありがとう!