Android MediaRecorder.resume() 在暂停视频通话后不起作用

问题描述

我正在使用 MediaRecorder API 在我的 android 应用中实现视频录制功能

我正在关注 MediaRecorder 的 Android 文档并且它工作正常。现在,我想要暂停视频录制,当视频录制正在进行时,来电、闹钟、应用程序等中断最小化条件。 & 我将有一个恢复按钮来恢复录音从中断阶段返回应用程序后(通话结束后)。这适用于大多数中断场景,例如最小化应用程序并重新打开、音频通话、whats 应用音频通话、警报等,但 whatsapp 视频通话 存在问题。

以下是问题的步骤。

  1. 开始视频录制
  2. 用 whatsapp 视频通话打断。接听视频电话。
  3. 通话结束后使用恢复按钮恢复视频录制。

在此阶段,视频录制中的视频在恢复后会冻结。但音频正在被录制。如果,我尝试使用停止按钮应用程序在 mMediaRecorder.stop() 处被挂起来停止录制。如果用户接听该电话,则只有在传入视频电话的情况下才会出现此问题。如果呼叫被拒绝,则视频录制正常。

以下是代码片段。

onPause()暂停视频录制的活动

 public void onPause() {
    try {
       if (mMediaRecorder != null && mMediaRecorder.getState() == MYMediaRecorder.RECORDING_STATE) {
          mMediaRecorder.pause();
          mMediaRecorder.setState(MYMediaRecorder.PAUSED_STATE);
       }
    } catch (Exception e) {

        mMediaRecorder.setState(MYMediaRecorder.ERROR_STATE);
        Log.e("Exception : " + e.getMessage());
    }
}

使用上面的代码片段,当有来电、闹钟、应用程序最小化等中断时,视频录制会暂停。

中断恢复视频录制后,我在屏幕上有一个恢复按钮 需要用户点击。

下面是onResume

中的代码片段
public void onResume() {
    openCamera();
    startCameraPreview();
}

以下是恢复视频录制

代码片段
public void resumeRecording() {
    if (mMediaRecorder == null || mMediaRecorder.getState() != MYMediaRecorder.PAUSED_STATE)
        return;
    try {
        mMediaRecorder.resume();
        mMediaRecorder.setState(MYMediaRecorder.RECORDING_STATE);

    } catch (Exception e) {

        mMediaRecorder.setState(MYMediaRecorder.ERROR_STATE);
        Log.info("Exception : " + e.getMessage());
    }
}

以下是恢复视频录制

代码片段
public void stopRecording() {
    stopMediaRecorder();
    releaseMediaRecorder();
 }

 private void stopMediaRecorder() {

    try {
        mMediaRecorder.stop();   // App getting hanged here after video call
        mMediaRecorder.reset();
        mMediaRecorder.setState(MYMediaRecorder.INITIAL_STATE);

    } catch (Exception e) {

        Log.e("Exception in stopMediaRecorder() : " + e.getMessage());
        if (mMediaRecorder != null) {
            mMediaRecorder.setState(MYMediaRecorder.ERROR_STATE);
        }
    }
}

private void releaseMediaRecorder() {

    if (mMediaRecorder != null) {
        mMediaRecorder.release();
        mMediaRecorder.setState(MYMediaRecorder.RELEASED_STATE);
        mMediaRecorder = null;
    }
}

请帮我找出我遗漏了什么。如果需要任何其他信息,也请告诉我。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)