背景:教育类客户反馈学生使用市面上一些小众 Android 平板设备出现上课时摄像头角度偏移 90 度的问题
现象截图:
问题设备:蓝莓智学(型号:X-01)、希沃白板(型号:TC02A 、DT15PA)
问题原因:因硬件厂商未对系统 Camera1 做适配,TRTC 9.5 之前版本都是用的 Camera1 ,所以产生摄像头角度兼容问题(目前 TRTC 9.6 之后的重构版本已经支持 Camera2 ,可以升级到最新版解决此问题。如果短时间无法升级到最新版,可以参考以下解决方案)
解决方案:判断 Android WindowManager 的 Display 的角度来解决,经测试发现,这些问题设备 Display 角度和常规设备是不同的,可以根据此条件来做角度适配,此条件可以对这些问题设备都是通用的。
注意:此方案只能兼容 Activity 为横屏状态下的情况(以下兼容逻辑是针对横屏分辨率做的矫正,竖屏分辨率需要调整矫正角度) 兼容逻辑如下(进房前设置):
代码语言:javascript复制WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
if(wm != null){
Display display = wm.getDefaultDisplay();
// rotation:
// 0(Surface.ROTATION_0---竖屏正向)
// 1(Surface.ROTATION_90---横屏正向)
// 2(Surface.ROTATION_180---竖屏反向)
// 3(Surface.ROTATION_270---横屏反向)
int rotation = display.getRotation();
if (Surface.ROTATION_0 == rotation) {
// 定制机设备横屏下角度
mTRTCCloud.setGSensorMode(TRTCCloudDef.TRTC_GSENSOR_MODE_DISABLE); // 关闭重力感应
TRTCCloudDef.TRTCRenderParams renderParams = new TRTCCloudDef.TRTCRenderParams();
renderParams.rotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_90;
mTRTCCloud.setLocalRenderParams(renderParams); // 矫正本地旋转角度
mTRTCCloud.setVideoEncoderRotation(TRTCCloudDef.TRTC_VIDEO_ROTATION_180); // 矫正远端旋转角度
} else if (Surface.ROTATION_90 == rotation) {
// 常规设备横屏下角度,不做处理
}
}