拉流最佳实践

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

什么是拉流

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

拉流模式

说明

适用产品版本

抢占模式

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

实例版

协同模式

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

  • 实例版

  • 矩阵版

说明

矩阵版处于邀测中,如需体验,请提交工单申请。

指定拉流模式

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

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

  • 2:协同模式。

    说明

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

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

创建矩阵时指定拉流模式

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

请求参数

名称

类型

必填

描述

示例值

BizRegionId

string

地域 ID。

cn-hangzhou

NodeName

string

云手机矩阵名称。

node_name

ServerType

string

云手机矩阵规格。

cpm.gn6.gx1

InstanceType

string

实例规格。

说明

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

ac.max

ChargeType

string

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

PrePaid

PeriodUnit

string

购买资源的时长单位。

Month

Period

integer

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

  • PeriodUnityear 时,取值只能为 1。

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

1

AutoPay

boolean

是否自动付费。

true

AutoRenew

boolean

是否开启自动续费。

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

StreamMode

integer

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

1

NetworkType

string

NetworkInfo

object

BandwidthPackageName

string

CidrBlock

string

LimitedBandwidth

integer

InternetChargeType

string

IpRatio

integer

Isp

string

BandwidthPackageType

string

BandwidthPackageId

string

UpBandwidthLimit

integer

DownBandwidthLimit

integer

UseTemplate

string

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

Random

返回参数

名称

类型

描述

示例值

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

BandwidthPackageId

string

修改现有矩阵的拉流模式

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

说明

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

重要

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

请求参数

名称

类型

必填

描述

示例值

NodeId

string

云手机矩阵 ID。

cpn-0ugbptfu473fy****

NewNodeName

string

云手机矩阵的新名称。

node_name_new

StreamMode

integer

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

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>

实例连接任务。

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

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再次请求建立连接也会触发此错误。