0

我想錄制視頻,但它是在媒體記錄越來越崩潰開始,媒體記錄準備。請幫助我...這裏是我的代碼...Android的視頻錄像用媒體錄像機不工作

private boolean startRecording() { 
     camera.unlock(); 
     try { 
     mediaRecorder = new MediaRecorder(); 
     mediaRecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() { 
      @Override 
      public void onError(MediaRecorder mr, int what, int extra) { 
       Log.i(TAG, "Error"); 
      } 
     }); 
      second=0; 
      minute=0; 
      recordCountTimer = new CountDownTimer(Long.MAX_VALUE,1000) { 
       @Override 
       public void onTick(long millisUntilFinished) { 
        second++; 
        if(second>=60){ 
         second=0; 
         minute++; 
        } 
        recordCount.setText(String.format("%02d:%02d",minute,second)); 
       } 

       @Override 
       public void onFinish() { 
        finish(); 
       } 
      }.start(); 
     mediaRecorder.setCamera(camera); 
     mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
     mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); 
      Log.d(TAG, "A"); 
     mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 
     mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
     mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); 
      Log.e(TAG, "B"); 
     mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); 
     defaultVideoPath= FileManger.getOutputMediaFile(MEDIA_TYPE_VIDEO).getAbsolutePath(); 
//  uriVid = Uri.parse(FileManger.getOutputMediaFile(MEDIA_TYPE_VIDEO).getAbsolutePath()); 
//  defaultVideoPath = getRealPathFromUri(uriVid); 
     mediaRecorder.setOutputFile(defaultVideoPath); 
     mediaRecorder.setVideoSize(recordingCameraSurface.getWidth(), recordingCameraSurface.getHeight()); 
     mediaRecorder.setVideoFrameRate(20); 
      Log.v(TAG, "C"); 
     mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface()); 
     mediaRecorder.setMaxFileSize(50000); 
     mediaRecorder.prepare(); 
      Log.w(TAG, "D"); 
     mediaRecorder.start(); 
      Log.e(TAG, "E"); 
     } catch (IOException e) { 
      releaseMediaRecorder(); 
      return false; 
     }catch (IllegalStateException t){ 
      releaseMediaRecorder(); 
      return false; 
     } 

     return true; 
    } 

它給像

RECORDER_OK﹕ B 
MediaRecorder﹕ setOutputFormat called in an invalid state: 4 

,並在這裏,我要下一個活動:

Intent intent = new Intent(RecordBuyPage.this,CheckAndSaveActivity.class); 
      intent.putExtra("VIDEOFILEPATH", defaultVideoPath); 
      startActivity(intent); 

,並在T他接下來的活動我得到的路徑無效,如:

player.setDataSource(getIntent().getStringExtra("VIDEOFILEPATH")); 

我覺得我的訂單調用媒體錄像機是正確的,但它也是在越來越麻煩:

mediarecoreder.prepare(). 

請給一些有效的解決方案,我想很多從堆棧溢出,但它不工作....我認爲視頻不錄音,因爲當我通過它的意圖它是空的...

+0

你嘗試下面的答案?它解決您的問題? – Shishram

回答

0

我希望你跟着這個鏈接的示例代碼(Media Recorderhttps://github.com/googlesamples/android-MediaRecorder

,它有它的portrait模式的一些錯誤,以record media所以要解決這個問題,請按照此link

,並在這個環節,你會得到你的media pathstored,你可以很容易地pass另一個activity 。看看我希望它可以幫助你。

得到的stopcapturingmedia的路徑,你可以做到這一點對你CaptureClick方法

Log.d("Video file path", CameraHelper.getOutputMediaFile(
         CameraHelper.MEDIA_TYPE_VIDEO).toString()); 

和完成按鈕OnClickListener

public void onCaptureClick(View view) { 
     if (isRecording) { 
      // BEGIN_INCLUDE(stop_release_media_recorder) 

      // stop recording and release camera 
      mMediaRecorder.stop(); // stop the recording 
      releaseMediaRecorder(); // release the MediaRecorder object 
      mCamera.lock();   // take camera access back from MediaRecorder 

      // inform the user that recording has stopped 
      setCaptureButtonText("Capture"); 
      isRecording = false; 
      releaseCamera(); 
      Log.d("Video file path", CameraHelper.getOutputMediaFile(
        CameraHelper.MEDIA_TYPE_VIDEO).toString()); 
      // END_INCLUDE(stop_release_media_recorder) 

     } else { 

      // BEGIN_INCLUDE(prepare_start_media_recorder) 

      new MediaPrepareTask().execute(null, null, null); 

      // END_INCLUDE(prepare_start_media_recorder) 

     } 
    } 

請按照上面提供的這兩個環節,它可能會解決您的問題。

0

試試這個

public class VideoCapture extends Activity implements OnClickListener 
,SurfaceHolder.Callback { 

MediaRecorder recorder; 
SurfaceHolder holder; 
boolean recording = false; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

    recorder = new MediaRecorder(); 
    initRecorder(); 
    setContentView(R.layout.main); 

    SurfaceView cameraView = (SurfaceView) findViewById(R.id.CameraView); 
    holder = cameraView.getHolder(); 
    holder.addCallback(this); 
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

    cameraView.setClickable(true); 
    cameraView.setOnClickListener(this); 
} 

private void initRecorder() { 
    recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
    recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 

    CamcorderProfile cpHigh = CamcorderProfile 
      .get(CamcorderProfile.QUALITY_HIGH); 
    recorder.setProfile(cpHigh); 
    recorder.setOutputFile("/sdcard/videocapture_example.mp4"); 
    recorder.setMaxDuration(50000); // 50 seconds 
    recorder.setMaxFileSize(5000000); // Approximately 5 megabytes 
} 

private void prepareRecorder() { 
    recorder.setPreviewDisplay(holder.getSurface()); 

    try { 
     recorder.prepare(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
     finish(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     finish(); 
    } 
} 

public void onClick(View v) { 
    if (recording) { 
     recorder.stop(); 
     recording = false; 

     // Let's initRecorder so we can record again 
     initRecorder(); 
     prepareRecorder(); 
    } else { 
     recording = true; 
     recorder.start(); 
    } 
} 

public void surfaceCreated(SurfaceHolder holder) { 
    prepareRecorder(); 
} 

public void surfaceChanged(SurfaceHolder holder, int format, int width, 
     int height) { 
} 

public void surfaceDestroyed(SurfaceHolder holder) { 
    if (recording) { 
     recorder.stop(); 
     recording = false; 
    } 
    recorder.release(); 
    finish(); 
} 
} 


Include Permissions in Manifest file : 

<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
相關問題