Netless

Netless

  • 通用文档
  • 常见问题
  • JavaScript
  • Android
  • iOS
  • Server
  • GitHub
  • 🇬🇧 English

›常用功能

产品概述

  • 使用须知
  • 开源项目
  • 版本历史

快速开始

  • 概述
  • 集成
  • 初始化SDK
  • 创建房间/获取房间信息
  • 加入房间

常用功能

  • 文档转换,动态PPT
  • 状态订阅,获取
  • 教具使用
  • 视角操作
  • 白板操作
  • 自定义事件
  • 页面(场景)管理
  • 只读订阅
  • 回放
  • RTC 混音

升级指南

  • 2.9.0迁移指南

视角操作

本文中的 API,都可以在 Room 类中查看。本文示例代码中的 room 即为 whiteRoom 的实例。

White SDK 提供的白板是向四方无限延伸的。同时也允许用户通过鼠标滚轮、手势等方式移动白板。因此,即便是同一块白板的同一页,不同用户的屏幕上可能看到的内容是不一样的。为了满足,所有用户观看同一内容的需求,本文引入了「主播模式」这个概念。

主播视角

sdk 支持将房间内的某一个人设为主播(其他用户会自动变成 观众模式),该用户屏幕上看到的内容即是其他所有观众看到的内容。 当主播进行视角的放缩、移动时,其他人的屏幕也会自动进行放缩、移动等操作,来保证,可以观看到主播端所有的可见内容。

  • 观众端显示的内容,多于主播端的情况

主播模式中,主播所看到的内容,会全部同步到观众端。但是由于观众端屏幕比例可能与主播端不一致。为了完全显示主播端的内容,会进行缩放调整,类似于电影播放时,为了保持原始画面比例并保留原始内容,在某些显示器上,会进行比例缩放,会出现黑边。

视角模式 —— 主播,观众,自由(默认)

public class BroadcastState {
    // 当前视角模式,有如下:
    // 1."freedom" 自由视角,视角不会跟随任何人
    // 2."follower" 跟随视角,将跟随房间内的主播
    // 2."broadcaster" 主播视角,房间内其他人的视角会跟随我
    private ViewMode mode;

    // 房间主播 ID。
    // 如果当前房间没有主播,则为 undefined
    private Long broadcasterId;

    // 主播信息,可以自定义,具体参见下面的数据结构
    private MemberInformation broadcasterInformation;
    ... setter/getter
}

public class MemberInformation {
    // ID
    private Long id;
    // 昵称
    private String nickName;
    // 头像 URL
    private String avatar;
    ... setter/getter
}

设置视角模式

  • 例子:设置当前用户为主播视角
// 主播模式
// 房间内其他人的视角模式会被自动修改成 follower,并且强制观看你的视角。
// 如果房间内存在另一个主播,该主播的视角模式也会被强制改成 follower。
// 就好像你抢了他/她的主播位置一样。
room.setViewMode(ViewMode.broadcaster);

// 自由模式
// 你可以自由放缩、移动视角。
// 即便房间里有主播,主播也无法影响你的视角。
room.setViewMode(ViewMode.freedom);

// 追随模式
// 你将追随主播的视角。主播在看哪里,你就会跟着看哪里。
// 在这种模式中如果你放缩、移动视角,将自动切回 freedom模式。
room.setViewMode(ViewMode.follower);

获取当前视角状态

room.getBroadcastState();

其获取的内容结构,如下图所示

public class BroadcastState {
    private ViewMode mode;
    private Long broadcasterId;
    private MemberInformation broadcasterInformation;
    
    ... getter/setter
}

调整视角

2.2.0新增 API,2.3.2 增加动画选项;回放 replay 与 实时房间 room 都支持该 API

public class Displayer {
    // 调整视角中心
    public void moveCamera(CameraConfig camera);
    // 调整视觉矩形
    public void moveCameraToContainer(RectangleConfig rectange);
}

调整视角中心

moveCamera API,可以用来调整视角,参数均为可选参数。SDK 会根据传入参数,调整视角中心与缩放比例。

// 视角中心移动参数
public class CameraConfig extends WhiteObject {

