我是初学者。我想写一个应用程序,它有很多活动,其中一个用于在背景上设置视频录制但在摄像机预览中。所以当我离开活动时,录音必须继续。
E / BufferQueueProducer:[SurfaceTexture-0-29154-1] dequeueBuffer:BufferQueue已被放弃 03-04 22:08:47.525 29154-29440 / com.example.hakka.androidcarhelper I / Adreno:DequeueBuffer:dequeueBuffer failed 03-04 22:08:47.525 29154-29440 / com.example.hakka.androidcarhelper E / CameraDeviceGLThread-0:GL渲染线程上收到的异常: java.lang.IllegalStateException:swapBuffers:EGL错误:0x300d 在android.hardware.camera2.legacy.SurfaceTextureRenderer.checkEglError(SurfaceTextureRenderer.java:530) 在android.hardware.camera2.legacy.SurfaceTextureRenderer.swapBuffers(SurfaceTextureRenderer.java:523) 在android.hardware.camera2.legacy.SurfaceTextureRenderer.drawIntoSurfaces(SurfaceTextureRenderer.java:727) 在android.hardware.camera2.legacy.GLThreadManager $ 1.handleMessage(GLThreadManager.java:105) 在android.os.Handler.dispatchMessage(Handler.java:98) 在android.os.Looper.loop(Looper.java:148) 在android.os.HandlerThread.run(HandlerThread.java:61)
我理解如果我尝试在不释放 surfaceTextureFromTheService 的情况下离开活动,我会做错事。 但是怎么做?我如何发布surfaceTextureFromTheService但是在我返回活动后仍然可以重新使用它?当然没有在服务中再次调用cameraDevice.createCaptureRequest 和 cameraCaptureSession.setRepeatingRequest ,因为如果MediaRecorder 正在录制我不想要每次我离开并返回活动时停止它。
我每天花费大约6天12小时来解决这个问题。但仍然没有运气。
谢谢。
答案 0 :(得分:0)
您可以在不中断录制的情况下调用setRepeatingRequest,因此当您转到后台时,请将重复请求替换为仅定位到介质记录器Surface的请求。这应该避免你看到的错误。
那就是说,回到活动并没有真正符合你的计划;如果我没记错的话,当Activity不再可见时,TextureView EGL上下文等会被拆除。而且TextureView获得了SurfaceTexture的所有权,所以一旦TextureView消失了,我就不会认为SurfaceTexture可以再次使用。
为了更灵活,您可能需要使用GLSurfaceView和一堆样板EGL构建自己的TextureView等效项;每次进入/退出Activity时,你都需要从EGL上下文中附加和分离SurfaceTexture,并处理SurfaceTexture到quad的渲染。