2016-04-21 1 views
0

я в настоящее время есть приложение, которое я пытаюсь записать видео со следующим методом для инициализации камеры:Android - фатальный сигнал 11 при остановке и сброса камеры после записи видео

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; 
} 

Когда я пытаюсь остановить камера или когда surfaceDestroyed называется, я называю следующий метод:

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

    mCamera = null; 

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

Однако где-то в этом коде я получаю фатальный сигнал 11 ошибки. По-видимому, код пытается незаконно получить доступ к части памяти.

Мне было интересно, как мне обойти эту ошибку?

Вот Logcat дамп с момента, когда я начала записи видео до момента, когда я останавливаю запись:

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

Сообщение полный лог ошибки (я знаю, что это не ява следа, а иногда и другая информация в нем полезно). –

+0

У меня такая же проблема. Вы решили это? – YYamil

ответ

0

После mMediaRecorder.release(); вам нужно написать mMediaRecorder = null; потому что метод release(), похоже, имеет несколько ошибок. Как это:

if (mMediaRecorder != null) { 
     mMediaRecorder.stop(); 
     mMediaRecorder.reset(); 
     mMediaRecorder.release(); 
     mMediaRecorder = null; 
    } 
Смежные вопросы