Camera 录制视频的实现

使用 Camera 录制视频, 实现步骤如下:

需要权限: android.permission.CAMERA

android.permission.RECORD_AUDIO

android.permission.WRITE_EXTERNAL_STORAGE

如果录制前后需要预览效果, 需要在录制开始前停止预览, 并解锁摄像头.

录制停止后锁上摄像头, 再开始预览.

MediaRecorder mMediaRecorder = new MediaRecorder();

mMediaRecorder.setCamera(camera);// 关联摄像头

mMediaRecorder.setAudioSource(AudioSource.CAMCORDER);// 设置音频源

mMediaRecorder.setVideoSource(VideoSource.CAMERA);// 设置视频源

CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW);// 获得摄像质量低的配置

mMediaRecorder.setProfile(profile);// 设置配置文件

mMediaRecorder.setOutputFile(“/mnt/sdcard/test.mp4”);// 设置输出文件.

mMediaRecorder.setPreviewDisplay(mHolder.getSurface());// 设置预览显示

mMediaRecorder.prepare();// 准备

mMediaRecorder.start();// 录制

mMediaRecorder.stop();// 停止

mMediaRecorder.release();// 释放资源


public class MainActivity extends Activity implements Callback {
private Camera camera;
private SurfaceHolder mHolder;
private MediaRecorder mMediaRecorder;
private boolean isCapturing = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceview);
mHolder = surfaceView.getHolder();
// 设置数据来源自外部, 不维护自己内部的缓冲区, 而是等待渲染引擎把数据推送到界面上.
// 注意: 4.0以前版本必须要设置, 4.0以后版本自动会设置.
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mHolder.addCallback(this); }
public void capture(View v) {
if(!isCapturing) {
isCapturing = true;
camera.stopPreview();
camera.unlock();
mMediaRecorder = new MediaRecorder();
mMediaRecorder.setCamera(camera);
mMediaRecorder.setAudioSource(AudioSource.CAMCORDER);
mMediaRecorder.setVideoSource(VideoSource.CAMERA);
CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW);
mMediaRecorder.setProfile(profile);
File sdcardFile = Environment.getExternalStorageDirectory();
String path = new File(sdcardFile, "video" + System.currentTimeMillis() + ".mp4").getPath();
mMediaRecorder.setOutputFile(path);
mMediaRecorder.setPreviewDisplay(mHolder.getSurface());
try {
mMediaRecorder.prepare();
mMediaRecorder.start();
} catch (Exception e) { e.printStackTrace();
}
} else {
isCapturing = false;
mMediaRecorder.stop();
mMediaRecorder.release();
mMediaRecorder = null;
camera.lock();
camera.startPreview();
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) { try {
camera = Camera.open();
camera.setPreviewDisplay(mHolder);
camera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
} @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
camera.release();
camera = null;
}
}
上一篇:P6 Professional Installation and Configuration Guide (Microsoft SQL Server Database) 16 R1


下一篇:【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.3 日历