2016-10-05 3 views
0

나는 안드로이드에서 아주 새로운데, 나는 안드로이드 camera2 API를 사용하여 간단한 비디오 레코더 애플 리케이션을 만들려고 노력하고있다. YouTube 튜토리얼을 따라 TextureView에서 카메라를 미리보고 MediaRecorder로 캡처를 시작했지만 레코더를 중지하고 비디오를 장치 저장소에 저장하는 데 문제가 있습니다. 나는 응용 프로그램을 실행하는 안드로이드 6.0 api23 장치를 사용하고android camera2 api MediaRecorder stop() error

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$1.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

이 오류는() MediaRecorder.stop에 나타납니다.

감사

편집 : 다음은 stopRecording 기능입니다.

   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의 답변에 따라, 그때 나는, 현재, 나도 몰라

--------- 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$2.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)

답변

1

새로운 오류가)합니다 (recorder.stop 전에 시도 캐치를 포함 무엇 당신의 정지 기록 방법에 있습니다. 공유 할 수 있다면, 내가 더 잘 할 수 있습니다. 어쨌든 stop 메서드를 호출하기 전에 아래 코드 줄이 있는지 확인하십시오.

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. 레코더를 시작한 직후에 레코더를 중지하면 예외가 발생할 수 있습니다.

+0

레코더를 시작한 직후에 stop 메서드를 호출합니까? 이것은 안드로이드 개발자 웹 사이트에서 온 것입니다 : stop()이 호출 될 때 유효한 오디오/비디오 데이터가 수신되지 않으면 RuntimeException이 의도적으로 응용 프로그램에 던져집니다. 이것은 stop()이 start() 바로 다음에 호출되면 발생합니다. 오류가 발생하면 출력 파일이 제대로 구성되지 않아 응용 프로그램에서 출력 파일 정리 작업 (예 : 출력 파일 삭제)을 수행 할 수 있습니다. 제 편집 된 답변을 참조하십시오 – NewOne

+1

안녕하세요, 고맙습니다. 두 개의 CameraCaptureSession이 내 코드에서 설정되었음을 알았습니다. 카메라 미리보기를 설정하고 다른 하나는 미디어 레코더를 시작하는 중입니다. stopRecording()에 사용 된 카메라 미리보기 세션에서 새로운 오류가 발생했습니다. .. 이제 미디어 레코더를 시작할 때 세션 세트를 사용하려고했는데 모두 괜찮아졌고 문제가 해결되었습니다. 고마워요, 당신의 답을 올바른 것으로 표시했습니다. – Handsum

+0

문제가 해결되었음을 알려드립니다. – NewOne