//视频录制机
//就是用照相机的功能,把预览到的画面和声音,持久化的保存到sd卡上.
package cn.itcast.videorecoder;
import java.io.IOException;
import android.app.Activity;
import android.hardware.Camera;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
public class DemoActivity extends Activity implements OnClickListener {
private Button bt_start, bt_stop;
private SurfaceView sv;
private SurfaceHolder holder;
private Camera camera;
MediaRecorder recorder;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//隐藏掉activity的标题栏
// 必须写到setcontentview之前
requestWindowFeature(Window.FEATURE_NO_TITLE);
//实现窗体的全屏显示
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);
bt_start = (Button) this.findViewById(R.id.bt_start);
bt_stop =(Button)this.findViewById(R.id.bt_stop);
bt_start.setOnClickListener(this);
bt_stop.setOnClickListener(this);
sv = (SurfaceView) this.findViewById(R.id.sv);
holder = sv.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
holder.addCallback(new MySurfaceCallback());
}
private class MySurfaceCallback implements SurfaceHolder.Callback{
public void surfaceCreated(SurfaceHolder holder) {
System.out.println("surface oncreate");
DemoActivity.this.holder = holder;
/* camera = Camera.open();
try {
camera.setPreviewDisplay(holder);
} catch (IOException e) {
e.printStackTrace();
}
camera.startPreview();*/
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
public void surfaceDestroyed(SurfaceHolder holder) {
System.out.println("surface destroy");
/* camera.release();
camera = null;*/
}
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_start:
bt_start.setEnabled(false);
bt_stop.setEnabled(true);
//得到媒体刻录机
recorder = new MediaRecorder();
/* recorder.reset();
// recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
// recorder.setAudioChannels(2);
// recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
recorder.setVideoSize(320, 240);
recorder.setVideoFrameRate(3); //每秒3帧
recorder.setOutputFile("/mnt/sdcard/itcast.3gp");
recorder.setPreviewDisplay(holder.getSurface());
try {
recorder.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//预期准备
recorder.start();//开始刻录
*/
recorder.reset();
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); //从照相机采集视频 video 视频
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //audio音频 麦克风(microphone)
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setVideoSize(720, 480);
recorder.setVideoFrameRate(3); //每秒3帧
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263); //设置视频编码方式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//设置音频编码方式
recorder.setOutputFile("/mnt/sdcard/itcast.3gp");
recorder.setPreviewDisplay(holder.getSurface());
try {
recorder.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//预期准备
recorder.start();//开始刻录
break;
case R.id.bt_stop:
bt_start.setEnabled(true);
bt_stop.setEnabled(false);
if(recorder!=null){
recorder.stop();
recorder.release();
recorder = null;
}
break;
}
}
}