2012-04-13 102 views
8

我遇到了一個非常奇怪的行爲:有時我的媒體記錄器崩潰,出現錯誤「停止失敗」,有時它工作正常。是我的錯,還是系統的錯誤? 我不能得到什麼是錯的。Android媒體錄製器停止失敗

private void stopRecording(){ 
     ticker.cancel(); 
     ticker.purge(); 

     recorder.stop(); 

     startBtn.setText("Start"); 
     recordInProcess = false; 

     markList = locWriteTask.getMarkArray(); 

    mCamera.lock(); 
     recorder.release(); 
    } 

private void startRecording(){ 

     startBtn.setText("Stop"); 

     recordInProcess = true; 

      recorder = new MediaRecorder(); 

     mCamera.unlock(); 
     recorder.setCamera(mCamera); 

     recorder.setPreviewDisplay(mSurfaceHolder.getSurface()); 
     recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
     recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); 
     recorder.setMaxDuration((int) 10000000); 
     recorder.setVideoSize(320, 240); 
     recorder.setVideoFrameRate(15); 
     recorder.setOutputFile(FULL_PATH_TO_LOCAL_FILE + counter + MP4); 

     try{ 
      recorder.prepare(); 
     } catch (Exception e){ 
      finish(); 
     } 

     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll); 

     ticker = new Timer(); 
     locWriteTask = new WriteTimeLocationTimerTask(ll); 
     ticker.schedule(locWriteTask, 0, DELAY); 

     recorder.start(); 
    } 

回答

8

您可以趕上在MediaRecorder.stop()方法的RuntimeException。

例子:

MediaRecorder mRecorder = new MediaRecorder(); 
File mFile = new File("The output file's absolutePath"); 

... //config the mRecorder 
mRecorder.setOutputFile(mFile.getAbsolutePath()); 

... //prepare() ... 
mRecorder.start(); 

try { 
    mRecorder.stop(); 
} catch(RuntimeException e) { 
    mFile.delete(); //you must delete the outputfile when the recorder stop failed. 
} finally { 
    mRecorder.release(); 
    mRecorder = null; 
} 
2

加入您的SurfaceCreated(SurfaceHolder座)以下:

CamcorderProfile camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); //get your own profile 
Camera.Parameters parameters = mCamera.getParameters(); 
parameters.setPreviewSize(camcorderProfile.videoFrameWidth,camcorderProfile.videoFrameHeight); 
mCamera.setParameters(parameters); 
+0

這是應該解決的問題? – StarShine 2018-01-24 23:22:50

0

經歷了同樣的錯誤:有時候我MediaRecorder崩潰,並顯示錯誤 「停止失敗」,有時工作得很好。將這個解決我的問題:

@Override 
public void onStop() { 
    super.onStop(); 
    if (mRecorder != null) { 
     mRecorder.release(); 
     mRecorder = null; 
    } 
} 
+0

加上這個到底是什麼? – StarShine 2018-01-24 23:23:05