解决切换前后置摄像头时,本机不能正常显示前或后置摄像头图像的问题

Flex 手机项目中遇到一个怪异的问题,Android手机切换前后置摄像头时,本机不能正常显示摄像头图像,但是可以正常发布摄像头视频流。开发环境: Flex SDK 4.6.0.23201 + AIR 3.4.0.2540 SDK。


调试后发现,摄像头图像显示不正常和Android手机播放FMS视频流有关。如果不播放远端视频流,此时切换前后置摄像头时,本机正常显示前或后置摄像头图像,也可以正常发布摄像头视频。如果播放远端视频流,此时切换前后置摄像头,本机不能正常显示前或后置摄像头图像,但是可以正常发布摄像头视频。


关于这个问题纠结了好久,最后终于解决了。解决方法就是换回AIR SDK 3.3或3.1的版本。该问题应该是AIR 3.4.0.2540 SDK的bug来的。 

要使用 CameraX 在 Java 中实现切换后置摄像头,可以通过以下步骤: 1. 获取 CameraSelector 对象:通过调用 `CameraSelector.DEFAULT_BACK_CAMERA` 或 `CameraSelector.DEFAULT_FRONT_CAMERA` 方法获取后置摄像头的 CameraSelector 对象。 2. 关闭当摄像头:在切换摄像头,需要先关闭当正在使用的摄像头。可以通过调用 CameraProvider.unbindAll() 方法,来关闭当摄像头。 3. 绑定新的摄像头:使用 CameraProvider.bindToLifecycle() 方法,将新的 CameraSelector 对象绑定到生命周期中。 下面是一个简单的 Java 代码示例,可以实现切换后置摄像头: ```java private void switchCamera() { CameraSelector cameraSelector = null; if (lensFacing == CameraSelector.LENS_FACING_BACK) { cameraSelector = CameraSelector.DEFAULT_FRONT_CAMERA; } else { cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA; } CameraProvider cameraProvider = cameraProviderFuture.get(); cameraProvider.unbindAll(); Preview preview = new Preview.Builder().build(); ImageAnalysis imageAnalysis = new ImageAnalysis.Builder().build(); ImageCapture imageCapture = new ImageCapture.Builder().build(); Camera camera = cameraProvider.bindToLifecycle((LifecycleOwner)this, cameraSelector, preview, imageAnalysis, imageCapture); preview.setSurfaceProvider(previewView.createSurfaceProvider(camera.getCameraInfo())); lensFacing = camera.getCameraInfo().getLensFacing(); } ``` 在这个示例中,我们首先根据当正在使用的摄像头的 LensFacing 属性,来获取要切换到的摄像头的 CameraSelector 对象。然后,我们通过 CameraProvider.unbindAll() 方法,关闭当正在使用的摄像头。接着,我们使用 CameraProvider.bindToLifecycle() 方法,将新的 CameraSelector 对象绑定到生命周期中。最后,我们将 preview 设为新摄像头的 SurfaceProvider,并更新当正在使用的摄像头的 LensFacing 属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值