80,351
社区成员
发帖
与我相关
我的任务
分享
public class MainActivity extends AppCompatActivity {
private MediaRecorder mediaRecorder;
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private boolean isRecord = false;
private boolean isCaremaBack = true;
private Button startCameraBtn, changeCameraBtn;
private Camera camera;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
startCameraBtn = (Button) findViewById(R.id.startBtn);
changeCameraBtn = (Button) findViewById(R.id.changeBtn);
startCameraBtn.setOnClickListener(listener);
changeCameraBtn.setOnClickListener(listener);
surfaceView = (SurfaceView) findViewById(R.id.surfaview);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(callback);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.startBtn:
if (!isRecord) {
if (mediaRecorder == null) {
mediaRecorder = new MediaRecorder();
}
if (camera == null) {
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);
camera.unlock();
}
mediaRecorder.setCamera(camera);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
CamcorderProfile camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
mediaRecorder.setVideoSize(480, 320);
mediaRecorder.setVideoFrameRate(camcorderProfile.videoFrameRate);//设置要捕获的视频帧速率
mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());
String path = getSDPath();
if (path != null) {
File dir = new File(path + "/recordtest");
if (!dir.exists()) { //返回一个布尔值,指示是否可以在下面的文件系统中找到这个文件。
dir.mkdir();
}
path = dir + "/" + getDate() + ".mp4";
mediaRecorder.setOutputFile(path);
try {
mediaRecorder.prepare();//准备录音机开始捕获和编码数据。
} catch (IOException e) {
e.printStackTrace();
}
}
mediaRecorder.start();
isRecord = true;
startCameraBtn.setText("stop");
} else {
mediaRecorder.stop();
mediaRecorder.reset();
startCameraBtn.setText("start");
isRecord = false;
}
break;
case R.id.changeBtn:
camera.stopPreview();
camera.release();
camera = null;
if (isCaremaBack) {
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
isCaremaBack = false;
} else {
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);
isCaremaBack=true;
}
try {
camera.setPreviewDisplay(surfaceHolder);
} catch (IOException e) {
e.printStackTrace();
}
camera.startPreview();
isCaremaBack = false;
break;
}
}
};
SurfaceHolder.Callback callback = new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
surfaceHolder = holder;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
surfaceHolder = holder;
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
surfaceView = null;
surfaceHolder = null;
if (mediaRecorder != null) {
mediaRecorder.release();
mediaRecorder = null;
}
}
};
public String getDate() {
Calendar ca = Calendar.getInstance();
int year = ca.get(Calendar.YEAR); // 获取年份
int month = ca.get(Calendar.MONTH); // 获取月份
int day = ca.get(Calendar.DATE); // 获取日
int minute = ca.get(Calendar.MINUTE); // 分
int hour = ca.get(Calendar.HOUR); // 小时
int second = ca.get(Calendar.SECOND); // 秒
String date = "" + year + (month + 1) + day + hour + minute + second;
return date;
}
public String getSDPath() {
File sdDir = null;
boolean sdCardExist = Environment.getExternalStorageState()
.equals(android.os.Environment.MEDIA_MOUNTED); // 判断sd卡是否存在
if (sdCardExist) {
sdDir = Environment.getExternalStorageDirectory();// 获取跟目录
return sdDir.toString();
}
return null;
}
}