最近在做关于视频(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)