2

我正在使用 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 但什么也不做。

4

1 回答 1

1

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

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

另外,我发现“使用-> Quicktime 打开”很有用,因为它在文件损坏时会出错,而在文件损坏时则可以正常播放。比 iTunes 默默地忽略错误更有用。

于 2013-01-09T12:56:30.027 回答