官方Android Camera2 video Demo崩溃的修正

本文介绍了作者在使用官方Android Camera2 video Demo时遇到的崩溃问题,尤其是在调用stopRecording()时导致的相机服务崩溃。作者指出,问题根源在于对数据流向的不清晰,并分享了一个有效的解决办法,确保在停止录制视频时应用不会崩溃。同时,作者批评了一些常见的错误处理方法,如重新初始化相机或直接结束Activity,认为这些方法并不实际。文章提供了解决方案的代码链接。
摘要由CSDN通过智能技术生成

  最近在做关于视频(YUV<–>h264)、camera、camera2相关的项目。
  首先要赞一下camera2,设计的非常良心。1920*1080的分辨率下帧率依然能保持30fps。接下来就只剩下吐槽了。
  花了整整一天的时间做了camera2的在一个界面上录像+拍照的app。唯一的感受就是坑太多!
  接下来,步入正题。官方demo,总会在stopRecording()这里崩溃。甚至底层的camera服务崩溃,到了“除了重启别无他法”的境地。稍微理了一下,这个问题还是对数据流向不清楚的缘故,也许是最近被camera2+mediaCodec虐的体无完肤才能看到这一点吧。当然不排除官方大牛故意在这里埋个flag,好让大家都对camera2映像深刻吧!
  由于项目紧的原因,先写这么多。当然,我是在已经写好了app的情况下才考虑在这里说一下。看了不少相关的解决办法,要么是在onError()里重新初始化相机,要么就直接finish当前activity,让人感觉不务实求真。
  Error信息:
  

E/CameraCaptureSession: Session 1: Exception while stopping repeating: 
                                                                                      android.hardware.camera2.CameraAccessException: The camera device has encountered a serious error
                                                                                          at android.hardware.camera2.impl.CameraDeviceImpl.checkIfCameraClosedOrInError(CameraDeviceImpl.java:1478)
                                                                                          at android.hardware.camera2.impl.CameraDeviceImpl.stopRepeating(CameraDeviceImpl.java:677)
                                                                                          at android.hardware.camera2.impl.CameraCaptureSessionImpl.close(CameraCaptureSessionImpl.java:328)
                                                                                          at com.example.android.camera2video.Camera2VideoFragment.closePreviewSession(Camera2VideoFragment.java:674)
                                                                                          at com.example.android.camera2video.Camera2VideoFragment.startPreview(Camera2VideoFragment.java:491)
                                                                                          at com.example.android.camera2video.Camera2VideoFragment.stopRecordingVideo(Camera2VideoFragment.java:687)
                                                                                          at com.example.android.camera2video.Camera2VideoFragment.onClick(Camera2VideoFragment.java:313)
                                                                                          at android.view.View.performClick(View.java:4909)
                                                                                          at android.view.View$PerformClick.run(View.java:20390)
                                                                                          at android.os.Handler.handleCallback(Handler.java:815)
                                                                                          at android.os.Handler.dispatchMessage(Handler.java:104)
                                                                                          at android.os.Looper.loop(Looper.java:194)
                                                                                          at android.app.ActivityThread.main(ActivityThread.java:5848)
                                                                                          at java.lang.reflect.Method.invoke(Native Method)
                                                                                          at java.lang.reflect.Method.invoke(Method.java:372)
                               
Android Camera2 Demo是一个展示了如何使用Android相机API的示例应用程序。该示例应用程序基于Android 5.0(API 21)及更高版本的Android平台。它展示了如何使用Camera2 API来实现高级功能,如手动对焦、手动曝光、RAW图像捕获等。 首先,在应用程序的布局文件中,我们需要添加一个TextureView来显示相机预览画面。然后,在MainActivity中,我们需要创建一个CameraManager的实例,以获取设备上的相机列表。接下来,我们需要实现一个CameraDevice.StateCallback来处理相机设备的打开和关闭。 当我们选择一个相机设备时,我们可以通过CameraManager的openCamera方法打开相机。然后,我们可以创建一个CaptureRequest.Builder来构建捕获请求,设置相机参数和预览目标。我们还需要创建一个CameraCaptureSession来发送捕获请求。 我们可以通过设置CaptureRequest.Builder的参数来实现手动对焦和手动曝光。例如,我们可以使用CONTROL_AF_MODE来设置对焦模式,使用CONTROL_AE_MODE和CONTROL_AE_EXPOSURE_COMPENSATION来设置曝光模式和曝光补偿。 在捕获图像时,我们可以使用ImageReader类来创建一个ImageReader实例,用于获取捕获的图像数据。我们可以在CameraCaptureSession.CaptureCallback的onCaptureCompleted回调方法中处理捕获的图像数据,并将其保存到本地文件中。 此外,我们还可以使用CameraCharacteristics类来获取相机设备的特性,如支持的对焦模式、支持的曝光模式等。我们还可以使用CameraMetadata类来设置相机参数,如对焦区域、曝光补偿等。 总之,Android Camera2 Demo演示了如何使用Camera2 API来创建一个全功能相机应用程序。它展示了如何打开相机、设置相机参数、捕获图像并处理图像数据。通过学习和理解这个示例应用程序,我们可以更好地了解和使用Android相机API。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值