问题描述
我正在使用 MediaRecorder API 在我的 android 应用中实现视频录制功能。
我正在关注 MediaRecorder 的 Android 文档并且它工作正常。现在,我想要暂停视频录制,当视频录制正在进行时,来电、闹钟、应用程序等中断最小化条件。 & 我将有一个恢复按钮来恢复录音从中断阶段返回应用程序后(通话结束后)。这适用于大多数中断场景,例如最小化应用程序并重新打开、音频通话、whats 应用音频通话、警报等,但 whatsapp 视频通话 存在问题。
以下是问题的步骤。
- 开始视频录制
- 用 whatsapp 视频通话打断。接听视频电话。
- 通话结束后使用恢复按钮恢复视频录制。
在此阶段,视频录制中的视频在恢复后会冻结。但音频正在被录制。如果,我尝试使用停止按钮应用程序在 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 (将#修改为@)