Repository navigation
switch_main_sub_screen
zanxiaofei edited this page Dec 28, 2016
·
1 revision
在连麦的视频数据窗口信息可以做以下设置
- 连麦前可以设置连麦的视频数据是大屏还是下屏显示
- 连麦前小屏显示的大小和位置
- 连麦过程中可以动态切换大小屏显示内容
- 连麦过程中可以移动小屏位置
在注册前调用setRTCMainScreen接口
- RTCConstants.RTC_MAIN_SCREEN_CAMERA:设置camera的视频内容大屏显示
- RTCConstants.RTC_MAIN_SCREEN_REMOTE:设置连麦的远端视频内容大屏显示
mStreamer.setRTCMainScreen(RTCConstants.RTC_MAIN_SCREEN_CAMERA);在注册前调用setRTCSubScreenRect接口
mStreamer.setRTCSubScreenRect(0.65f, 0.f, 0.35f, 0.3f, RTCConstants.SCALING_MODE_CENTER_CROP);demo中提供了点击小屏区域时可动态切换大小屏显示内容,您可根据实际需求更改时机,调用接口为switchRTCMainScreen
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;
}
};