在播放背景音乐的场景下,录制语音消息 duration 返回负数

描述

该问题已在 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 在录制语音消息时,会修改 AVAudioSessionAVAudioSessionCategoryPlayAndRecord。如遇到此问题,请升级至最新版本。

升级至 IMKit 5.4.2 后,在播放背景音乐的场景下,使用 IMKit 录制语音的方案如下:

  1. 监听 IMKit 开始录制语音消息的事件。

  2. 因为播放器占用了 AVAudioSession 权限,必须由 App 暂停或停止对 AVAudioSession 的使用,再设置 AVAudioSessionactiveNO

    如果不执行此步骤,音乐播放器会报错 : “Deactivating an audio session that has running I/O. All I/O should be stopped or paused prior to deactivating the audio session.”

  3. 监听录制语音消息录制完成的事件,并恢复播放器播放。

/**
 输入工具栏的点击监听器
 */
@protocol RCChatSessionInputBarControlDelegate <NSObject>

/**
 即将开始录制语音消息
 返回 YES:继续录音
 返回 NO:停止录音(音频配占用时,可以处理弹窗等)
 */
- (BOOL)recordWillBegin;

/**
 取消录制语音消息
 */
- (void)recordDidCancel;

/**
 结束录制语音消息
 */
- (void)recordDidEnd:(NSData *)recordData duration:(long)duration error:(NSError *)error;

@end

链接

追踪记录

  • 工单号:
  • Jira 号: IMSDK-10973

更多支持

如有疑问,欢迎提交工单