2011-07-08 17 views
3

ビデオの録画に失敗しました。私のコードはコンパイルされますが、実行しようとするとクラッシュします。誰も私が画面上のビューを変更せずに記録する方法を知っていますか?ありがとう。画面にビデオを表示せずにAndroidでビデオを録画する

recorder = new MediaRecorder(); 
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); 
    recorder.setMaxDuration(15000); // 15 seconds 
    recorder.setMaxFileSize(5000000); // Approximately 5 megabytes 
    recorder.setOutputFile("/sdcard/xxxxx.mp4"); 
    recorder.start(); 
+1

あなたは例外メッセージとスタックトレースを提供する場合に役立つかもしれない:記事Capturing a video record on Android mobile phone when screen is off

を参照してくださいここではいくつかのサンプル記録コードです。 –

答えて

2

あなたは、有効な表面を指定する必要があります。そして、あなたがrecorder.prepare()を呼び出し、だけにしてrecorder.start()できるrecorder.setPreviewDisplay().を。

http://code.google.com/p/android/issues/detail?id=9570

例えばバックグラウンドアプリがビデオを録画することが可能になります。

有効な面が迷惑終了されるの必要性、それをここで削除に関するスレッドがあります。

0

ソースコード&画面がオフのときにAndroid携帯電話でビデオをキャプチャする手順。

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


Also, do not forget to include these permissions in manifest: 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
関連する問題