拉流最佳实践

更新时间:
复制 MD 格式

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

什么是拉流

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

拉流模式

说明

适用产品版本

抢占模式

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

  • 实例版

  • 矩阵版

协同模式

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

  • 实例版

  • 矩阵版

指定拉流模式

实例版和矩阵版均支持通过参数 StreamMode 来指定拉流模式:

  • 1:抢占模式(默认值)。

  • 2:协同模式。

    说明
    • 如果不传入任何值,则默认为抢占模式。

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

可以在创建实例组与矩阵时直接指定拉流模式,或者修改已有实例组与矩阵的拉流模式。

创建时指定拉流模式

创建实例组时指定拉流模式

可以调用CreateAndroidInstanceGroup来创建实例组,并通过参数 StreamMode 的值来指定实例组的拉流模式。

请求参数

名称

类型

必填

描述

示例值

BizRegionId

string

是

地域 ID。可以通过调用查询可用地域查询云手机支持购买的地域列表。

枚举值:

  • cn-shenzhen :

    深圳

  • cn-beijing :

    北京

  • cn-shanghai :

    上海

  • cn-hongkong :

    中国香港

  • ap-southeast-1 :

    新加坡

  • cn-hangzhou :

    杭州

cn-hangzhou

InstanceGroupName

string

否

实例组名称。

说明

实例组名称长度不超过 30 个字符;请以大/小写字母或中文开头,不能以http://和https://开头,仅支持中文、英文、数字、半角冒号(:)、下划线(_)、点号(.)或者连字符(-)。

云手机A

NumberOfInstances

integer

否

实例组中的实例数量。最大值为 100。

1

ChargeType

string

否

计费类型。

枚举值:

  • PostPaid :

    后付费

  • PrePaid :

    预付费

PostPaid

Period

integer

否

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

1

PeriodUnit

string

否

购买资源的时长单位。

枚举值:

  • Month :

    月

  • Year :

    年

  • Hour :

    小时,只能用于按量付费方式

Month

InstanceGroupSpec

string

是

实例组规格。可以通过调用DescribeSpec查询云手机支持购买的规格。

枚举值:

  • acp.perf.large :

    性能型(8vCPU、16GiB 内存、32GiB 存储)

  • acp.basic.small :

    轻量型(2vCPU、4GiB 内存、32GiB 存储)

  • acp.std.large :

    标准型(4vCPU、8GiB 内存、32GiB 存储)

acp.basic.small

AutoPay

boolean

否

是否自动付费。默认为 false。

枚举值:

  • true :

    自动付费,请确保账号有足够的余额

  • false :

    手动付费

false

AutoRenew

boolean

否

是否开启自动续费。默认为 false。

枚举值:

  • true :

    预付费资源到期后自动续费

  • false :

    预付费资源到期后需要手动续费

false

OfficeSiteId

string

否

网络 ID。

  • 创建共享网络实例:网络 ID 选填。填写云手机控制台>网络页面中类型为共享网络的网络 ID。如果控制台没有共享网络,可以不用填写,将会在创建实例组时自动创建一个共享网络。

  • 创建 VPC 网络实例:网络 ID 必填。填写云手机控制台>网络页面中类型为 VPC 网络的网络 ID,如果控制台没有 VPC 网络,则需要先创建网络。

cn-hangzhou+dir-745976****

VSwitchId

string

否

交换机 ID。可以通过调用 DescribeVSwitches 查询交换机列表。

  • 创建共享网络实例:不填写。

  • 创建 VPC 网络实例:交换机 ID 必填。选用此交换机来创建实例。

vsw-uf61uvzhz8ejaw776****

PolicyGroupId

string

否

策略 ID。可以通过调用 ListPolicyGroups 查询策略列表。

pg-b7bxrrwxkijjh****

ImageId

string

是

镜像 ID。可以通过调用 DescribeImageList 查询云手机的镜像列表。

imgc-06zyt9m93zwax****

Amount

integer

否

实例组数量,默认值为 1,最大值为 100。

8

GpuAcceleration

boolean

否

是否开启 GPU 加速。

枚举值:

  • true :

    开启

  • false :

    不开启 [默认值]

