收藏
回答

微信小程序后台录音被相机/息屏/来电等场景中断后,未触发事件回调是否有解决办法?

我们的小程序在服务过程中需要使用 RecorderManager 进行长时间录音,并开启了后台录音能力。当前遇到一个问题:

小程序后台录音中,用户打开相机/选择图片、息屏、接打电话等场景后,录音可能实际停止,但 RecorderManager 没有触发任何可用事件回调,导致业务侧无法及时感知并处理。

目前已监听:

  • onStart
  • onStop
  • onPause
  • onError
  • onInterruptionBegin
  • onInterruptionEnd
  • onFrameRecorded

实际现象:

  1. 录音开始后,onStart 正常触发。
  2. 正常录音时,onFrameRecorded 正常回调并生成切片。
  3. 打开相机/选择图片、息屏、接打电话等场景后,录音不再产生 onFrameRecorded,服务端也收不到后续切片。
  4. 但此时没有触发 onStoponErroronPauseonInterruptionBeginonInterruptionEnd
  5. 回到小程序后,页面上的计时仍可能继续,但底层录音实际已经停止/没有音频帧。

想请教:

  • 这种“底层录音停止但 RecorderManager 没有任何事件回调”的情况是否符合预期?
  • 后台录音被相机/选择图片、息屏、来电等场景中断,是否有官方推荐的检测或恢复方式?
  • onInterruptionBegin/onInterruptionEnd 是否应该覆盖相机、息屏、来电等导致的录音中断?
  • 如果没有任何事件回调,是否只能通过业务侧检测 onFrameRecorded 长时间没有回调来判断录音异常?
  • 对于长时间后台录音场景,官方是否有推荐的最佳实践或规避方案?

我们当前只能考虑通过检测长时间没有收到 onFrameRecorded 来提示用户手动继续录音,但这个方案不够可靠,也不确定是否符合官方建议。希望能得到官方确认或推荐处理方式。


1. 完整报错信息

目前没有收到明确报错信息。

我们已监听 RecorderManager 的以下事件:

const recorderManager = wx.getRecorderManager();

recorderManager.onStart(() => {

console.log('recorder onStart');

});

recorderManager.onFrameRecorded((res) => {

console.log('recorder onFrameRecorded', res.frameBuffer?.byteLength, res.isLastFrame);

});

recorderManager.onStop((res) => {

console.log('recorder onStop', res);

});

recorderManager.onPause(() => {

console.log('recorder onPause');

});

recorderManager.onError((err) => {

console.log('recorder onError', err);

});

recorderManager.onInterruptionBegin(() => {

console.log('recorder onInterruptionBegin');

});

recorderManager.onInterruptionEnd(() => {

console.log('recorder onInterruptionEnd');

});

实际问题场景下:

  • onStart 正常触发。
  • 正常录音时 onFrameRecorded 正常触发。
  • 打开相机/选择图片/息屏/来电等场景后,onFrameRecorded 不再触发。
  • 没有触发 onStop
  • 没有触发 onError
  • 没有触发 onPause
  • 没有触发 onInterruptionBegin/onInterruptionEnd
  • 因此没有完整错误信息或 errMsg 可提供。

2. 问题触发流程

复现流程如下:

  1. 小程序开启后台录音能力。
  2. 页面中通过 wx.getRecorderManager() 获取录音管理器。
  3. 调用 recorderManager.start() 开始录音。
  4. 设置 frameSize,通过 onFrameRecorded 接收录音帧并上传切片。
  5. 录音开始后,onStart 正常触发,onFrameRecorded 正常持续回调。
  • 保持录音中,触发以下任一场景:打开相机或选择图片。
  • 息屏一段时间。
  • 接到电话或进行通话。
  1. 回到小程序后,发现 onFrameRecorded 不再回调,服务端也收不到后续录音切片。
  2. onStop/onError/onPause/onInterruptionBegin/onInterruptionEnd 均未触发,业务侧无法判断录音已经停止。

补充说明:

我们想确认的是:在后台长时间录音场景下,如果录音被相机/选择图片/息屏/来电等系统行为中断,但 RecorderManager 没有触发任何事件回调,是否有官方推荐的检测或恢复方式?目前业务侧只能通过“长时间没有收到 onFrameRecorded”来推断录音异常,但这种方式不够可靠。



最后一次编辑于  06-03
回答关注问题邀请回答
收藏

1 个回答

  • 智能回答 智能回答 本次回答由AI生成
    06-02
    有用
    回复
登录 后发表内容