2016-04-21 7 views
0

Im Moment habe ich eine app, die ich versuche, Video, mit dem folgende Verfahren zur Aufzeichnung der Kamera zu initialisieren:Android - Fatal 11 Signal beim Anhalten und Zurücksetzen der Kamera nach der Videoaufnahme

private void initRecorder(Surface surface) throws IOException { 
    if (mCamera == null) { 
     mCamera = Camera.open(); 
     mCamera.unlock(); 
    } 

    if (mMediaRecorder == null) mMediaRecorder = new MediaRecorder(); 
    mMediaRecorder.setPreviewDisplay(surface); 
    mMediaRecorder.setCamera(mCamera); 

    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 
    mMediaRecorder.setVideoEncodingBitRate(512 * 1000); 
    mMediaRecorder.setVideoFrameRate(30); 
    mMediaRecorder.setVideoSize(640, 480); 
    mMediaRecorder.setOutputFile(videoFile); 

    try { 
     mMediaRecorder.prepare(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } 

    initSuccess = true; 
} 

Wenn ich versuche, zu stoppen die Kamera oder wenn surfaceDestroyed genannt wird, ich die folgende Methode aufrufen:

private void resetCamera() { 
    mMediaRecorder.stop(); 
    mMediaRecorder.reset(); 
    mMediaRecorder.release(); 
    mCamera.release(); 

    mCamera = null; 

    try { 
     initRecorder(mHolder.getSurface()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

jedoch irgendwo in diesem Code erhalte ich ein fatales Signal 11 Fehler. Anscheinend versucht der Code, illegal auf einen Teil des Speichers zuzugreifen.

Ich fragte mich, wie würde ich diesen Fehler umgehen?

ist hier ein Logcat Dump aus, wenn ich starten Sie das Video in der Aufnahme, wenn ich die Aufnahme zu stoppen:

D/dalvikvm: GC_FOR_ALLOC freed 1309K, 27% free 7434K/10168K, paused 9ms, total 9ms 
I/dalvikvm: Could not compile trace for Ljava/util/Arrays;fill, offset 5 
I/dalvikvm: ++++++++++++++++++++++++++++++++++++++++++++ 
I/dalvikvm: JIT_INFO: ME Issues while compiling trace Ljava/util/Arrays;fill, offset 5 
I/dalvikvm: The trace provoked a spill. 
I/dalvikvm: Trying less registerization from 1 to 0 
D/dalvikvm: GC_FOR_ALLOC freed 1415K, 27% free 7438K/10168K, paused 10ms, total 10ms 
A/libc: Fatal signal 11 (SIGSEGV) at 0x00000010 (code=1), thread 13774 (arch.treadmill3) 
+0

Schreiben Sie das vollständige Protokoll des Fehlers (Ich weiß, es ist keine Java-Spur ist, aber manchmal in der es anderen Informationen sind nützlich). –

+0

Ich habe genau das gleiche Problem. Hast du es gelöst? – YYamil

Antwort

0

Nach mMediaRecorder.release(); Sie müssen mMediaRecorder = null schreiben; weil die release() -Methode nur wenige Fehler zu haben scheint. So:

if (mMediaRecorder != null) { 
     mMediaRecorder.stop(); 
     mMediaRecorder.reset(); 
     mMediaRecorder.release(); 
     mMediaRecorder = null; 
    } 
Verwandte Themen