Android自定义视频录制

自定义相机的一般步骤

  • 是否有摄像头、是否有访问摄像头的权限
  • 创建相机预览类,继承SurfaceView并实现SurfaceHolder接口,用来预览相机的即时图片
  • 有了相机预览类之后,搭建预览布局将预览视图和界面控件结合起来
  • 连接控件的监听器以响应用户的动作,拍摄照片或视频,比如一个按钮点击事件
    拍摄照片和视频并保存输出
  • 摄像头使用完毕后,要正确地释放相机以便于其他应用使用

注意:

相机是共享资源,必须合理管理才不至于和其他同样用到相机的应用发生冲突

当你的应用使用完相机之后,记得调用Camera.release()方法以释放Camera对象。如果没有正确地释放相机,设备上的任何应用,随后任何访问相机的尝试,都有可能失败、退出

设置权限

    <!--摄像头权限-->
    <uses-permission android:name="android.permission.CAMERA"/>
    <!--具备摄像头-->
    <uses-feature android:name="android.hardware.camera"/>
    <!--存储图像或者视频权限-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!--录制音频权限-->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />

检测相机

private boolean checkCameraHardware(Context context) {
  // 支持所有版本
   return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA);
  //  Android 2.3 (API Level 9) 及以上的
  // return  Camera.getNumberOfCameras() > 0;
}

访问相机

public static Camera getCameraInstance(){
    Camera c = null;
    try {
        // 在多个摄像头时,默认打开后置摄像头
        c = Camera.open(); 
         // Android 2.3(API 9之后可指定cameraId摄像头id,可选值为后置(CAMERA_FACING_BACK)/前置( CAMERA_FACING_FRONT)
        //  c = Camera.open(cameraId); 
    } catch (Exception e){
        // Camera被占用或者设备上没有相机时会崩溃。
    }
    return c;  // returns null if camera is unavailable
}

注意: 在部分设备上,打开摄像头时可能会花费较长的时间,因此此操作应该在子线程上执行,然后以回调的方式传递Camera 对象,避免出现ANR;

检测相机功能

在获取到Camera对象之后,可以调用Camera.getParameters()方法并检测该方法返回的Camera.Parameters对象所支持的功能以获取到更多关于相机功能的信息。当使用API 9及以上时, 使用Camera.getCameraInfo()检测摄像头是前置还是后置、图像的方向,具体使用可以参看【Camera相机开发】实现开启相机

创建预览类

摄像头预览类继承自SurfaceView,能够实时的展示来自摄像头的图像数据,方便用户捕捉图片和视频
下面的代码演示了预览类的基本创建。这个类继承自SurfaceHolder.Callback以获取创建和销毁该预览视图的回调事件,这些事件在指派相机预览输入时所需要的

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
    private Surf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值