0%

iOS13Lame压缩录音文件为MP3格式闪退

问题描述

我们项目在语音发送用户评语时,使用了Lame三方库对客户端的pcm录音文件进行压缩,输出MP3文件。具体的Lame接入方法可以参考该文章 “iOS-Lame-Audio-transcoding“.

在iOS13的iPhoneX/iPhoneXS等iPhone机中出现录音边录边压缩时闪退的问题。

问题类型EXC_BAD_ACCESS野指正,对象过早被释放导致。

异常出现的位置在lame_encode_buffer_interleaved方法调用中,该方法为Lame提供的方法,且输入的参数也没有发现野指针存在。Zombie调试没有发现有用的信息。刚开始考虑是Lame库太老了(我们还在使用4年前的库😅),更新了Lame库没有解决问题。

尝试运行iOS-Lame-Audio-transcoding中提供的Demo,在我的设备中没有出现闪退现象。基本排除了Lame三方库的问题。

问题根源和解决办法

对比demo和项目中对Lame库的使用,意外发现了我们在**AVAudioRecorder初始化的setting**参数有一句差异,项目中多了一句

[settingDictionary setObject:@(YES) forKey:AVLinearPCMIsFloatKey];

用于设置是否使用浮点数采样。

由于打开了浮点数采样导致了Lame压缩转换MP3时出现闪退。具体Lame中为何会出现浮点数采样转换Crash原因不明。怀疑是浮点数位数或者其他一些区别,导致Lame不适配。

记录下问题解决方式,方便新手排坑,欢迎大神指点。感谢🙏

Reference

iOS-Lame-Audio-transcoding