描述
该问题已在 IMKit SDK 5.4.2 版本上修复。
App 集成 IMKit SDK < 5.4.2,在有背景音乐的场景里面发送语音消息时, 语音消息 duration 返回负数。
分析(根因分析、需求分析)
当前音乐播放器正在占用 AVAudioSession
的 category , IMKit SDK 在录制语音消息时会将 AVAudioSession
的 category 设置为 AVAudioSessionCategoryRecord
,导致录制结果出错。
解决方案
IMKit 在 SDK 5.4.2 版本修复了该问题。在 5.4.2 及之后版本上,IMKit 在录制语音消息时,会修改 AVAudioSession
为 AVAudioSessionCategoryPlayAndRecord
。如遇到此问题,请升级至最新版本。
升级至 IMKit 5.4.2 后,在播放背景音乐的场景下,使用 IMKit 录制语音的方案如下:
-
监听 IMKit 开始录制语音消息的事件。
-
因为播放器占用了
AVAudioSession
权限,必须由 App 暂停或停止对AVAudioSession
的使用,再设置AVAudioSession
的active
为NO
。如果不执行此步骤,音乐播放器会报错 : “Deactivating an audio session that has running I/O. All I/O should be stopped or paused prior to deactivating the audio session.”
-
监听录制语音消息录制完成的事件,并恢复播放器播放。
/**
输入工具栏的点击监听器
*/
@protocol RCChatSessionInputBarControlDelegate <NSObject>
/**
即将开始录制语音消息
返回 YES:继续录音
返回 NO:停止录音(音频配占用时,可以处理弹窗等)
*/
- (BOOL)recordWillBegin;
/**
取消录制语音消息
*/
- (void)recordDidCancel;
/**
结束录制语音消息
*/
- (void)recordDidEnd:(NSData *)recordData duration:(long)duration error:(NSError *)error;
@end
链接
追踪记录
- 工单号:
- Jira 号: IMSDK-10973
更多支持
如有疑问,欢迎提交工单。