Skip to content

switch_main_sub_screen

zanxiaofei edited this page Dec 28, 2016 · 1 revision

连麦窗口设置

在连麦的视频数据窗口信息可以做以下设置

  • 连麦前可以设置连麦的视频数据是大屏还是下屏显示
  • 连麦前小屏显示的大小和位置
  • 连麦过程中可以动态切换大小屏显示内容
  • 连麦过程中可以移动小屏位置

1. 大小屏设置

在注册前调用setRTCMainScreen接口

  • RTCConstants.RTC_MAIN_SCREEN_CAMERA:设置camera的视频内容大屏显示
  • RTCConstants.RTC_MAIN_SCREEN_REMOTE:设置连麦的远端视频内容大屏显示
 mStreamer.setRTCMainScreen(RTCConstants.RTC_MAIN_SCREEN_CAMERA);

2. 小屏位置大小设置

在注册前调用setRTCSubScreenRect接口

mStreamer.setRTCSubScreenRect(0.65f, 0.f, 0.35f, 0.3f, RTCConstants.SCALING_MODE_CENTER_CROP);

3. 动态切换大小屏显示内容

demo中提供了点击小屏区域时可动态切换大小屏显示内容,您可根据实际需求更改时机,调用接口为switchRTCMainScreen

4. 移动小屏位置

demo中提供了在touch move时,如何移动小屏位置,调用接口为setRTCSubScreenRect

大小屏切换和移动的示例代码:

  private CameraTouchHelper.OnTouchListener mRTCSubScreenTouchListener = new CameraTouchHelper.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent event) {
            //获取相对屏幕的坐标,即以屏幕左上角为原点
            mLastRawX = event.getRawX();
            mLastRawY = event.getRawY();
            // 预览区域的大小
            int width = view.getWidth();
            int height = view.getHeight();
            //小窗的位置信息
            RectF subRect = mStreamer.getRTCSubScreenRect();
            int left = (int) (subRect.left * width);
            int right = (int) (subRect.right * width);
            int top = (int) (subRect.top * height);
            int bottom = (int) (subRect.bottom * height);
            int subWidth = right - left;
            int subHeight = bottom - top;


            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    //只有在小屏区域才触发位置改变
                    if (isSubScreenArea(event.getX(), event.getY(), left, right, top, bottom)) {
                        //获取相对sub区域的坐标,即以sub左上角为原点
                        mSubTouchStartX = event.getX() - left;
                        mSubTouchStartY = event.getY() - top;
                        mLastX = event.getX();
                        mLastY = event.getY();
                    }
                    break;
                case MotionEvent.ACTION_MOVE:
                    int moveX = (int) Math.abs(event.getX() - mLastX);
                    int moveY = (int) Math.abs(event.getY() - mLastY);
                    if (mSubTouchStartX > 0f && mSubTouchStartY > 0f && (
                            (moveX > SUB_TOUCH_MOVE_MARGIN) ||
                                    (moveY > SUB_TOUCH_MOVE_MARGIN))) {
                        //触发移动
                        mIsSubMoved = true;
                        updateSubPosition(width, height, subWidth, subHeight);
                    }
                    break;
                case MotionEvent.ACTION_UP:
                    //未移动并且在小窗区域,则触发大小窗切换
                    if (!mIsSubMoved && isSubScreenArea(event.getX(), event.getY(), left, right,
                            top, bottom)) {
                        mStreamer.switchRTCMainScreen();
                    }

                    mIsSubMoved = false;
                    mSubTouchStartX = 0f;
                    mSubTouchStartY = 0f;
                    mLastX = 0f;
                    mLastY = 0f;
                    break;
            }

            return true;
        }
    };

Clone this wiki locally