2012-04-13 11 views
8

Wystąpiło bardzo dziwne zachowanie: czasami mój pamięć multimediów ulega awarii z błędem "Zatrzymaj się nie powiodło", a czasami działa poprawnie. Czy istnieje moja wina lub jest to błąd systemu? Nie mogę dostać tego, co jest nie tak.Zatrzymanie odtwarzania multimediów dla systemu Android nie powiodło się

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

Odpowiedz

8

można złapać RuntimeException w sposobie MediaRecorder.stop().

Przykład:

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

Dodaj następujący w SurfaceCreated (posiadacz 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

co to ma naprawić? – StarShine

0

Doświadczony ten sam błąd: Czasami moja MediaRecorder rozbił się z powodu błędu "Stop failed" a czasami działało dobrze. Dodanie tego rozwiązało mój problem:

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

dodając to do czego dokładnie? – StarShine

Powiązane problemy