当您成功集成SDK,并想实现移动端切换横竖屏进行实时音视频通信。您可以通过本章节,了解实现本地切换横竖屏的代码方法,帮助您更好的体验阿里云音视频通信服务。

横竖屏模式切换

正常情况下竖屏模式推流分辨率宽<高,例如:480*640;横屏模式推流分辨率宽>高,例如:640*480。

调用setDeviceOrientationMode方法,进行切换横竖屏:

//接口方法
public abstract void setDeviceOrientationMode(AliRtcOrientationMode paramAliRtcOrientationMode);
//示例方法
mAliRtcEngine.setDeviceOrientationMode(AliRtcOrientationModePortrait);
参数 类型 描述
paramAliRtcOrientationMode AliRtcOrientationMode 设备方向
  • AliRtcOrientationModePortrait(默认值):固定竖屏模式
  • AliRtcOrientationModeLandscape:固定横屏模式Left
  • AliRtcOrientationModeLandscapeRight:固定横屏模式Right
  • AliRtcOrientationModeAuto:自适应
说明
  • 当应用切换横竖屏时,调用此接口进行设备方向切换,摄像头采集会随机进行切换。
  • 竖屏模式时不需要调用此接口。
  • 1.17之前版本仅支持固定竖屏模横式,即只要当前未打开摄像头采集(未开启预览并且未开始视频推流),设置可生效。打开摄像头后再调用该接口不会生效,不支持动态横竖屏切换。

如果您的手机不支持自适应模式,而您想要设置自适应模式,您需要监听旋转的方向,然后根据角度设置当前的横竖屏。

 /**
  * 监听旋转角度
  */
private OrientationEventListener mOrientationEventListener;

@Override
protected void onResume() {
        super.onResume();
        //开启监听
    if (null==mOrientationEventListener) {
        mOrientationEventListener = new OrientationEventListener(this) {
            @Override
            public void onOrientationChanged(int orientation) {
                if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) {
                    return;  //手机平放时,检测不到有效的角度
                }
                //自适应模式根据角度设置横竖屏方向
                //检测是否有四个角度的改变,设置自适应后,只需要修改
                if (orientation > 350 || orientation < 10) { //0度
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                } else if (orientation > 80 && orientation < 100) { //90度
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                } else if (orientation > 170 && orientation < 190) { //180度
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                } else if (orientation > 260 && orientation < 280) { //270度
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                } else {
                    return;
                }
            }
        };
        mOrientationEventListener.enable();
}
@Override
protected void onPause() {
    super.onPause();
    //停止监听
    if (null != mOrientationEventListener) {
        mOrientationEventListener.disable();
        mOrientationEventListener = null;
    }
}