android camera2 api MediaRecorder 停止()错误
android camera2 api MediaRecorder stop() error
我是 android 的新手,我正在尝试使用 android camera2 api 创建一个简单的录像机应用程序。按照 youtube 上的教程,我设法在 TextureView 中预览相机并开始使用 MediaRecorder 进行捕捉,但我在停止录像机并将视频保存到我的设备存储时遇到了问题。
此错误出现在 MediaRecorder.stop()
W/Adreno-EGLSUB: : dequeue native buffer fail: No such device, buffer=0x0, handle=0x0
W/Adreno-EGL: : EGL_BAD_SURFACE
E/CameraDeviceGLThread-0: Received exception on GL render thread:
java.lang.IllegalStateException: swapBuffers: EGL error: 0x300d
at android.hardware.camera2.legacy.SurfaceTextureRenderer.checkEglError(SurfaceTextureRenderer.java:544)
at android.hardware.camera2.legacy.SurfaceTextureRenderer.swapBuffers(SurfaceTextureRenderer.java:537)
at android.hardware.camera2.legacy.SurfaceTextureRenderer.drawIntoSurfaces(SurfaceTextureRenderer.java:741)
at android.hardware.camera2.legacy.GLThreadManager.handleMessage(GLThreadManager.java:105)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:148)
at android.os.HandlerThread.run(HandlerThread.java:61)
I/CameraDeviceState: Legacy camera service transitioning to state ERROR
我正在使用 Android 6.0 api23 设备来 运行 应用程序。
谢谢
编辑:
这是停止录音功能。
try{
previewSession.stopRepeating();
previewSession.abortCaptures();
}catch(CameraAccessException e){
e.printStackTrace();
}
recorder.stop();
recorder.reset();
isRecording = false;
Toast.makeText(getApplicationContext(),"Recording Stopped",Toast.LENGTH_SHORT).show();
...根据@NewOne 的回答,我在 recorder.stop() 之前包含了 try catch 然后我有一个新的错误
--------- beginning of crash E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.tingker.daryl.camera2, PID: 9014
Theme: themes:{default=overlay:com.cyngn.hexo, iconPack:com.cyngn.hexo, fontPkg:com.cyngn.hexo,
com.android.systemui=overlay:com.cyngn.hexo,
com.android.systemui.navbar=overlay:com.cyngn.hexo}
java.lang.IllegalStateException: Session has been closed; further changes are illegal.
at android.hardware.camera2.impl.CameraCaptureSessionImpl.checkNotClosed(CameraCaptureSessionImpl.java:606)
at android.hardware.camera2.impl.CameraCaptureSessionImpl.stopRepeating(CameraCaptureSessionImpl.java:272)
at com.tingker.daryl.camera2.MainActivity.onClick(MainActivity.java:121)
at android.view.View.performClick(View.java:5204)
at android.view.View$PerformClick.run(View.java:21158)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5461)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
目前我不知道你的停止录音方法是什么。如果您可以分享,也许我可以提供更好的帮助。无论如何,在调用停止方法之前,请确保您有以下代码行。
private void stopRecording()) {
.....
try {
preview.stopRepeating();
preview.abortCaptures();
} catch (CameraAccessException e) {
e.printStackTrace();
}
try{
mediaRecorder.stop();
}catch(RuntimeException e){
//handle the exception
}
mediaRecorder.reset();
......
}
检查此 link。如果您在启动记录器后立即停止它,您可能会捕获异常。
我是 android 的新手,我正在尝试使用 android camera2 api 创建一个简单的录像机应用程序。按照 youtube 上的教程,我设法在 TextureView 中预览相机并开始使用 MediaRecorder 进行捕捉,但我在停止录像机并将视频保存到我的设备存储时遇到了问题。
此错误出现在 MediaRecorder.stop()
W/Adreno-EGLSUB: : dequeue native buffer fail: No such device, buffer=0x0, handle=0x0 W/Adreno-EGL: : EGL_BAD_SURFACE E/CameraDeviceGLThread-0: Received exception on GL render thread: java.lang.IllegalStateException: swapBuffers: EGL error: 0x300d at android.hardware.camera2.legacy.SurfaceTextureRenderer.checkEglError(SurfaceTextureRenderer.java:544) at android.hardware.camera2.legacy.SurfaceTextureRenderer.swapBuffers(SurfaceTextureRenderer.java:537) at android.hardware.camera2.legacy.SurfaceTextureRenderer.drawIntoSurfaces(SurfaceTextureRenderer.java:741) at android.hardware.camera2.legacy.GLThreadManager.handleMessage(GLThreadManager.java:105) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:148) at android.os.HandlerThread.run(HandlerThread.java:61) I/CameraDeviceState: Legacy camera service transitioning to state ERROR
我正在使用 Android 6.0 api23 设备来 运行 应用程序。
谢谢
编辑: 这是停止录音功能。
try{
previewSession.stopRepeating();
previewSession.abortCaptures();
}catch(CameraAccessException e){
e.printStackTrace();
}
recorder.stop();
recorder.reset();
isRecording = false;
Toast.makeText(getApplicationContext(),"Recording Stopped",Toast.LENGTH_SHORT).show();
...根据@NewOne 的回答,我在 recorder.stop() 之前包含了 try catch 然后我有一个新的错误
--------- beginning of crash E/AndroidRuntime: FATAL EXCEPTION: main Process: com.tingker.daryl.camera2, PID: 9014 Theme: themes:{default=overlay:com.cyngn.hexo, iconPack:com.cyngn.hexo, fontPkg:com.cyngn.hexo, com.android.systemui=overlay:com.cyngn.hexo, com.android.systemui.navbar=overlay:com.cyngn.hexo} java.lang.IllegalStateException: Session has been closed; further changes are illegal. at android.hardware.camera2.impl.CameraCaptureSessionImpl.checkNotClosed(CameraCaptureSessionImpl.java:606) at android.hardware.camera2.impl.CameraCaptureSessionImpl.stopRepeating(CameraCaptureSessionImpl.java:272) at com.tingker.daryl.camera2.MainActivity.onClick(MainActivity.java:121) at android.view.View.performClick(View.java:5204) at android.view.View$PerformClick.run(View.java:21158) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5461) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
目前我不知道你的停止录音方法是什么。如果您可以分享,也许我可以提供更好的帮助。无论如何,在调用停止方法之前,请确保您有以下代码行。
private void stopRecording()) {
.....
try {
preview.stopRepeating();
preview.abortCaptures();
} catch (CameraAccessException e) {
e.printStackTrace();
}
try{
mediaRecorder.stop();
}catch(RuntimeException e){
//handle the exception
}
mediaRecorder.reset();
......
}
检查此 link。如果您在启动记录器后立即停止它,您可能会捕获异常。