Objective c 将CAF音频容器更改为mp4?

Objective c 将CAF音频容器更改为mp4?,objective-c,ios,Objective C,Ios,我需要录制可以用silverlight播放的音频文件。使用AVAudioRecorder录制的音频文件具有CAF容器。silverlight不支持此格式。是否有任何方法可以编辑音频,使其具有mp4容器,以便silverlight支持该音频。遗憾的是,没有内置的方法可以录制为mp4或将CAF转换为mp4。像我一样向苹果提交一份bug报告。好吧,我想还是有办法的。保存扩展名为.mp4的文件所需的全部操作。AVAudioRecorder根据文件路径中指定的扩展名创建容器以保存音频文件。我并不认为这很简

我需要录制可以用silverlight播放的音频文件。使用AVAudioRecorder录制的音频文件具有CAF容器。silverlight不支持此格式。是否有任何方法可以编辑音频,使其具有mp4容器,以便silverlight支持该音频。

遗憾的是,没有内置的方法可以录制为mp4或将CAF转换为mp4。像我一样向苹果提交一份bug报告。

好吧,我想还是有办法的。保存扩展名为.mp4的文件所需的全部操作。AVAudioRecorder根据文件路径中指定的扩展名创建容器以保存音频文件。我并不认为这很简单,但它工作得很完美:)

容器格式由创建AVAudioRecorder时指定的URL扩展名决定

NSString *tempDir = NSTemporaryDirectory ();
NSString *soundFilePath = [tempDir stringByAppendingString: @"sound.mp4"];    
您可以在这里看到指定的扩展名是mp4。创建记录器时,我们指定编解码器格式(此处为纯AAC):

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

如果您使用“caf”指定和扩展,那么容器将是核心音频格式,编解码器仍然是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];