通过AVAssetExportSession将元数据添加到AAC M4A

时间:2012-08-12 00:01:00

标签: iphone ios avaudiorecorder avassetexportsession

我正在使用AVAudioRecorder创建和存储AAC编码的.m4a文件。这样可以生成可播放的.m4a文件。我想然后使用AVAssetExportSession来处理文件,以便向文件添加元数据。下面的代码生成一个类似大小的.m4a文件(比源少1 KB),但是当它播放时,只有静音。

NSURL* url = [NSURL fileURLWithPath:self.m4aPath];
AVURLAsset* asset = [AVAsset assetWithURL:url];
AVMutableMetadataItem* t = [AVMutableMetadataItem metadataItem];
t.key = AVMetadataCommonKeyTitle;
t.keySpace = AVMetadataKeySpaceCommon;
t.value = @"Unit Test";
NSArray* metadata = [NSArray arrayWithObject:t];

AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetAppleM4A];

exportSession.outputURL = [NSURL fileURLWithPath:[[NSFileManager  rawRecordingsDirectory] stringByAppendingPathComponent:@"test.m4a"]];
exportSession.outputFileType = AVFileTypeAppleM4A;
exportSession.metadata = metadata;

[exportSession exportAsynchronouslyWithCompletionHandler:^{....}];

另外一条信息:当我在Finder中查看源文件和导出文件时,源文件具有黑色iTunes图标,而导出的文件具有白色iTunes图标。不确定这在实践中意味着什么,但希望它可能有所帮助。此外,双击源将其添加到iTunes并开始播放,同时双击导出打开iTunes但不执行任何操作。

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题,我的输出m4a文件有白色图标(而不是黑色),不会播放。虽然那是我从原始样本数据创建原始源文件的时候,而不是在向其添加元数据时。

我的问题是我没有在我的代码中关闭导出的文件(我只是在调用close函数之前终止了应用程序)。一旦我调用了close函数,它就开始工作了。你可能想检查一下。

另外,我发现“open with-> Quicktime”很有用,因为它在文件损坏时会出错,而在文件损坏时会播放它。比iTunes默默地忽略错误更有用。