iOS 8 中的 AVAudioRecorder 不处理 kAudioFormatMPEG4AAC

Posted

技术标签:

【中文标题】iOS 8 中的 AVAudioRecorder 不处理 kAudioFormatMPEG4AAC【英文标题】:AVAudioRecorder in iOS 8 does not handle kAudioFormatMPEG4AAC 【发布时间】:2014-11-27 21:03:39 【问题描述】:

我的代码在 ios 8 kAudioFormatMPEG4AAC 之前运行良好,但现在它创建了一个空文件。没有错误报告。当我将其更改为 kAudioFormatLinearPCM 时,它可以工作。这是我的代码:

recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSNumber numberWithInt:AVAudioQualityMin], AVEncoderAudioQualityKey,
    [NSNumber numberWithInt: kAudioFormatLinearPCM], AVFormatIDKey,
    [NSNumber numberWithInt:16], AVEncoderBitRateKey,
    [NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
    [NSNumber numberWithFloat:32000.0], AVSampleRateKey,
    nil];

【问题讨论】:

【参考方案1】:

请从您的设置字典中删除 AVEncoderBitRateKey 键,它将在带有 kAudioFormatMPEG4AAC 的 iOS8 上运行。

这可能是AVEncoderBitRateKeyAVNumberOfChannelsKey 之间的特定关联。但我没有使用参数,而是使用默认比特率值来获得工作记录器。

【讨论】:

【参考方案2】:

即使kAudioFormatMPEG4AAC(每秒 16 字节),比特率看起来低得令人怀疑,也许尝试 16000 或 64000 或更高。

附言为您的 NSDictionarysNSArraysNSNumbers 尝试新的 Objective-C 文字,我认为它们是一种改进:

recordSettings = @
    AVEncoderAudioQualityKey : AVAudioQualityMin,
    AVFormatIDKey : @(kAudioFormatLinearPCM),
    AVEncoderBitRateKey : @16000,
    AVNumberOfChannelsKey : @1,
    AVSampleRateKey : @32000
; 

【讨论】:

使用 kAudioFormatLinearPCM,我的 AVAudioRecorder 无法进行录音。

以上是关于iOS 8 中的 AVAudioRecorder 不处理 kAudioFormatMPEG4AAC的主要内容,如果未能解决你的问题,请参考以下文章

iOS:AVAudioRecorder.prepareToRecord() 失败且没有错误

iOS开发简记:录音AVAudioRecorder

iOS音频与视频的开发- 使用AVAudioRecorder进行录制音频

为啥 deleteRecording 崩溃(AVAudioRecorder,iOS)?

IOS 录音(AVAudioRecorder)

iOS上的AVAudioRecorder错误“不支持播放数据格式”?