拉流最佳实践

更新时间:
复制为 MD 格式

为满足不同业务场景的需求,无影云手机提供抢占模式和协同模式这两种拉流模式。本文介绍在不同拉流模式下的拉流最佳实践。

什么是拉流

拉流指通过客户端获取云手机画面并进行查看和操作的过程。为满足不同业务场景的需求,无影云手机提供两种拉流模式。

拉流模式

说明

适用产品版本

抢占模式

同一时间只有一个客户端可以连接一台云手机的画面进行查看与操作。当第一个客户端已经在对云手机进行拉流,则第二个客户端发起连接请求后,第一个客户端断开连接,由第二个客户端接管连接与拉流。

  • 实例版

  • 矩阵版

协同模式

同一时间可以有多个客户端连接同一台云手机的画面进行查看或操作,目前同时连接的客户端数量上限是10个,如果超出该上限,则后续用户无法获取Ticket。由于每多推一路流都会多占用一些带宽,您需要关注带宽占用情况并控制客户端连接数量。此模式通常适用于多端协同操作的场景。

  • 实例版

  • 矩阵版

指定拉流模式

实例版仅支持抢占模式,无需指定。对于矩阵版,矩阵内云手机实例的拉流模式是通过参数StreamMode的值来控制的:

  • 1:抢占模式(默认值)。如果不传入任何值,则默认为抢占模式。

  • 2:协同模式。

    说明

    如果希望创建云手机矩阵时默认采用协同模式,您可以提交工单来申请添加白名单。

因此,您可以在创建矩阵时直接指定拉流模式,或者修改已有矩阵的拉流模式。

创建矩阵时指定拉流模式

您可以调用CreateCloudPhoneNode来创建矩阵,并通过参数StreamMode的值来指定矩阵的拉流模式。

请求参数

名称

类型

必填

描述

示例值

BizRegionId

string

地域 ID。

枚举值:

  • cn-shanghai :

    华东 2(上海)

  • ap-southeast-1 :

    新加坡

  • eu-central-1 :

    德国(法兰克福)

  • cn-hangzhou :

    华东 1(杭州)

cn-hangzhou

NodeName

string

云手机矩阵名称。

node_name

ServerType

string

云手机矩阵规格。

枚举值:

  • cpm.gx7.10xlarge :

    cpm.gx7.10xlarge

  • cpm.gx8.16xlarge :

    cpm.gx8.16xlarge

cpm.gx7.10xlarge

InstanceType

string

实例规格。

说明

如需购买更多规格,您可以联系售前咨询

枚举值:

  • ac.max :

    该规格下默认实例开数为 25 开,可通过设置 PhoneCount 参数调整开数设置(最小 4 开,最大 40 开)

  • ac.plus :

    该规格下默认实例开数为 40 开,可通过设置 PhoneCount 参数调整开数设置(最小 4 开,最大 40 开)

ac.max

ChargeType

string

付费类型。当前仅支持包年包月类型。

枚举值:

  • PrePaid :

    包年包月

PrePaid

PeriodUnit

string

购买资源的时长单位。

枚举值:

  • Month :

    月 [默认值]

  • Year :

Month

Period

integer

购买资源的时长,单位由PeriodUnit指定。

  • PeriodUnityear 时,取值只能为 1。

  • PeriodUnitmonth 时,取值范围为 1、2、3、6。

1

AutoPay

boolean

是否自动付费。

枚举值:

  • flase :

    需要前往阿里云费用与成本中心手动支付 [默认值]

  • true :

    自动支付

true

AutoRenew

boolean

是否开启自动续费。

枚举值:

  • true :

    启用自动续费,实例到期后由系统自动续费

  • false :

    不自动续费,实例到期后手动续费 [默认值]

true

ImageId

string

镜像 ID。

imgc-075cllfeuazh0****

Count

string

云手机矩阵的购买数量。

1

NetworkId

string

办公网络 ID。

cn-hangzhou+dir-5mwr9azebliva****

VSwitchId

string

交换机 ID。

vsw-2zeekryyc1q3sm72l****

Tag

array<object>

资源的标签。

object

资源的标签。

Key

string

标签键。

keyname

Value

string

标签值。

valuename

PhoneDataVolume

integer

独立机身存储的大小。单位:GiB。

10

ServerShareDataVolume

integer

共享机身存储的大小。单位:GiB。

说明

共享机身存储最小值需大于矩阵下的实例开数乘以 10GiB。

200

ResolutionHeight

integer

分辨率的高度。单位:像素。

1280

ResolutionWidth

integer

分辨率的宽度。单位:像素。

720

PhoneCount

integer

单个矩阵中创建云手机实例数量。

