3

iPhone アプリの .mp3 ファイルからメタデータ情報を抽出しようとしています。私はこのAVAssetように使用しようとしました.それは機能しませんでした.共通のメタデータは空です. しかし、Audacity とアプリ ストアの別の iOS アプリは、メタ データの詳細を取得できます。どうしてか分かりません?。

AudioToolBoxそのため、フレームワーク を使用して以下のコードで同じものを抽出しようとしました

    CFDictionaryRef piDict = nil;
    UInt32 piDataSize = sizeof(piDict);

    //  Populates a CFDictionary with the ID3 tag properties
    err = AudioFileGetProperty(fileID, kAudioFilePropertyInfoDictionary, &piDataSize, &piDict);
    if(err != noErr) {
        NSLog(@"AudioFileGetProperty failed for property info dictionary");
        return nil;
    }

    //  Toll free bridge the CFDictionary so that we can interact with it via objc
    NSMutableDictionary* nsDict = [(__bridge NSDictionary*)piDict mutableCopy];

これにより、アルバム アート以外のすべてが返されました。でアルバムアートを抽出しようとすると、kAudioFilePropertyAlbumArtworkエラーosstatus(操作を完了できませんでした)が発生しました。

ObjC最後に、 libId3(ここにあります)のラッパーで運試しをしました。それは完全にうまくいきました。作品を手に入れることができました。

私の質問は、なぜAVAssetデータを取得できなかったのですか?. 私はそこに何が欠けていますか?. 誰かがそれを機能させることができましたか?. サンプルをいただければ幸いです。

kAudioFilePropertyAlbumArtwork抽出を完了できなかったのはなぜですか?. 両方の問題は、私が持っていたすべての .mp3 ファイルで発生しました。

ソリューションの更新:

AVAssetを使用して URL を作成したため、うまくいきませんでした

 [NSURL URLWithString:[filePath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]

それよりも

    NSURL *fileURL = [NSURL fileURLWithPath:filePath];
4

2 に答える 2

1
NSURL *fileURL1 = [NSURL fileURLWithPath:url];
AVAsset *asset = [AVAsset assetWithURL:fileURL1];


for (AVMetadataItem *metadataItem in asset.commonMetadata) {
    if ([metadataItem.commonKey isEqualToString:@"artwork"]){
        NSDictionary *imageDataDictionary = (NSDictionary *)metadataItem.value;
        NSData *imageData = [imageDataDictionary objectForKey:@"data"];
        UIImage *image = [UIImage imageWithData:imageData];
        imageThumb.image = image;
    }
}
于 2014-03-24T12:34:04.357 に答える