0

我的应用程序中有一个控件,可以记录音频并保存它。我使用 AVMutableComposition 将新录音附加到旧录音,当用户准备好保存时,我正在尝试使用 AVAssetExportSession 将所有内容写入新文件。当我这样做时,我没有收到任何错误并且写入了一个文件。但是,该文件无法播放,并且我的完成块永远不会被调用。有谁知道可能是什么原因造成的?

这是代码:

        AVAssetExportSession *exportSession = [AVAssetExportSession exportSessionWithAsset:composition presetName:AVAssetExportPresetAppleM4A];
        exportSession.outputURL = URL;
        exportSession.outputFileType = AVFileTypeAppleM4A;
        exportSession.shouldOptimizeForNetworkUse = YES;
        [exportSession exportAsynchronouslyWithCompletionHandler:^{
           NSLog(@"Export Complete");
        }];

该变量composition是一个 AVMutableComposition,它添加了一个或多个 AVURLAssets(以前的或当前的记录)。

更新

我不知道这是否有帮助,但我正在使用 AVAudioRecorder 来录制音频,并且我正在使用以下设置:

[recordSetting setObject:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
[recordSetting setObject:[NSNumber numberWithFloat:44100.0] forKey: AVSampleRateKey];
[recordSetting setObject:[NSNumber numberWithInt:1] forKey:AVNumberOfChannelsKey];
[recordSetting setObject:[NSNumber numberWithInt:64000] forKey:AVEncoderBitRateKey];
[recordSetting setObject:[NSNumber numberWithInt: AVAudioQualityMedium] forKey: AVEncoderAudioQualityKey];

更新 2

我已经尝试使用从记录文件生成的 AVURLAsset 相同的代码,基本上删除了 AVMutableComposition 以确保它不是问题。它仍然无法正常工作。

对此的任何帮助将不胜感激。

4

2 回答 2

2

好吧,我想通了。当我录制音频时,我使用的是文件扩展名 .aac。但是,当我将音频导出时,我使用的是文件扩展名 .m4a。我无法将导出文件扩展名设置为 .aac(导出失败),但是当我将录制扩展名设置为 .m4a 时,一切正常。

于 2012-05-11T19:28:38.353 回答
0

您可以使用SDAVAssetExportSession使用 AAC 编码器录制到 m4a,然后在完成时将其重命名为 AAC。

于 2018-03-06T16:59:56.530 回答