首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个以上通道的AVAssetWriterInput

两个以上通道的AVAssetWriterInput
EN

Stack Overflow用户
提问于 2018-04-07 00:31:20
回答 2查看 2.3K关注 0票数 5

有人知道如何使用多个通道的AVAssetWriterInput init吗?

我试图插入一个audioInput,以这样的方式在AVAssetWriter上添加它:

代码语言:javascript
复制
let audioInput = AVAssetWriterInput(mediaType: AVMediaTypeAudio, outputSettings: audioOutputSettings)

assetWriter.add(audioInput)

assetWriter.startWriting()

但是,当我在audioInput字典中插入包含大于2的通道数的audioOutputSettings字典时,它会崩溃。

Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ’*** -[AVAssetWriterInput initWithMediaType:outputSettings:sourceFormatHint:] 6 is not a valid channel count for Format ID ‘aac ’. Use kAudioFormatProperty_AvailableEncodeNumberChannels (<AudioToolbox/AudioFormat.h>) to enumerate available channel counts for a given format.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-11 11:40:06

正如您在AVAssetWriterInput评论中所发现的那样:

如果AVNumberOfChannelsKey指定的信道计数大于2,则字典还必须为AVChannelLayoutKey指定一个值。

它没有提到的是通道计数取决于您的格式ID,因此传递一个AudioChannelLayout不会使AAC支持除1或2个通道之外的任何东西。

支持6个频道的格式包括LPCM kAudioFormatLinearPCM,可能更有趣的是,支持2、4、6和8声道音频的高效率AAC (kAudioFormatMPEG4AAC_HE)。

下面的代码创建了一个为6通道AAC示例缓冲区准备好的AVAssetWriterInput

代码语言:javascript
复制
var channelLayout = AudioChannelLayout()
channelLayout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_5_1_D

let audioOutputSettings: [String : Any] = [
    AVNumberOfChannelsKey: 6,

    AVFormatIDKey: kAudioFormatMPEG4AAC_HE,
    AVSampleRateKey: 44100,
    AVChannelLayoutKey: NSData(bytes: &channelLayout, length: MemoryLayout.size(ofValue: channelLayout)),
]
let audioInput = AVAssetWriterInput(mediaType: .audio, outputSettings: audioOutputSettings)
票数 6
EN

Stack Overflow用户

发布于 2020-05-07 21:13:22

更改这两行:

代码语言:javascript
复制
channelLayout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_2_0
AVNumberOfChannelsKey : 2,

我希望它在我的代码中对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49702643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档