Android调用系统摄像头--使用MediaRecorder--2--使用MediaRecorder进行录制
来源:互联网 发布:js加密使用方法 编辑:程序博客网 时间:2024/06/05 02:22
准备好了预览(preview)之后,就可以使用MediaRecorder进行视频录制了,付上录制部分的代码
- public class AndroidCameraActivity extends Activity {
- private static final String TAG = "TAG-AndroidCameraActivity";
- public static final int MEDIA_TYPE_IMAGE = 1;
- public static final int MEDIA_TYPE_VIDEO = 2;
- private Camera mCamera;
- private CameraPreview mPreview;
- private Button captureButton;
- private MediaRecorder mMediaRecorder;
- private boolean isRecording = false;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- // 创建Camera实例
- mCamera = getCameraInstance();
- // 创建Preview view并将其设为activity中的内容
- mPreview = new CameraPreview(this, mCamera);
- FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
- preview.addView(mPreview);
- // 为Capture按钮加入listener,拍摄视频
- captureButton = (Button) findViewById(R.id.button_capture);
- captureButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (isRecording) {
- // 停止录像,释放camera
- mMediaRecorder.stop();
- releaseMediaRecorder();
- mCamera.lock();
- // 通知用户录像已停止
- captureButton.setText("开始录像");
- isRecording = false;
- } else {
- // 初始化视频camera
- if (prepareVideoRecorder()) {
- mMediaRecorder.start();
- // 通知用户录像已开始
- captureButton.setText("停止录像");
- isRecording = true;
- } else {
- // 准备未能完成,释放camera
- releaseMediaRecorder();
- }
- }
- }
- });
- }
- @Override
- protected void onPause() {
- super.onPause();
- // 如果正在使用MediaRecorder,首先需要释放它。
- releaseMediaRecorder();
- // 在暂停事件中立即释放摄像头
- releaseCamera();
- }
- private void releaseMediaRecorder() {
- if (mMediaRecorder != null) {
- // 清除recorder配置
- mMediaRecorder.reset();
- // 释放recorder对象
- mMediaRecorder.release();
- mMediaRecorder = null;
- // 为后续使用锁定摄像头
- mCamera.lock();
- }
- }
- private void releaseCamera() {
- if (mCamera != null) {
- // 为其它应用释放摄像头
- mCamera.release();
- mCamera = null;
- }
- }
- private boolean prepareVideoRecorder() {
- mMediaRecorder = new MediaRecorder();
- // 第1步:解锁并将摄像头指向MediaRecorder
- mCamera.unlock();
- mMediaRecorder.setCamera(mCamera);
- // 第2步:指定源
- mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
- mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
- // 第3步:指定CamcorderProfile(需要API Level 8以上版本)
- // mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
- // 第3步:设置输出格式和编码格式(针对低于API Level 8版本)
- mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
- mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
- mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
- // 第4步:指定输出文件
- mMediaRecorder.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO).toString());
- // 第5步:指定预览输出
- mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());
- // 第6步:根据以上配置准备MediaRecorder
- try {
- mMediaRecorder.prepare();
- } catch (IllegalStateException e) {
- Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage());
- releaseMediaRecorder();
- return false;
- } catch (IOException e) {
- Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage());
- releaseMediaRecorder();
- return false;
- }
- return true;
- }
- private Camera getCameraInstance(){
- Camera c = null;
- try {
- // 获取Camera实例
- c = Camera.open();
- } catch (Exception e){
- // 摄像头不可用(正被占用或不存在)
- }
- // 不可用则返回null
- return c;
- }
- private File getOutputMediaFile(int type) {
- // ......生成媒体文件,如xxx.mp4......
- }
- private boolean checkCameraHardware(Context context) {
- if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
- // 摄像头存在
- return true;
- } else {
- // 摄像头不存在
- return false;
- }
- }
- }
根据Android官方文档,在使用MediaRecorder进行视频录制的时候一定要严格遵循上面的顺序,否则会报错在API里到处是“if it is called before setOutputFormat() or after prepare() ”因此一定要严格的按照顺序来进行摄像头操作
- Android调用系统摄像头--使用MediaRecorder--2--使用MediaRecorder进行录制
- Android调用系统摄像头--使用MediaRecorder--2--使用MediaRecorder进行录制
- Android调用系统摄像头--使用MediaRecorder--2--使用MediaRecorder进行录制
- Android使用MediaRecorder类进行录制视频
- Android调用系统摄像头--使用MediaRecorder--1--预览(preview)功能
- Android调用系统摄像头--使用MediaRecorder--1--预览(preview)功能
- 使用MediaRecorder进行视频录制
- Android:使用MediaRecorder录制音频
- android中使用MediaRecorder进行视频录制笔记
- Android 中使用MediaRecorder进行录像详解(视频录制)
- android中使用MediaRecorder进行视频录制笔记
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- jasperreport+ireport
- 基于 IO密集 & CPU密集考量 SAN & NAS 选择的一点建议
- 执行带参数的存储过程
- java反射详解 (一)
- ARM Linux跳过login
- Android调用系统摄像头--使用MediaRecorder--2--使用MediaRecorder进行录制
- ubuntu 11.04+获取Android源码(补充篇)
- potential leak of an object stored into
- linux库文件编写入门 && 使用和生成库
- Intent传递图片
- MediaRecorder类介绍
- 垃圾回收机制
- ContentValues
- 【代码生成】如何生成自定义表单?(1)