25

DisplayConfig

object

显示设置。

Dpi

integer

DPI。取值范围 72~600。

240

Fps

integer

说明

该参数暂未对外开放使用。

null

LockResolution

string

是否锁定分辨率。

枚举值:

  • off :

    关闭

  • on :

    开启

off

StreamMode

integer

云手机矩阵下实例的串流模式,该参数不传默认为抢占模式。

枚举值:

  • 1 :

    抢占模式

  • 2 :

    协同模式

1

NetworkType

string

实例的网络类型。

枚举值:

  • network_pro_ecd :

    云电脑高级办公网络

network_pro_ecd

NetworkInfo

object

实例网络映射信息。

BandwidthPackageName

string

带宽包名称

inst-bandwidth-pkg-1

CidrBlock

string

私网网段

10.10.13.0/24

LimitedBandwidth

integer

带宽包限速峰值,单位 Mbps。使用该带宽包的所有实例(求和)受该带宽上限限制。

200

InternetChargeType

string

带宽包的计费方式。取值:

  • PayByBandwidth(默认值):按带宽计费。

  • PayBy95:表示按传统 95 计费。IPv6 公网带宽默认不支持按传统 95 计费,如需使用,请联系客户经理申请。

-

枚举值:

  • PayBy95 :

    按传统 95 计费

  • PayByBandwidth :

    按带宽计费

PayByBandwidth

IpRatio

integer

IP 与实例比。

枚举值:

  • 128 :

    128 个云手机实例对应一个 EIP(公网出口 IP)

128

Isp

string

线路类型。

枚举值:

  • ChinaUnicom :

    中国联通

  • ChinaTelecom :

    中国电信

  • ChinaMobile :

    中国移动

  • BGP :

    BGP(多线)线路

ChinaTelecom

PayType

string

付费类型。

枚举值:

  • PostPaid :

    按量付费

  • PrePaid :

    包年包月

PostPaid

VisibleType

string

可见范围

CPS

BandwidthPackageType

string

带宽类型。

枚举值:

  • cbwp_ecd :

    精品带宽包

cbwp_ecd

BandwidthPackageId

string

共享带宽实例的 ID。

cbwp-uf6g3hgg*******8s3lxiob3

UpBandwidthLimit

integer

上行带宽限速,单位 Mbps

50

DownBandwidthLimit

integer

下行带宽限速,单位 Mbps

50

UseTemplate

string

创建时是否使用模板。如果使用模版列表的随机模板,则取值为Random,如果传入模板 ID,则使用该模板 ID。

Random

PromotionId

string

SwapSize

integer

IsSingleImgDisk

boolean

返回参数

名称

类型

描述

示例值

object

请求信息。

RequestId

string

请求 ID。

69BCBBE4-FCF2-59B8-AD9D-531EB422****

OrderId

string

订单 ID。

223684716098****

NodeInfos

array<object>

云手机矩阵信息。

object

云手机矩阵信息。

NodeId

string

云手机矩阵 ID。

cpn-e5kxgjyt8s1mb****

InstanceIds

array

云手机实例 ID 列表。

string

云手机实例 ID。

cpn-e5kxgjyt8s1mb****

NetworkPackageOrderModel

object

带宽包订单信息

BandwidthPackageOrderId

string

带宽包订单 ID

25954415983*****

BandwidthPackageId

string

共享带宽的 ID。

cbwp-uf63gsv8j0ir53*****

修改现有矩阵的拉流模式

对于现有矩阵,您可以调用ModifyCloudPhoneNode来修改参数StreamMode的值,从而指定矩阵内所有云手机实例的拉流模式。

说明

该接口为异步接口,后台会有几秒钟的处理时间,请10秒钟后再确认修改结果。

重要

如果在拉流期间调用此接口修改拉流模式,则当前拉流会断开,并向客户端返回错误码2027。为确保您的业务稳定性,建议您不要频繁修改拉流模式,仅在必要时才这样做。关于错误码的详细信息,请参见客户端相关错误码

请求参数

名称

类型

必填

描述

示例值

NodeId

string

云手机矩阵 ID。

cpn-0ugbptfu473fy****

NewNodeName

string

云手机矩阵的新名称。

node_name_new

StreamMode

integer

云手机矩阵下实例的串流模式,该参数不传默认为抢占模式。

枚举值:

  • 1 :

    抢占模式

  • 2 :

    协同模式

1

返回参数

名称

类型

描述

示例值

object

请求信息。

RequestId

string

请求 ID。

7B9EFA4F-4305-5968-BAEE-BD8B8DE5****

获取串流Ticket

