14

非常に奇妙な動作に直面しました。メディアレコーダーが「停止に失敗しました」というエラーでクラッシュすることもあれば、正常に動作することもあります。私のせいですか、それともシステムのバグですか?何が悪いのかわからない。

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

4 に答える 4

10

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;
}
于 2012-11-07T06:51:28.487 に答える
1

レコーダが記録状態にない場合、停止に失敗する可能性があります。

http://developer.android.com/reference/android/media/MediaRecorder.htmlを参照してください

于 2012-07-20T22:32:42.127 に答える
0

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);  
于 2014-07-23T11:20:32.320 に答える
-1

同じエラーが発生しました。MediaRecorderが「停止に失敗しました」というエラーでクラッシュすることがあり、正常に動作することもありました。これを追加すると、私の問題は解決しました。

@Override
public void onStop() {
    super.onStop();
    if (mRecorder != null) {
        mRecorder.release();
        mRecorder = null;
    }
}
于 2017-07-12T06:34:15.200 に答える