近期拿了一臺 華為mate20 Pro的手機,在運行AR示例的過程中出現了黑屏。
問題排查
SDK版本:com.huawei.hms:arenginesdk:3.7.0.3
定位
經排查,發現(ARCamera對象的相機內參) getImageDimensions()返回的圖像尺寸的width和height都為0。
這里的期望結果是 1440 x 1080。
API參考
查閱API參考,發現文檔中關于getImageDimensions的描述中,新增以下注意事項:
轉至setPreviewSize()方法描述。
解決方法
修改
根據API文檔的描述,在ARConfigBase創建的地方,調用了config.setPreviewSize(1440,1080);
但是在后續的步驟中,仍然無法通過getImageDimensions()方法獲取到width、height的有效值。
思考
此前開發用的Huawei Mate 20
,AR示例運行正常。
這款設備既支持ARCore,又支持AREngine。2018年->2020年期間,華為發布的手機大都支持ARCore。
現使用Mate 20 Pro
,出現黑屏問題。
猜想
這可能跟設備有關,支持的設備列表中的設備都是經過驗證的。其它機型或許會有問題。
并未在AREngine的支持設備列表中,找到’Mate 20 Pro’這型號。
AR Engine支持的設備列表
最終辦法
設置輸入預覽流分辨率,默認分辨率為(1440x1080),若某些機型在后續的步驟中,無法通過ARCameraIntrinsics對象獲取相機尺寸,那就賦默認值。
ARConfig創建
config = new ARWorldTrackingConfig(session);//設置輸入預覽流分辨率,默認分辨率為(1440x1080)//此外還支持寬高比為4:3的物理相機預覽分辨率。config.setPreviewSize(1440,1080);
Texture初始化時
ARCamera arCamera = frame.getCamera();ARCameraIntrinsics intrinsics = arCamera.getCameraImageIntrinsics();int[] dimensions = intrinsics.getImageDimensions();int width ,height ;if (ARPlatForm.isArCore()){width = dimensions[0];//1440;height = dimensions[1];//1080;}else{if (dimensions[0] == 0 && dimensions[1] == 0){width = 1440;height = 1080;}else {width = Math.max(dimensions[1],dimensions[0]);height = Math.min(dimensions[1],dimensions[0]);}}cameraTexture = new ExternalTexture(cameraTextureId, width, height);