调用BatchGetAcpConnectionTicket获取串流Ticket(连接凭证)。该接口在不同拉流模式下的作用和限制有所区别:

  • 抢占模式:

    • 同一时间只能有一个用户连接,如果有多个用户请求Ticket,则后续的请求会触发报错。

    • 同一个用户可以多次请求Ticket,但只有最后一个Ticket生效。

    • 允许抢占的情况下,请求Ticket的操作不会让正在连接的用户断连,只有连接实例时才会抢占前一个用户的连接。

  • 协同模式:可通过传入不同的EnduserId来为不同的用户同时获取Ticket并串流。每次调用只能传入 1 个EnduserId

    说明

    用户的理论数量上限为10个,其中控制台和卡片模式会占用2个用户名额。在实际业务中,建议参与协同的用户数不超过5个。

请求参数

名称

类型

必填

描述

示例值

InstanceGroupId

string

实例组 ID。

ag-25nt4kk9whjh****

InstanceIds

array

云手机实例 ID 列表,可设置 1~100 个。

string

实例 ID。

acp-bj9t2gmys****

EndUserId

string

已分配的用户 ID,如果不传,则会使用后台分配的系统用户获取 Ticket。

本参数的使用方法因云手机产品版本和实例串流模式而异:

  • 云手机实例版或云手机矩阵版(抢占模式):只能通过同一个EnduserId获取Ticket

  • 云手机矩阵版(协同模式):可通过传入不同的EnduserId来为不同的用户(至多 5 个)同时获取Ticket并串流。每次只能传入 1 个EnduserId

说明

实例串流模式可通过ModifyCloudPhoneNode接口的StreamMode参数来定义。

user

InstanceTasks

array<object>

实例连接任务。用于查询 Ticket 获取任务是否完成。

object

实例连接任务。

InstanceId

string

实例 ID。

acp-fkuit0cmyfvzz****

TaskId

string

任务 ID。

cn-hangzhou@c9f5c2e8-f5c4-4b01-8602-000cae94****

返回参数

名称

类型

描述

示例值

object

Schema of Response

RequestId

string

请求 ID。

7B9EFA4F-4305-5968-BAEE-BD8B8DE5****

InstanceConnectionModels

array<object>

实例连接任务结果。

object

实例连接任务结果。

AppInstanceGroupId

string

交付组 ID。

aig-1uzb6heg797z3****

InstanceId

string

实例 ID。

acp-ajxvwo1u0hqvd****

TaskStatus

string

任务状态。状态为 FINISHED 代表可以从 Ticket 字段获取到 Ticket,否则仍需要使用 TaskId 调用本接口查询 Ticket 生成结果。

FINISHED

TaskId

string

任务 ID。

cn-hangzhou@c9f5c2e8-f5c4-4b01-8602-000cae94****

Ticket

string

用于连接用户实例的 Ticket。

piVE58_AdmVSVW7SEW3*AE5*p8mmO5gvItsNOmv4S_f_cNpoU_BOTwChTBoNM1ZJeedfK9zxYnbN5hossqIZCr6t7SGxRigm2Cb4fGaCdBZWIzmgdHq6sXXZQg4KFWufyvpeV*0*Cm58slMT1tJw3****

ErrorCode

string

错误原因。

InvalidResourceId.NotFound

PersistentAppInstanceId

string

持久会话 ID。

p-abdywvcksdb****

AppInstanceId

string

物理实例 ID。

ai-0caoetkqi8kj****

说明

同一个Ticket的有效期为10分钟。

断开用户连接(踢流)

调用DisconnectAndroidInstance断开用户连接。该接口在不同拉流模式下的作用有所区别:

  • 抢占模式:将正在串流的用户断开连接。

  • 协同模式:将正在串流的用户断开连接,并令其Ticket失效。

请求参数

名称

类型

必填

描述

示例值

InstanceIds

array

云手机实例 ID 列表,可设置 1~100 个。

string

云手机实例 ID 列表。

acp-5hh4a31emkt6u****

EndUserId

string

如果使用的是云手机矩阵版,并且实例串流模式为协同模式,则可以通过指定EndUserId的方式断开指定用户的连接,并且令相应的 Ticket 失效。

user1

返回参数

名称

类型

描述

示例值

object

Schema of Response

RequestId

string

请求 ID。

E5138F7E-46B5-526A-8C99-82DEAE6B****

客户端相关错误码

onDisconnected接收的断连错误消息如下表所示。

错误码

说明

2002

当前云手机被抢占。

2004

当前用户连接被断开。

2027

拉流模式已切换。

25

Ticket校验失败。

说明

用户连接被断开后,用同一个Ticket再次请求建立连接也会触发此错误。