我正在使用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但不执行任何操作。
答案 0 :(得分:0)
我有一个类似的问题,我的输出m4a文件有白色图标(而不是黑色),不会播放。虽然那是我从原始样本数据创建原始源文件的时候,而不是在向其添加元数据时。
我的问题是我没有在我的代码中关闭导出的文件(我只是在调用close函数之前终止了应用程序)。一旦我调用了close函数,它就开始工作了。你可能想检查一下。
另外,我发现“open with-> Quicktime”很有用,因为它在文件损坏时会出错,而在文件损坏时会播放它。比iTunes默默地忽略错误更有用。