LoginSignup
3
3

More than 5 years have passed since last update.

AVFoundation が対応する拡張子を集合形式で取得する

Last updated at Posted at 2015-02-15

AVFoundation が対応する種類は [AVURLAsset audiovisualTypes] で取得できるが、UTI 形式なのでこれを拡張子として取得するコードを書く

実装

UTTypeCopyPreferredTagWithClass で UTI から拡張子を取得できるので、[AVURLAsset audiovisualTypes] からそれぞれ UTI を拡張子に変換して集合にする

/* ARC 前提 */
static NSSet *supportedExtensionsByAVFoundation() {
    NSArray *supportedUTITypes = [AVURLAsset audiovisualTypes];
    NSMutableSet *supportedExtensions = [NSMutableSet setWithCapacity:[supportedUTITypes count]];
    for (NSString *supportedUTI in supportedUTITypes) {
        /* UTI 形式から拡張子を取得 */
        NSString *extension = (__bridge_transfer NSString *) UTTypeCopyPreferredTagWithClass((__bridge CFStringRef) supportedUTI, kUTTagClassFilenameExtension);
        if (extension != nil) {
            [supportedExtensions addObject:extension];
        }
    }
    return supportedExtensions;
}

この場合音声形式と動画形式両方取得出来てしまうので、どちらか片方のみにしたい場合は UTTypeConformsTo を使う

/* 取得した UTI は動画形式であるか? */
UTTypeConformsTo((__bridge CFStringRef) supportedUTI, kUTTypeVideo);
/* 取得した UTI は音声形式であるか? */
UTTypeConformsTo((__bridge CFStringRef) supportedUTI, kUTTypeAudio);

iOS で使う場合は MobileCoreServices.framework をリンクする必要がある

Apple が提供する UTI について

UTI (Uniform Type Identifiers) とは Apple が採用する MIME の代替として作られた識別子の形式であり、UTTypeConformsTo からわかる通り継承の概念を持つ

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3