Android平台Camera开发实践指南,满满干货

本文详细探讨了Android平台上的Camera开发,通过Camera2 API实现拍照和录像功能,包括对焦、预览设置、捕获图像等关键步骤。同时,提供了Android详细知识点的思维脑图和面试指南,帮助开发者提升技能。
摘要由CSDN通过智能技术生成
  mediaRecorder = new MediaRecorder();
try {
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
    
    //输出格式
    mediaRecorder.setOutputFormat(camcorderProfile.fileFormat);
    //视频帧率
    mediaRecorder.setVideoFrameRate(camcorderProfile.videoFrameRate);
    //视频大小
    mediaRecorder.setVideoSize(videoSize.getWidth(), videoSize.getHeight());
    //视频比特率
    mediaRecorder.setVideoEncodingBitRate(camcorderProfile.videoBitRate);
    //视频编码器
    mediaRecorder.setVideoEncoder(camcorderProfile.videoCodec);
    
    //音频编码率
    mediaRecorder.setAudioEncodingBitRate(camcorderProfile.audioBitRate);
    //音频声道
    mediaRecorder.setAudioChannels(camcorderProfile.audioChannels);
    //音频采样率
    mediaRecorder.setAudioSamplingRate(camcorderProfile.audioSampleRate);
    //音频编码器
    mediaRecorder.setAudioEncoder(camcorderProfile.audioCodec);
    
    File outputFile = outputPath;
    String outputFilePath = outputFile.toString();
    //输出路径
    mediaRecorder.setOutputFile(outputFilePath);
    
    //设置视频输出的最大尺寸
    if (mCameraConfigProvider.getVideoFileSize() > 0) {
        mediaRecorder.setMaxFileSize(mCameraConfigProvider.getVideoFileSize());
        mediaRecorder.setOnInfoListener(this);
    }
    
    //设置视频输出的最大时长
    if (mCameraConfigProvider.getVideoDuration() > 0) {
        mediaRecorder.setMaxDuration(mCameraConfigProvider.getVideoDuration());
        mediaRecorder.setOnInfoListener(this);
    }
    mediaRecorder.setOrientationHint(getVideoOrientation(mCameraConfigProvider.getSensorPosition()));
    
    //准备
    mediaRecorder.prepare();

    return true;
} catch (IllegalStateException error) {
    Log.e(TAG, "IllegalStateException preparing MediaRecorder: " + error.getMessage());
} catch (IOException error) {
    Log.e(TAG, "IOException preparing MediaRecorder: " + error.getMessage());
} catch (Throwable error) {
    Log.e(TAG, "Error during preparing MediaRecorder: " + error.getMessage());
}
releasemediaRecorder();
return false;

}


值得一提的是,日常的业务中经常对拍摄视频的时长或者大小有要求,这个可以通过mediaRecorder.setOnInfoListener()来处理,OnInfoListener会监听正在录制的视频,然后我们 可以在它的回调方法里处理。

@Override
public void onInfo(MediaRecorder mediaRecorder, int what, int extra) {
if (MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED == what) {
//到达最大时长
} else if (MediaRecorder.MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED == what) {
//到达最大尺寸
}
}


更多关于MediaRecorder的介绍可以参考[MediaRecorder官方文档](

)。

### 1.7 结束视频录制

结束视频录制也很简单,只需要调用mediaRecorder.stop()方法即可。

mediaRecorder.stop();


此外,如果不再使用相机,也要注意释放相机资源。

以上便是Camera的全部内容,还是比较简单的,下面我们接着来讲Camera2的相关内容,注意体会两者的区别。

二 Camera2实践指南
-------------

*   [Android Camera2 官方视频](

)
*   [Android Camera2 官方文档](

)
*   [Android Camera2 官方用例](

)

Camera2 API中主要涉及以下几个关键类:

*   CameraManager:摄像头管理器,用于打开和关闭系统摄像头
*   CameraCharacteristics:描述摄像头的各种特性,我们可以通过CameraManager的getCameraCharacteristics(@NonNull String cameraId)方法来获取。
*   CameraDevice:描述系统摄像头,类似于早期的Camera。
*   CameraCaptureSession:Session类,当需要拍照、预览等功能时,需要先创建该类的实例,然后通过该实例里的方法进行控制(例如:拍照 capture())。
*   CaptureRequest:描述了一次操作请求,拍照、预览等操作都需要先传入CaptureRequest参数,具体的参数控制也是通过CameraRequest的成员变量来设置。
*   CaptureResult:描述拍照完成后的结果。

Camera2拍照流程如下所示:

![](https://user-gold-cdn.xitu.io/2017/12/15/16059bc5a0fee2d1?imageView2/0/w/1280/h/960/ignore-error/1)

开发者通过创建CaptureRequest向摄像头发起Capture请求,
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值