使用AudioConverter将PCM转换为AAC并使用AVAssetWriter写入.mp4文件时音频失真。

问题描述 投票:0回答:1
我正在尝试压缩AVCaptureSession的输入并将其保存到.mp4文件。我已经成功转换和保存了视频,但是在音频方面遇到了麻烦。

我已经达到使用https://github.com/nevyn/LBMediaToolkit转换音频的地步。我可以将转换后的CMSampleBuffer保存为.mp4,但在iPhone上播放时,音频声音会失真。

奇怪的是,在QuickTime中播放时音频也听起来失真,但是在通过Web浏览器播放时听起来不错。单击here下载示例文件。

我认为我正在将正确的格式传递给转换器:

let asbd = AudioStreamBasicDescription( mSampleRate: 44_100, mFormatID: kAudioFormatMPEG4AAC, mFormatFlags: UInt32(MPEG4ObjectID.AAC_LC.rawValue), mBytesPerPacket: 0, mFramesPerPacket: 1024, mBytesPerFrame: 0, mChannelsPerFrame: 2, mBitsPerChannel: 0, mReserved: 0) return LBAudioConverter(convertingTo: asbd)

我不确定音频转换或写入文件是否有问题。这是一个仅包含音频的示例项目的链接:https://github.com/gaperlinski/AudioConversion(按照README.MD中的说明重现该问题)

是否有明显的我做错的事情导致音频听起来失真?

我正在尝试压缩来自AVCaptureSession的输入并将其保存到.mp4文件。我设法转换并保存了视频,但是音频遇到了麻烦。我已经达到了使用https:// ...

ios audio avcapturesession avassetwriter audiotoolbox
1个回答
0
投票
[我注意到,当我为CMSampleBuffer创建格式说明时,我应该只将magicCookie添加到

第一个样本缓冲区,或者甚至应该在没有数据的样本缓冲区中发送它。

如果我这样做,则音频不会失真,mp4文件容器中只有一个esds原子。
© www.soinside.com 2019 - 2024. All rights reserved.