Android Camera 预览及录制视频 附demo


使用Android框架采集视频需要认真的管理Camera对象,以及跟MediaRecorder类的协调。当使用Camera对象记录视频时,除了Camera.open()和Camera.release()方法的调用以外,还必须管理Camera.lock()和Camera.unlock()方法的调用,从而允许MediaRecorder对象访问Camera硬件。

采集视频需要一定的调用顺序,必须按照一个特定执行顺序来准备和采集视频,详细如下:


1. 打开Camera:

使用Camera.open()方法来获得一个Camera对象的实例。

2. 连接预览:

使用Camera.setPreviewDisplay()方法把SurfaceView跟Camera连接起来,准备一个实时的Camera图像预览界面。
设置预览中demo设置的是圆形的预览框,详情可参考绘制圆形surfaceview

3. 启动预览:

调用Camera.starPreview()方法开始显示实时的Camera图像。

4. 启动视频录像:

为了成功的记录视频,必须完成以下步骤。

4.1. 给Camera对象解锁:

通过调用Camera.unlock()方法给由MediaRecorder对象使用的Camera对象解锁。

4.2. 配置MediaRecorder对象:

在这一步中要调用以下MediaRecorder方法。更多信息,请看MediaRecorder参考文档。

4.2.1. setCamera():

使用应用程序当前的Camera实例,把它设置成用于视频采集;

4.2.2. setAudiioSource():

使用MediaRecorder.AudioSource.CAMCORDER,设置音频源;

4.2.3. setVideoSource():

使用MediaRecorder.VideoSource.CAMERA来设置视频源;

4.2.4. 设置视频的输出格式和编码:

对于Android2.2以上的版本,要使用MediaRecorder.setProfile方法,并且要私用CamcorderProfile.get()方法来获得一个Profile的示例。对于Android2.2以前的版本,必须要设置视频输出的格式和编码参数:

4.2.4.I.setOutputFormat():

设置输出格式,指定默认设置,或者是MediaRecorder.OutputFormat.MPEG_4;

4.2.4.II. setAudioEncoder():

设置声音的编码类型,指定默认设置,或者是MediaRecorder.AudioEncoder.AMR_NB;

4.2.4.III.setVideoEncoder():

设置视频的编码类型,指定默认设置,或者是MediaRecorder.VideoEncoder.MPEG_4_SP;

4.2.5. setOutputFile():

设置输出文件,可以使用下文“保存媒体文件”中的示例代码中的getOutputMediaFile(MEDIA_TYPE_VIDEO).toString()方法来获取输出文件路径。

4.2.6. setPreviewDisplay():

给应用程序指定SurfaceView的预览布局。要使用与连接预览相同的对象。

警告:

这步中必须要调用MediaRecorder的配置方法,否则你的应用程序将会发生错误,并且录像也会失败。

4.3. 准备MediaRecorder对象:

通过调用MediaRecorder.prepare()方法,准备给MediaRecorder对象提供的配置设置。

4.4. 启动MediaRecorder对象:

通过调用MediaRecorder.star()方法来记录视频。

5. 停止视频录像:

在这步中要调用以下方法来成功完成视频记录:

5.1. 停止MediaRecorder对象:

通过调用MediaRecorder.stop()方法来停止视频采集

5.2. 重置MediaRecorder对象:

可选操作,通过调用MediaRecorder.reset()方法来删除记录器的配置设置。

5.3. 释放MediaRecorder对象:

调用MediaRecorder.release()方法来释放MediaRecorder对象。

5.4. 锁定Camera对象:

调用Camera.lock()方法来锁定Camera对象,以便MediaRecorder会话能够继续使用它。从Android4.0(API Level 14)开始,这个调用不再需要了,除非MediaRecorder.prepare()方法调用失败。

6. 停止预览:

当Activity使用完Camera对象时,要使用Camera.stopPreview()方法来停止预览。

7. 释放Camera对象:

调用Camera.release()方法来释放Camera对象,以便其他应用程序能够使用它。

提示:如果你的应用程序被用于典型的视频记录,那么在启动预览期间,把setRecordingHint(boolean)方法设置为true,这样有助于减少启动采集所需要的时间。

我的Demo写的比较简单,原本是想只当做圆形预览框的分享,后干脆加个录视频和尝试预览帧的处理。

GitHub地址如下:

https://github.com/qunqunstyle/multithreading

注:点击圆框可录制,可切换前后相机,这个demo只是为了示意预览帧onPreviewframe回调和录制视频的流程,在两者的切换时可能会有异常。

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值