2011-07-19 12 views
0
次のコードは、フローズンヨーグルト上で動作

が、私はあなたがレコードを押すまで画面が黒のジンジャーブレッドのプレビューやレコードを表示することができ、それは、レコード罰金を行いますが、プレビューはカメラのプレビュー - ジンジャーブレッド

package com.exercise.AndroidVideoCapture; 

import java.io.IOException; 

import android.app.Activity; 
import android.media.CamcorderProfile; 
import android.media.MediaRecorder; 
import android.os.Bundle; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.view.View; 
import android.widget.Button; 

public class AndroidVideoCapture extends Activity implements SurfaceHolder.Callback{ 

Button myButton; 
MediaRecorder mediaRecorder; 
SurfaceHolder surfaceHolder; 
boolean recording; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    recording = false; 

    mediaRecorder = new MediaRecorder(); 
    initMediaRecorder(); 

    setContentView(R.layout.main); 

    SurfaceView myVideoView = (SurfaceView)findViewById(R.id.videoview); 
    surfaceHolder = myVideoView.getHolder(); 
    surfaceHolder.addCallback(this); 
    surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

    myButton = (Button)findViewById(R.id.mybutton); 
    myButton.setOnClickListener(myButtonOnClickListener); 
} 

private Button.OnClickListener myButtonOnClickListener 
= new Button.OnClickListener(){ 

    @Override 
    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
     if(recording){ 
      mediaRecorder.stop(); 
      mediaRecorder.release(); 
      finish(); 
     }else{ 
      mediaRecorder.start(); 
      recording = true; 
      myButton.setText("STOP"); 
     } 
    }}; 

@Override 
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { 
    // TODO Auto-generated method stub 

} 
@Override 
public void surfaceCreated(SurfaceHolder arg0) { 
    // TODO Auto-generated method stub 
    prepareMediaRecorder(); 
} 
@Override 
public void surfaceDestroyed(SurfaceHolder arg0) { 
    // TODO Auto-generated method stub 

} 

private void initMediaRecorder(){ 
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
    CamcorderProfile camcorderProfile_HQ = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); 
    mediaRecorder.setProfile(camcorderProfile_HQ); 
    mediaRecorder.setOutputFile("/sdcard/myvideo.mp4"); 
    mediaRecorder.setMaxDuration(60000); // Set max duration 60 sec. 
    mediaRecorder.setMaxFileSize(5000000); // Set max file size 5M 
} 

private void prepareMediaRecorder(){ 
    mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface()); 
    try { 
     mediaRecorder.prepare(); 
    } catch (IllegalStateException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
} 

} 

答えて

0

を動作しません。私はここで同じ問題を抱えている。 SDKのバージョンが8より大きい場合 回避策として、私はmediaRecorder.start()を呼んでいます。 これは醜いですが、おそらく最適ではありませんが、私はこれ以上の解決策を見いだせませんでした。あなたはCameraオブジェクトを開き、プレビューを開始する必要がありMediaRecorderを設定する前に、カメラのプレビューを表示するには

+0

を –

0

。 MediaRecorderもこれを行いますが、唯一のあなたのユーザーがあなただけの空白の画面を持つことになり、レコードをクリックするまで、あなたがそのコードを呼び出していませんので、もしあなたが、それを準備一度。シンプルなイントロのためにここを見て:http://integratingstuff.com/2010/10/18/writing-code-that-captures-videos-on-android/

あなたはまた、Androidのカメラのコードを閲覧することができます:あなたはmediaRecorder.start(コールしない場合、それは何もしませんクリックボタンの上)
https://android.googlesource.com/platform/packages/apps/Camera

関連する問題