将CAF音频容器更改为mp4?

时间:2011-05-12 22:08:19

标签: objective-c ios

我需要录制可以用silverlight播放的音频文件。使用AVAudioRecorder录制的音频文件具有CAF容器。 silverlight不支持此格式。有没有办法编辑音频,以便它有mp4容器,以便Silverlight支持它。

3 个答案:

答案 0 :(得分:7)

容器格式由您在创建AVAudioRecorder时指定的URL的扩展名确定。

NSString *tempDir = NSTemporaryDirectory ();
NSString *soundFilePath = [tempDir stringByAppendingString: @"sound.mp4"];    

您可以在此处看到指定的扩展名为mp4。在创建记录器时,我们指定编解码器格式(这里是简单的AAC):

 [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryRecord error: nil];


    NSDictionary *recordSettings = [[NSDictionary alloc] initWithObjectsAndKeys:
                                    [NSNumber numberWithFloat: 32000], AVSampleRateKey,
                                    [NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey,
                                    [NSNumber numberWithInt: 1], AVNumberOfChannelsKey,

                                    nil];

    AVAudioRecorder *newRecorder = [[AVAudioRecorder alloc] initWithURL: soundFilePath settings: recordSettings error: nil];
    [recordSettings release];
    self.soundRecorder = newRecorder;
    [newRecorder release];

    soundRecorder.delegate = self;
    [soundRecorder prepareToRecord];
    [soundRecorder recordForDuration:60];

生成的文件将是“ISO Media,MPEG v4系统,版本2”容器中的AAC压缩流(从iOS 5.0开始)。

如果您使用“caf”指定和扩展,那么容器将是Core Audio Format,编解码器仍将是AAC。

答案 1 :(得分:2)

嗯,我想毕竟有办法。保存扩展名为.mp4的文件所需的全部内容。 AVAudioRecorder根据文件路径中指定的扩展名创建容器以保存音频文件。我没想到它只是那么容易,但它完美无缺:)

答案 2 :(得分:0)

可悲的是,没有内置的方法可以记录为mp4或将CAF转换为mp4。像我一样向Apple提交错误报告。