调度服务接入指南

要展示云渲染画面的组件中需要有一个id为player的div,必须拥有,该组件用于输出云渲染的画面。

<div className={styles.player}  id="player">
</div>

组件的css样式设置参考,player组件一般都是充满全屏,然后让页面标题和业务组件显示在画面上方。

.header {
  z-index: 999;
  color: #fff;
}

.player {
  width: 100vw;
  height: 100vh;
  position: absolute !important;
  z-index: 0;
  background-image: linear-gradient(180deg, rgba(3, 23, 66, .99) 0%, rgba(3, 23, 66, .69) 1%, rgba(17, 20, 36, 0) 74%);
}

接入方式:

  1. 获取调度服务的链接(部署后的地址),例如:服务部署在,http://10.18.165.2:8889/
  2. 配置调度服务host
  3. 设置要调度的集群tag,all或者空字符串代表所有集群机器均可调度
  4. 设置用户名和密码,不同的用户对应的连接权限不一样,主要表现在来最大连接数上,如果用户的权限只有1路,那么最大仅支持同时1路任务。
import {CloudRenderEngine} from '@baidu/cloudrenderengine';

// 配置调度服务host 必须
CloudRenderEngine.DispatchServer.host = 'http://10.18.165.2:8889';
// 设置要调度的集群tag 可选,空字符串和all代表不指定集群,全部可调度。
CloudRenderEngine.DispatchServer.tag = 'all';

// 设置用户名和密码 可选,默认都是admin
Engine.CloudRenderEngine.DispatchServer.username='maptest';
Engine.CloudRenderEngine.DispatchServer.password='maptest';
  1. 获取可用项目列表,如果是确定的单个项目,无需这一步(可选)。

配置完host之后,可以通过DispatchServer.GetProjectCommon()获取可用的项目列表,会返回调度服务商所有可用项目的信息,其中name用于启动项目的projectName字段值。

const list = await Engine.CloudRenderEngine.DispatchServer.GetProjectCommon(); 

返回值如下:

 {"data": [
        {
            "name": "default",
            "title": "默认项目",
            "description": "用于展示API使用的项目, 主要结合示例中心使用。",
            "image": "xxxx.png"
        },...]}
  1. 获取当前tag集群可用渲染容量,可用渲染容量数大于0才可以连接(必须)
import {CloudRenderEngine} from '@baidu/cloudrenderengine';

CloudRenderEngine.DispatchServer.GetAllCapacityInfo()
    .then(capacity => {
        // 因为前面选择了tag为all,所以这里查看capacity.all的剩余容量。
        if (capacity.all > 0) {
            // 可以连接了  
        }else (
            alert('服务器暂无剩余容量');
        )
    });
  1. 连接调度服务
// 更多参数参照 https://bj.bcebos.com/mapv-unreal/devDocuments/CloudRenderApp.html


const engine = new CloudRenderEngine({
    connectOnLoad: true,
    shouldShowPlayOverlay: false,
    // consul里配置的英文项目名称
    projectName: 'beijing',
});

const onSuccessed= message => {
    // 调度成功
}

const onLoadError= error => {
    // 调度失败,此处会给出具体原因,比如权限不足,可用调度容量不足,用户名或者密码错误,已达到该用户的最大连接数等。
}
// 渲染场景。调用3中的GetAllCapacity检查capacity大于0后才可以
engine.load(onSuccessed, onLoadError);

const handleEngineLoaded = () => {
    // 执行这个事件后代表资源加载完
    // 加载完成才可以使用engine的一系列方法
};

const disconnected = () => {
    // 服务连接异常时会回调此方法
};

engine.addEventListener('videoInitialised', handleEngineLoaded);
engine.addEventListener('signalingServerError', disconnected);