false

KeyPairId

string

否

密钥对 ID。创建实例组的时候,如果指定了合法的密钥对 ID,会在这次创建成功的实例上,都绑定该密钥对,不用再重新调用绑定接口。

说明

目前还不支持扩容的时候绑定密钥对。

kp-7o9xywwfutc1l****

ClientToken

string

否

用于保证请求的幂等性,防止重复提交请求。不超过 100 个字符。

asadbuvwiabdbvchj****

EnableIpv6

boolean

否

说明

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

null

Ipv6Bandwidth

integer

否

说明

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

null

Tag

array<object>

否

资源的标签。

object

否

资源的标签。

Value

string

否

标签值。

value

Key

string

否

标签键。

key

NetworkInfo

object

否

BandwidthPackageName

string

否

CidrBlock

string

否

LimitedBandwidth

integer

否

InternetChargeType

string

否

IpRatio

integer

否

Isp

string

否

PayType

string

否

Period

integer

否

PeriodUnit

string

否

AutoPay

boolean

否

AutoRenew

boolean

否

VisibleType

string

否

PromotionId

string

否

PaidCallbackUrl

string

否

BandwidthPackageType

string

否

BandwidthPackageId

string

否

NetworkType

string

否

PromotionId

string

否

StreamMode

integer

否

PaidCallBackUrl

string

否

wya.wuying.aliyun.com/instanceGroup

SaleMode

string

否

InstanceVersion

string

否

返回参数

返回参数

名称

类型

描述

示例值

object

返回参数。

RequestId

string

请求 ID。

1A923337-44D9-5CAD-9A53-95084BD4****

InstanceGroupInfos

array<object>

实例组信息。

object

InstanceGroupId

string

实例组 ID。

ag-cuv4scs4obxch****

InstanceIds

array

实例 ID 列表。

string

实例 ID。

acp-g40b9at5nhjo9****

OrderId

string

订单 ID。

22365781890****

InstanceGroupIds

array

实例组 ID 列表。

string

实例组 ID。

ag-cuv4scs4obxch****

NetworkPackageOrderModel

object

BandwidthPackageOrderId

string

BandwidthPackageId

string

创建矩阵时指定拉流模式

可以调用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指定。

  • 当PeriodUnit为 year 时,取值只能为 1。

  • 当PeriodUnit为 month 时,取值范围为 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

PaidCallbackUrl

string

否

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

否

PaidCallBackUrl

string

否

SwapSize

integer

否

IsSingleImgDisk

boolean

否

ChannelCookie

string

否

返回参数

名称

类型

描述

示例值

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*****

修改现有拉流模式

说明

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

重要

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

修改现有实例组的拉流模式

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

请求参数

请求参数

名称

类型

必填

描述

示例值

InstanceGroupId

string

否

实例组 ID。

ag-cuv4scs4obxhs****

NewInstanceGroupName

string

否

实例组的新名称。

说明
  • 实例组名称长度不超过 30 个字符;请以大/小写字母或中文开头,不能以 http://和 https://开头,仅支持中文、英文、数字、半角冒号(:)、下划线(_)、点号(.)或者连字符(-)

newName

PolicyGroupId

string

否

策略 ID。

pg-2w97kp89gnsif****

StreamMode

integer

否

实例组下实例的串流模式,该参数不传默认为抢占模式。

枚举值:

  • 1 :

    抢占模式 [默认值]

  • 2 :

    协同模式

1

返回参数

返回参数

名称

类型

描述

示例值

object

返回参数。

RequestId

string

请求 ID。

6C83EBE3-F267-5F11-ABF8-4E7B90B****

修改现有矩阵的拉流模式

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

请求参数

名称

类型

必填

描述

示例值

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

ConnectionMode

string

否

建连模式。

custom

InstanceTasks

array<object>

否

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

object

否

实例连接任务。

InstanceId

string

否

实例 ID。

acp-fkuit0cmyfvzz****

TaskId

string

否

任务 ID。

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

Ports

array

否

string

否

返回参数

名称

类型

描述

示例值

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****

Port

integer

建连端口

10000

说明

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