拉流最佳实践

更新时间:
复制 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指定。

  • 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

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

返回参数

名称

类型

描述

示例值

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