    public AnimationMode getAnimationMode() {
        return animationMode;
    }
    // 默认连续动画,可以设置为瞬间切换
    public void setAnimationMode(AnimationMode animationMode) {
        this.animationMode = animationMode;
    }

    private AnimationMode animationMode;

    public Double getCenterX() {
        return centerX;
    }
    
    //可选参数,如果不填,则不会发生变化
    public void setCenterX(Double centerX) {
        this.centerX = centerX;
    }

    public Double getCenterY() {
        return centerY;
    }

    //可选参数,如果不填,则不会发生变化
    public void setCenterY(Double centerY) {
        this.centerY = centerY;
    }

    public Double getScale() {
        return scale;
    }

    //可选参数,如果不填,则不会发生变化,替代 zoomScale
    public void setScale(Double scale) {
        this.scale = scale;
    }

    private Double centerX;
    private Double centerY;
    private Double scale;
}

调整视觉矩形

除了调整视角中心,SDK 还提供调整视觉矩形API。

视觉矩形表示你的视角必须容纳的区域。当你设置好视觉矩形后,视角会自动调整到刚好可以完整展示视觉矩形所表示的范围。

public class RectangleConfig extends WhiteObject {
    private Double originX;
    private Double originY;
    private Double width;
    private Double height;

    public RectangleConfig(Double width, Double height, AnimationMode mode) {
        this(width, height);
        this.animationMode = mode;
    }

    // 中心点为初始位置
    public RectangleConfig(Double width, Double height) {
        this.width = width;
        this.height = height;
        this.originX = - width / 2.0d;
        this.originY = - height / 2.0d;
    }

    public RectangleConfig(Double originX, Double originY, Double width, Double height) {
        this.originX = originX;
        this.originY = originY;
        this.width = width;
        this.height = height;
    }

    public RectangleConfig(Double originX, Double originY, Double width, Double height, AnimationMode mode) {
        this(originX, originY, width, height);
        this.animationMode = mode;
    }

    public Double getOriginX() {
        return originX;
    }

    public void setOriginX(Double originX) {
        this.originX = originX;
    }

    public Double getOriginY() {
        return originY;
    }

    public void setOriginY(Double originY) {
        this.originY = originY;
    }

    public Double getWidth() {
        return width;
    }

    public void setWidth(Double width) {
        this.width = width;
    }

    public Double getHeight() {
        return height;
    }

    public void setHeight(Double height) {
        this.height = height;
    }

    public AnimationMode getAnimationMode() {
        return animationMode;
    }

    public void setAnimationMode(AnimationMode animationMode) {
        this.animationMode = animationMode;
    }

    private AnimationMode animationMode;
}

ppt 铺满当前屏幕

2.4.22

// displayer.java
// room player 通用

/**
* 以连续动画的形式,等比例缩放ppt,保证ppt所有内容都在容器内。
* @since 2.4.22
*/
public void scalePptToFit() {
    bridge.callHandler("displayer.scalePptToFit", new Object[]{});
}

/**
* 等比例缩放ppt,保证ppt所有内容都在容器内。
* @param mode 缩放时,动画行为
* @since 2.4.28
*/
public void scalePptToFit(AnimationMode mode) {

禁止视角变化

2.2.0 新增 API

开发者可以通过如下方法禁止用户手动调整视角(使用鼠标滚轮缩放、Touch 板手势移动,缩放、移动端双指操作移动)。

// 禁止用户主动改变视野
room.disableCameraTransform(true);
// 恢复用户视野变化权限
room.disableCameraTransform(false);

相关文档

主播一对多业务实现

Last updated on 6/16/2020 by rick
← 教具使用白板操作 →
  • 主播视角
  • 视角模式 —— 主播,观众,自由(默认)
    • 设置视角模式
    • 获取当前视角状态
  • 调整视角
    • 调整视角中心
    • 调整视觉矩形
  • ppt 铺满当前屏幕
  • 禁止视角变化
  • 相关文档
Netless
接入即互动
产品
管理控制台官网网站Demo 体验Github
公司
加入我们服务条款隐私协议
联系方式
support@netless.link社区
Copyright © 2020 Netless