You need to enable JavaScript to run this app.
文档中心
云手机

云手机

复制全文
下载 pdf
iOS SDK
接口说明
复制全文
下载 pdf
接口说明

本文档描述了云手机 iOS 客户端 SDK 提供的接口。

接口概览

生命周期相关接口

接口名称

接口描述

initWithAccountId

初始化 SDK

sharedInstance

获取管理器实例

currentVersion

获取 SDK 版本号

currentDeviceId

获取 SDK 生成的设备 ID

serviceDeviceId

获取服务端设备 ID

setDebugInfoEnable

是否开启调试日志

startWithConfig

启动云手机

stop

停止云手机并退出

云手机进程相关接口

接口名称

接口描述

setIdleTime

设置保活时间

setAutoRecycleTime

设置无操作推流服务回收时长

getAutoRecycleTime

获取已设置的无操作推流服务回收时长

switchVideoStreamProfile

切换视频流清晰度

switchBackground

客户端前后台切换

setRemoteAppForeground

云机应用切换到前台

getRemoteBackgroundAppList

获取已切换到后台的云机应用列表

screenShot

云手机画面截图

startRecording

开始云手机画面录屏

stopRecording

停止云手机画面录屏

getFocusedWindowApp

查询屏幕当前焦点应用

setNavBarStatus

设置导航栏开关状态

getNavBarStatus

获取导航栏开关状态

setKeyboardType: type:

拉流过程中,切换本地/云机输入法类型

getKeyboardType

查询当前使用的本地/云机输入法类型

enableControl: state:

设置指定用户是否具有操控权

hasControl: userId:

异步查询指定用户是否具有操控权

getAllControls

异步查询所有用户的操控权详情

sendMessage

向云机实例发送消息,并接收消息发送结果的回调

sendMessage: channel:

当云机存在多个消息通道时,客户端向云机实例发送消息

sendMessage: timeout:

云机有且仅有一个消息通道时,客户端向云机实例发送消息,并指定消息发送超时时间。

sendMessage: timeout: channel:

向云机实例发送消息,并指定消息发送超时时间

sendGeneralMessage

客户端向云机实例发送通用消息

sendClipBoardMessage

发送客户端本地剪贴板消息到云机

sendKeyEvent

发送键盘事件

sendKeyEvent: keyCode:

发送键盘事件

setInterceptSendTouchEvent: intercept

设置是否拦截 SDK 向云机实例发送的触控事件

setRemoteLocationMock

设置远端位置信息

setLocationServiceMode

设置远端请求位置信息的模式

音视频控制相关接口

接口名称

接口描述

startAudioStream

开启音频采集

stopAudioStream

停止音频采集

getLocalAudioCaptureVolume

获取音频采集音量

setLocalAudioCaptureVolume

调节音频采集音量

getLocalAudioPlaybackVolume

获取本地音频的播放音量

setLocalAudioPlaybackVolume

调节本地音频播放音量

getRemoteAudioPlaybackVolume

获取远端音频的播放音量

setRemoteAudioPlaybackVolume

调节远端音频的播放音量

getAudioPlaybackDevice

获取音频播放设备

setAudioPlaybackDevice

设置音频播放设备

startVideoStream

开启视频采集

switchCamera

切换摄像头

stopVideoStream

停止视频采集

setLocalVideoCanvas

设置本地视频渲染时使用的视图,并使用默认渲染模式

setLocalVideoCanvas: renderMode:

设置本地视频渲染时使用的视图,并设置渲染模式

setLocalVideoMirrorMode

设置是否开启镜像翻转本地摄像头画面

setVideoEncoderConfig

配置本地视频编码质量参数

updateVideoRenderMode

更新视频流渲染模式

pushExternalAudioFrame

推送外部音频数据

pushExternalVideoFrame: time: rotation:

推送外部视频数据

switchPaused

暂停开关

volumeUp

提高远端音量

volumeDown

降低远端音量

muteAudio

静音开关

muteVideo

视频开关

setAudioInjectionState

开启/关闭音频注入功能

setVideoInjectionState

开启/关闭视频注入功能

getAudioInjectionState

查询音频注入功能状态

getVideoInjectionState

查询视频注入功能状态

传感器开关参数

接口名称

接口描述

setGyroState

陀螺仪开关

setGravityState

震动开关

setLocationState

地理位置请求开关

setOrientationState

方向开关

setMagneticState

磁力计开关

setAccelerometerState

加速计开关

快速接入

初始化 VePhoneManager 配置

参考示例:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // 初始化SDK,设置全局配置信息
    // accountId:火山引擎账号ID
    // 建议在程序一启动的时候就调用
    [[VePhoneManager sharedInstance] initWithAccountId: accountId];
}

创建 VePhoneManager 实例

描述:配置 VePhoneConfigObject 配置参数,然后调用 startWithConfig: configObj 接口,启动云机实例。
参考示例:

// 设置回调代理
[VePhoneManager sharedInstance].delegate = self;
// 设置容器视图
[VePhoneManager sharedInstance].containerView = self.containerView;
// 配置参数
VePhoneConfigObject *configObj = [VePhoneConfigObject new];
configObj.ak = @"";
configObj.sk = @"";
configObj.token = @"";
configObj.podId = @"";
configObj.userId = @"";
configObj.productId = @"";
// 启动云手机
[[VePhoneManager sharedInstance] startWithConfig: configObj];

#pragma mark - VePhoneManagerDelegate
- (void)phoneManager:(VePhoneManager *)manager startSucceedResult:(NSInteger)streamProfileId reservedId:(NSString *)reservedId extra:(NSDictionary *)extra
{
    // 启动成功,收到首帧画面回调
}

- (void)phoneManager:(VePhoneManager *)manager changedDeviceRotation:(NSInteger)rotation
{
    // 横竖屏方向回调,注意:SDK只负责横竖屏方向回调,不负责横竖屏的旋转,接入时需根据rotation自行处理
}

- (void)phoneManager:(VePhoneManager *)manager onWarning:(VePhoneWarningCode)warnCode
{
    // 警告回调
}

- (void)phoneManager:(VePhoneManager *)manager onError:(VePhoneErrorCode)errCode
{
    // 错误回调
}

配置参数
VePhoneConfigObject 配置参数如下:

参数

类型

是否必填

描述

ak

NSString

是

用于用户鉴权的临时 Access Key,需通过调用服务端 STSToken 接口 获取

sk

NSString

是

用于用户鉴权的临时 Secret Key,需通过调用服务端 STSToken 接口 获取

token

NSString

是

用于用户鉴权的临时 Token,需通过调用服务端 STSToken 接口 获取

userId

NSString

是

自定义客户端用户 ID,用于标识用户在流媒体房间中的身份

productId

NSString

是

云手机业务 ID,可通过火山引擎云手机控制台『业务管理』页面获取

podId

NSString

否

实例 ID,可通过火山引擎云手机控制台『实例管理』页面获取(如不指定,则由具体调度逻辑调度实例)

appId

NSString

否

需要启动的应用 ID(推流时直接打开应用),可通过火山引擎云手机控制台『应用管理』页面获取

roundId

NSString

否

当次启动的生命周期标识,可以用该参数查询使用时长,链路日志等
命名规则如下:

  • 最大长度为128位的非空字符串,支持的字符集范围为:
  • 大写字母 A ~ Z
  • 小写字母 a ~ z
  • 数字 0 ~ 9
  • 下划线 "_", 减号 "-"

planId

NSString

否

火山侧套餐 ID

accountId

NSString

否

火山账号ID

reset

BOOL

否

退出后,是否重置设备环境:

  • true: 重置
  • false: 不重置(默认)

videoStreamProfileId

NSInteger

否

视频流清晰度 ID;如不传入,则使用默认清晰度,详细信息,参考 云手机清晰度档位说明

localKeyboardEnable

BOOL

否

本地键盘开关:

  • YES:打开本地键盘
  • NO:打开云手机键盘

autoRecycleTime

NSInteger

否

设置无操作自动回收服务时长,单位秒(如不设置或设置为0,则使用默认时长300秒,支持设置的上限值为7200,即2小时)

userTag

NSString

否

用户标签,由业务方指定

remoteMockLocation

否

云机虚拟定位信息

remoteWindowSize

CGSize

否

设置云机推流分辨率(width 和 height),取值范围 >= 0,说明如下:

  • 如果不传,默认获取初始化时传入的 containerView 的宽高作为请求参数上传;
  • 当 width = 0,height = 0 时,服务端按照原始画面和分辨率推流;
  • 当 width > 0, height > 0 时,将指定的宽高作为请求参数上传给服务端做分辨率适配(如果云机屏幕为竖屏,指定的 width 必须小于 height);
  • 其他情况把初始化时传入的 containerView 的 width 和 height 上传给服务端

videoRenderMode

VeBaseVideoRenderMode

否

指定视频流渲染模式:

  • VeBaseVideoRenderModeFit(等比缩放居中模式,默认)
  • VeBaseVideoRenderModeFill(非等比拉伸模式)
  • VeBaseVideoRenderModeCover(等比例缩放模式)

对渲染模式的详细说明,参考 视频流渲染模式选项

rotationMode

VeBaseRotationMode

否

指定视频流的旋转模式:

  • VeBaseRotationModePortrait(竖屏方向)
  • VeBaseRotationModeLandscape(横屏方向)
  • VeBaseRotationModeAutoRotation(自适应旋转,默认)

对视频流旋转模式的详细说明,参考 视频流旋转模式选项

extraDict

NSDictionary

否

根据业务需要,自定义扩展参数

waitTime

NSInteger

否

云手机实例进房后,等待客户端加入房间的最大允许时长。
当云手机处于房间中而没有客户端加入,或者所有客户端都已离开房间后,云手机将在到达此参数设置的时长后自动退出房间。
单位为 s,默认值为 10,取值范围为 [10, 259200],传入非法参数时自动调整为默认值即 10s。
请根据实际需求合理设置此参数,以确保云手机在没有客户端活动时能够及时释放资源。

参考示例:

@interface VePhoneConfigObject : NSObject

/**--------------------------必选参数----------------------------------*/
/** 鉴权参数 */
@property (nonatomic, copy) NSString *ak;
/** 鉴权参数 */
@property (nonatomic, copy) NSString *sk;
/** 鉴权参数 */
@property (nonatomic, copy) NSString *token;
/** 自定义客户端用户 ID */
@property (nonatomic, copy) NSString *userId;
/** 业务 ID */
@property (nonatomic, copy) NSString *productId;

/**--------------------------可选参数----------------------------------*/
/** 指定实例 ID */
@property (nonatomic, copy) NSString *podId;
/** 指定启动的应用 ID */
@property (nonatomic, copy) NSString *appId;
/** 当次启动的生命周期标识 */
@property (nonatomic, copy) NSString *roundId;
/** 火山侧套餐 ID */
@property (nonatomic, copy) NSString *planId;
/** 火山账号ID */
@property (nonatomic, copy) NSString *accountId;
/** 退出后,是否还原,默认:NO */
@property (nonatomic, assign) BOOL reset;
/** 本地键盘开关 */
@property (nonatomic, assign) BOOL localKeyboardEnable;
/** 无操作保活时长 */
@property (nonatomic, assign) NSInteger autoRecycleTime;
/** 清晰度 ID,不传使用默认档位 */
@property (nonatomic, assign) NSInteger videoStreamProfileId;
/** 用户标签,业务方指定 */
@property (nonatomic, copy) NSString *userTag;
/** 远端虚拟定位信息 */ 
@property (nonatomic, strong) VeBaseLocationInfo *remoteMockLocation;
/** 设置远端推流分辨率 */
@property (nonatomic, assign) CGSize remoteWindowSize;
/** 画面渲染模式 */
@property (nonatomic, assign) VeBaseVideoRenderMode videoRenderMode;
/** 画面旋转模式,默认:VeBaseRotationModeAutoRotation */
@property (nonatomic, assign) VeBaseRotationMode rotationMode;
/** 根据业务需要,自定义附加参数 */
@property (nonatomic, strong) NSDictionary<NSString *, NSString *> *extraDict;
/** 云手机实例等待客户端加入房间的最大允许时长 */
@property (nonatomic, assign) NSInteger waitTime;

@end

订阅音视频流

在调用 startWithConfig: 启动云手机之前,指定启动云手机时拉取音视频流类型(如不指定,则正常拉取音视频流):

  • VeBaseStreamTypeVideo(仅拉取视频流,不拉取音频流)
  • VeBaseStreamTypeAudio(仅拉取音频流,不拉取视频流)
  • VeBaseStreamTypeBoth(启动后正常拉取音视频流,默认)
/**
 * 设置“媒体流”订阅类型
 * 默认:VeBaseStreamTypeBoth
 * 在调用 startWithConfig: 之前设置,不支持拉流过程中修改
 * 收到首帧之后,可通过调用 muteAudio:、muteVideo:、switchPaused: 接口恢复
 */
@property (nonatomic, assign) VeBaseStreamType streamType;

设置音频采集方式

在调用 startWithConfig: 启动云手机之前,指定“音频”的采集方式:

  • VeBaseMediaSourceTypeInternal(SDK 内部采集,默认)
  • VeBaseMediaSourceTypeExternal(外部自定义采集)
/**
 * 设置“音频“采集方式
 * 默认:VeBaseMediaSourceTypeInternal
 * 在调用 startWithConfig: 之前设置,不支持拉流过程中修改
 */
@property (nonatomic, assign) VeBaseMediaSourceType audioSourceType;

设置视频采集方式

在调用 startWithConfig: 启动云手机之前,指定“视频”的采集方式:

  • VeBaseMediaSourceTypeInternal(SDK 内部采集,默认)
  • VeBaseMediaSourceTypeExternal(外部自定义采集)
/**
 * 设置“视频”采集方式
 * 默认:VeBaseMediaSourceTypeInternal
 * 在调用 startWithConfig: 之前设置,不支持拉流过程中修改
 */
@property (nonatomic, assign) VeBaseMediaSourceType videoSourceType;

设置定位模式

在调用 startWithConfig: 启动云手机之前,指定“定位”的模式:

  • VeBaseLocationModeAuto(自动模式,默认)
  • VeBaseLocationModeManual(手动模式)
/**
 * 设置”定位“模式
 * 默认:VeBaseLocationModeAuto
 * 在调用 startWithConfig: 之前设置,不支持拉流过程中修改
 * VeBaseLocationModeAuto:会触发“phoneManager:onSentLocalLocation:”回调
 * VeBaseLocationModeManual:会触发“phoneManager:onReceivedRemoteLocationRequest:minTime:minDistance:numUpdates:、“phoneManager:onRemoteLocationRequestEndedFromPhoneManager:”回调
 */
@property (nonatomic, assign) VeBaseLocationMode locationServiceMode;

接口说明

初始化 SDK

描述:初始化 SDK,设置全局配置信息(建议在程序启动的时候调用,时机越早越好)。

参数

类型

描述

accountId

NSString

火山引擎用户账号,可通过火山引擎官网页面右上角 用户 > 账号管理 > 主账号信息 获取

- (void)initWithAccountId:(NSString *)accountId;

获取管理器实例

描述:获取管理器实例(返回 VePhoneManager 对象)。

+ (VePhoneManager *)sharedInstance;

获取 SDK 版本信息

描述:获取 vePhoneSDK 的当前版本号。

+ (NSString *)currentVersion;

获取本地设备 ID

描述:获取 SDK 生成的本地设备 ID,用于后台查询 SDK 日志,进行调试和问题排查。格式要求为 16 位,纯数字;(建议接入方在需要问题排查时,提供给火山引擎技术支持)。

+ (NSString *)currentDeviceId;

获取服务端设备 ID

描述:获取 SDK 生成的服务端设备 ID,用于后台查询 SDK 日志,进行调试和问题排查。格式要求为 32 位,字母和数字组合;(建议接入方在需要问题排查时,提供给火山引擎技术支持)。

+ (NSString *)serviceDeviceId;

开启调试日志

描述:开启调试日志信息。

参数

类型

描述

enable

BOOL

是否开启调试日志(默认 NO)

- (void)setDebugInfoEnable:(BOOL)enable;

启动云手机

描述:启动云手机接口。

调用此接口,会触发“phoneManager:startSucceedResult:reservedId:extra:”回调

参数

类型

描述

configObj

VePhoneConfigObject

启动云手机配置参数,可参考 配置参数说明

- (void)startWithConfig:(VePhoneConfigObject *)configObj;

退出

描述:停止从云机拉流,并且退出,但不会回收客户端本地资源。

- (void)stop;

云手机进程相关接口

设置保活时间

描述:在应用运行中动态设置客户端切后台之后,云机服务的保活时间(如不设置,则使用默认保活时长 300 秒;支持设置的上限值为 7200 秒,即 2 小时;如需设置更长时间,可联系火山引擎云手机技术支持)。

当客户端切后台时开始计时。如用户在设置的保活时间到达时未切回前台,服务端将断开连接。
调用此接口,会异步触发 phoneManager:onIdleTimeChanged:callUserId:code: 回调

参数

类型

描述

time

NSInteger

保活时间,单位秒

- (void)setIdleTime:(NSInteger)time;

查询保活时间

描述:在应用运行中,查询已设置的云端保活服务时间。

调用此接口,会异步触发 phoneManager:onGetIdleTime:code: 回调

- (void)getIdleTime;

设置无操作推流服务回收时长

描述:在应用运行中动态设置无操作推流服务回收时长。
该接口用于设定一个时长,如果在这个时长内客户端没有任何操作,云手机实例将停止推流并自动退出。
如不设置或设置为 0,则使用默认时长 300 秒;支持设置的上限值为 864000 秒,即 24 小时。
如需设置更长时间,可联系火山引擎云手机技术支持。

  • 如果已在 VePhoneConfigObject 配置参数中通过 autoRecycleTime 参数设置,动态设置的时长优先级高。
  • 调用此接口,会触发 phoneManager:onAutoRecycleTimeChanged:callUserId:code: 回调。

参数

类型

描述

time

NSInteger

无操作推流服务回收时长,单位秒

- (void)setAutoRecycleTime:(NSInteger)time;

获取无操作推流服务回收时长

描述:获取已设置的无操作推流服务回收时长。

调用此接口,会触发 phoneManager:onGetAutoRecycleTime:code: 回调。

- (void)getAutoRecycleTime;

清晰度切换

描述:在云手机运行过程中,可通过指定清晰度 ID,切换视频流的清晰度。

调用此接口,会触发 phoneManager:onVideoStreamProfileChanged:fromStreamProfileId:callUserId:targetParams:result: 回调。

参数

类型

描述

streamProfileId

NSInteger

清晰度 ID,参考 云手机清晰度档位说明

- (void)setVideoStreamProfile:(NSInteger)streamProfileId;

查询当前清晰度

描述:在应用运行中,查询已设置的云机清晰度 ID。

调用此接口,会触发 phoneManager:onGetVideoStreamProfile:result: 回调。

- (void)getVideoStreamProfileId;

客户端前后台切换

描述:设置客户端应用切换前后台的状态。

调用此接口,会触发 phoneManager:onBackgroundSwitched: 回调。

参数

类型

描述

enable

BOOL

客户端切换前后台:

  • true(切后台)
  • false(切前台)
- (void)switchBackground:(BOOL)enable;

云机应用切换前台

描述:将指定云机应用切换到前台。

调用此接口,会触发 phoneManager:onRemoteAppSwitchedForeground:switchType 和phoneManager:onRemoteAppSwitchedBackground:switchType: 回调。

参数

类型

描述

packageName

NSInteger

应用包名(非必传)

- (void)setRemoteAppForeground:(NSString *)packageName;

获取云机后台应用列表

描述:获取已切换到后台的云机应用列表(客户端退出实例重新拉流后,也可调用该接口获取客户端退出之前已切换后台的应用列表)。

调用此接口,会触发 phoneManager:onRevicedRemoteAppList: 回调。

- (void)getRemoteBackgroundAppList;

云手机画面截图

描述:对当前云手机画面进行截图,并获取在云手机实例中保存截图文件的路径以及下载录屏文件的地址。

调用此接口,会触发 phoneManager:onScreenShot:savePath:downloadUrl: 回调。

参数

类型

描述

savedOnPod

BOOL

是否保存截图文件在云手机实例:

  • YES(上传截图文件到火山引擎对象存储,并保存截图文件在云手机实例中)
  • NO(上传截图文件到火山引擎对象存储,上传完成后,删除保存在云手机实例中的文件,默认)

说明:当云手机存储空间小于600MB时,如指定 saveOnPod=true,则不可执行截图操作;如指定 saveOnPod=false,可执行截图操作。

- (void)screenShot:(BOOL)savedOnPod;

云手机画面录屏

描述:对当前云手机画面进行录屏,并获取在云手机实例中保存录屏文件的路径以及下载录屏文件的地址。

调用此接口,会触发 phoneManager:status:savePath:msg:downloadUrl: 回调。

参数

类型

描述

duration

NSInteger

设置最大录屏时长(单位:秒),支持设置的最大值为14400(即4小时)

saveOnPod

Bool

是否保存录屏文件在云手机实例:

  • YES(上传录屏文件到火山引擎对象存储,并保存录屏文件在云手机实例中)
  • NO(上传录屏文件到火山引擎对象存储,上传完成后,删除保存在云手机实例中的文件,默认)
- (void)startRecording:(NSInteger)duration saveOnPod:(BOOL)saveOnPod;

停止画面录屏

描述:主动停止对当前云手机画面进行录屏。

- (void)stopRecording;

查询屏幕当前焦点应用

描述:查询屏幕当前的焦点窗口应用名称。

调用此接口,会触发 phoneManager:getFocusedWindowApp:packageName: 回调。

- (void) getFocusedWindowApp;

设置导航栏开关状态

描述:设置云手机当前导航栏开关状态(打开/隐藏)。

参数

类型

描述

status

NSInteger

设置导航栏开关状态:

  • 1(打开导航栏,launcher和非全面屏应用会显示导航栏,但申请全面屏时,应用导航栏自动隐藏)
  • 0(隐藏导航栏)
- (void)setNavBarStatus:(NSInteger)status;

获取导航栏开关状态

描述:获取云手机当前导航栏开关状态(打开/隐藏)。

调用此接口,会触发 phoneManager:onNavBarStatus: 回调。

- (void)getNavBarStatus;

切换本地/云机输入法类型

描述:拉流过程中,切换本地/云机输入法类型。

调用此接口,会触发 phoneManager:onKeyboardTypeChanged: 回调。

参数

类型

描述

type

VePhoneKeyboardType

输入法类型,参考 键盘类型枚举说明

- (NSInteger)setKeyboardType:(VePhoneKeyboardType)type;

查询输入法类型

描述:查询当前使用的本地/云机输入法类型。

调用此接口,会触发 phoneManager:onGetKeyboardTypeResult: 回调。

- (NSInteger)getKeyboardType;

设置用户的操控权

描述:当多个用户通过不同客户端连接到同一云手机实例时,支持开启或关闭用户对云手机的操控权。

调用此接口,会触发 phoneManager:onEnableControlResult:state:message: 回调。

参数

类型

描述

state

VePhoneControlState

设置指定用户是否具有云手机操控权(每个新用户连接云手机时默认具备操控权,可以通过本接口动态关闭控制权):

  • userId:用户 ID
  • enable:开启或关闭该用户的操控权
- (void)enableControl:(VePhoneControlState *)state;
/** ------------ 用户操控权 ------------- */
@interface VePhoneControlState : NSObject
/**
 * 目标用户ID
 */
@property (nonatomic, copy) NSString *userId;
/**
 * 目标用户是否具有操控权
 */
@property (nonatomic, assign) BOOL enable;

@end

查询指定用户的操控权

描述:异步查询指定用户是否具有云手机操控权。

调用此接口,会触发 phoneManager:onHasControlResult:state:message: 回调。

参数

类型

描述

userId

NSString

查询的用户 ID

- (void)hasControl:(NSString *)userId;

查询所有用户的操控权详情

描述:异步查询所有用户的云手机操控权。

调用此接口,会触发 phoneManager:onAllControlsResult:list:message: 回调。

- (void)getAllControls;

使用唯一消息通道向云机发送消息

描述:云机有且仅有一个消息通道,客户端向云机实例发送消息。有关 Message Channel SDK 的使用方法,参考 Message Channel SDK 接入说明。

参数

类型

描述

payload

NSString

发送的消息内容

- (VeBaseChannelMessage *)sendMessage:(NSString *)payload;

使用指定消息通道向云机发送消息

描述:当云机存在多个消息通道时,客户端向云机实例发送消息。

参数

类型

描述

payload

NSString

发送的消息内容

channel_uid

NSString

云机初始化 veMessageChannelClient 时指定的通道 ID

- (VeBaseChannelMessage *)sendMessage:(NSString *)payload channel:(NSString *)channel_uid;

使用唯一的消息通道向云机发送消息(指定超时时间)

描述:云机有且仅有一个消息通道时,客户端向云机实例发送消息,并指定消息发送超时时间。

调用此接口会触发 phoneManager:onSendMessageResult:messageId: 回调。

参数

类型

描述

payload

NSString

发送的消息内容

time

NSInteger

消息发送超时时长,单位 ms

- (VeBaseChannelMessage *)sendMessage:(NSString *)payload timeout:(NSInteger)time;

使用指定的消息通道向云机发送消息(指定超时时间)

描述:客户端向云机实例发送消息,并指定消息发送超时时间。

调用此接口会触发 phoneManager:onSendMessageResult:messageId: 回调。

参数

类型

描述

payload

NSString

发送的消息内容

time

NSInteger

消息发送超时时长,单位 ms

channel_uid

NSString

云机初始化 veMessageChannelClient 时指定的通道 ID

- (VeBaseChannelMessage *)sendMessage:(NSString *)payload timeout:(NSInteger)time channel:(NSString *)channel_uid;

VeBaseChannelMessage 参数说明

参数

类型

描述

mid

NSString

消息 ID

type

NSInteger

消息类型。取值如下:

  • 0:文本
  • 1:二进制

说明

该参数取值为 1 时,暂不支持。

text

NSString

消息体(文本)

data

NSData

消息体(二进制)

说明

该参数暂不支持

time

NSString

消息发送超时时长

srcUid

NSString

消息发送方的用户 ID

destUid

NSString

消息接收方的用户 ID

@interface VeBaseChannelMessage : NSObject
/** 消息Id */
@property (nonatomic, copy) NSString *mid;
/** 消息类型,0:文本 1:二进制 */
@property (nonatomic, assign) NSInteger type;
/** 消息体(文本)*/
@property (nonatomic, copy) NSString *text;
/** 消息体(二进制)*/
@property (nonatomic, strong) NSData *data;
/** 发送消息的时间戳,ms*/
@property (nonatomic, copy) NSString *time;
/** 发送方Uid */
@property (nonatomic, copy) NSString *srcUid;
/** 接收方Uid */
@property (nonatomic, copy) NSString *destUid;
 
@end

发送通用消息

描述:客户端向云机实例发送通用消息。

参数

类型

描述

message

NSString

发送的消息内容

- (void)sendGeneralMessage:(NSString *)message;

发送剪贴板消息

描述:发送客户端本地剪贴板消息到云机。

调用此接口会触发 phoneManager:receivedClipBoardMessage: 回调。

参数

类型

描述

dataArray

NSArray<NSString>

发送的消息内容

- (void)sendClipBoardMessage:(NSArray<NSString *> *)dataArray;

文件传输

描述:用于客户端与云机应用之间进行文件传输的相关功能。
注意:文件传输功能需配合 2025 年 7 月 8 日之后发布的公共镜像版本使用。
参考示例:

@interface VeFile : NSObject

/** 文件名 */
@property (nonatomic, copy) NSString *name;
/** 文件二进制值 */
@property (nonatomic, strong) NSData *fileData;
/** 文件MD5 */
@property (nonatomic, copy) NSString *md5;
 /** 本地文件路径 */
@property (nonatomic, copy) NSString *localFilePath;
 /** 云机文件路径 */
@property (nonatomic, copy) NSString *podFilePath;

@end

@interface VePhoneManager : NSObject
/// 开始从客户端推送文件到云机实例
/// - Parameters:
///   - file: 文件路径
///   - target: 目标路径
///   - start: 推送开始回调
///   - progress: 推送进度回调
///   - complete: 推送完成回调
///   - cancel: 取消推送回调
///   - error: 推送错误回调
- (void)startPushFile:(VeFile *)file
               target:(NSString *)target
              onStart:(void(^)(VeFile *file))start
           onProgress:(void(^)(VeFile *file, NSInteger progress))progress
           onComplete:(void(^)(VeFile *file))complete
             onCancel:(void(^)(VeFile *file))cancel
              onError:(void(^)(VeFile *file, VePhoneErrorCode err))error;

/// 开始从云机实例拉取文件到客户端本地
/// - Parameters:
///   - file: 文件
///   - progress: 拉取进度回调
///   - complete: 拉取完成回调
///   - cancel: 取消拉取回调
///   - error: 拉取错误回调
- (void)startPullFile:(VeFile *)file
              onStart:(void(^)(VeFile *file))start
           onProgress:(void(^)(VeFile *file, NSInteger progress))progress
           onComplete:(void(^)(VeFile *file, NSString *url))complete
             onCancel:(void(^)(VeFile *file))cancel
              onError:(void(^)(VeFile *file, VePhoneErrorCode err))error;

/// 开始从云机实例拉取文件到客户端本地
/// - Parameters:
///   - file: 文件路径
///   - target: 客户端本地目标路径 注:如不传target参数,默认下载文件至系统相册;传入target参数时,下载文件至App沙盒路径下
///   - progress: 拉取进度回调
///   - complete: 拉取完成回调
///   - cancel: 取消拉取回调
///   - error: 拉取错误回调
- (void)startPullFile:(VeFile *)file
               target:(NSString *)target
              onStart:(void(^)(VeFile *file))start
           onProgress:(void(^)(VeFile *file, NSInteger progress))progress
           onComplete:(void(^)(VeFile *file, NSString *url))complete
             onCancel:(void(^)(VeFile *file))cancel
              onError:(void(^)(VeFile *file, VePhoneErrorCode err))error;

/// 终止文件推送任务
/// - Parameter file: 文件参数
- (void)stopPushFile:(VeFile *)file;

/// 终止文件接收任务
/// - Parameter file: 文件参数
- (void)stopPullFile:(VeFile *)file;

@end

发送键盘事件

描述:发送键盘事件到云机实例。

参数

类型

描述

keyCode

NSInteger

可选项包括:

  • 3(Home键)
  • 4(返回键)
  • 82(菜单键)
  • 187(最近任务列表)
- (NSInteger)sendKeyEvent:(NSInteger)keyCode;

发送键盘事件

描述:发送键盘事件到云机实例。

参数

类型

描述

action

NSInteger

可选项包括:

  • 0(Down,按键按下动作)
  • 1(Up,按键抬起动作)

keyCode

NSInteger

可选项包括:

  • 3(Home键)
  • 4(返回键)
  • 82(菜单键)
  • 187(最近任务列表)
- (NSInteger)sendKeyEvent:(NSInteger)action keyCode:(NSInteger)keyCode;

设置是否拦截触控事件

描述:设置是否拦截 SDK 向云机实例发送的触控事件(收到首帧,调用此接口,传入YES时,会收到 phoneManager:onTouchEvent: 回调,业务方根据需要消费触控事件)。

参数

类型

描述

intercept

BOOL

设置是否拦截 SDK 向云机实例发送的触控事件

  • YES(拦截,回传触控事件)
- (void)setInterceptSendTouchEvent:(BOOL)intercept;

触控操作参数说明

参数

类型

描述

x

CGFloat

画面 X 轴绝对值,取值范围:[0, 1]

y

CGFloat

画面 Y 轴绝对值,取值范围:[0, 1]

pointerId

NSInteger

与当前触控事件相关的触控点 ID,标识某个手指

action

VeBaseTouchActionType

当前触控事件对应的动作,参考 触控 Action 类型

@interface VeBaseTouchEventItem : NSObject
/**
 * 画面 X 轴绝对值,[0, 1]
 */
@property (nonatomic, assign) CGFloat x;
/**
 * 画面 Y 轴绝对值,[0, 1]
 */
@property (nonatomic, assign) CGFloat y;
/**
 * 触控唯一ID,标识某个手指
 */
@property (nonatomic, assign) NSInteger pointerId;
/**
 * 触控动作
 */
@property (nonatomic, assign) VeBaseTouchActionType action;

@end

设置远端定位信息

描述:设置远端经纬度信息。

调用此接口,会触发 phoneManager:onRemoteLocationUpdated: 回调。

参数

类型

描述

location

VeBaseLocationInfo

定位信息,参考以下 定位信息说明

- (void)setRemoteLocationMock:(VeBaseLocationInfo *)location;

定位信息说明

参数

类型

描述

latitude

double

纬度

longitude

double

经度

@interface  : NSObject
/** 纬度 */
@property (nonatomic, assign) double latitude;
/** 经度 */
@property (nonatomic, assign) double longitude;

@end

设置远端请求定位的模式

描述:设置远端请求定位信息的模式。

参数

类型

描述

mode

VeBaseLocationMode

设置云机请求获取定位信息的模式:

  • 0(自动模式,默认,需要通过 locationEnable 开关开启定位服务)
  • 1(手动模式,通过 setRemoteLocationMock 接口设置远端位置信息)
- (void)setLocationServiceMode:(VeBaseLocationMode)mode;

音视频控制相关接口

开启音频采集

描述:获取麦克风权限后,采集并发送音频数据。

- (void)startAudioStream;

停止音频采集

描述:关闭音频数据发送,并且不进行音频采集。

- (void)stopAudioStream;

获取音频采集音量

描述:获取麦克风采集音频的音量

- (NSInteger)getLocalAudioCaptureVolume;

调节音频采集音量

描述:调节麦克风采集音频的音量。

参数

类型

描述

volume

NSInteger

指定采集音量大小(百分比,范围:[0, 100],默认值:100)

- (void)setLocalAudioCaptureVolume:(NSInteger)volume;

获取本地音频播放音量

描述:获取本地音频的播放音量。

- (NSInteger)getLocalAudioPlaybackVolume;

调节本地音频播放音量

描述:调节本地音频的播放音量。

参数

类型

描述

volume

NSInteger

指定播放音量大小(百分比,范围:[0, 100],默认值:100)

- (void)setLocalAudioPlaybackVolume:(NSInteger)volume;

获取远端音频播放音量

描述:获取远端音频的播放音量。

- (NSInteger)getRemoteAudioPlaybackVolume;

调节远端音频播放音量

描述:调节远端音频的播放音量。

参数

类型

描述

volume

NSInteger

指定播放音量大小(百分比,范围:[0, 100],默认值:100)

- (void)setRemoteAudioPlaybackVolume:(NSInteger)volume;

获取音频播放设备

描述:获取可用的音频播放设备。

- (VeBaseAudioRoute)getAudioPlaybackDevice;

设置音频播放设备

描述:指定音频播放设备。

参数

类型

描述

audioRoute

VeBaseAudioRoute

音频播放设备类型:

  • VeBaseAudioRouteHeadset(有线耳机)
  • VeBaseAudioRouteEarpiece(听筒)
  • VeBaseAudioRouteSpeakerphone(扬声器)
  • VeBaseAudioRouteHeadsetBluetooth(蓝牙耳机)
  • VeBaseAudioRouteHeadsetUSB(USB 设备)
- (void)setAudioPlaybackDevice:(VeBaseAudioRoute)audioRoute;

开启视频采集

描述:获取本地摄像头权限后,采集并发送摄像头视频数据。

参数

类型

描述

cameraId

VePhoneCameraID

指定前后摄像头:

  • VeBaseCameraIdFront(前置摄像头)
  • VeBaseCameraIdBack(后置摄像头)
- (void)startVideoStream:(**VeBaseCameraId**)cameraId;

切换摄像头

描述:切换前后摄像头。

参数

类型

描述

cameraId

VePhoneCameraID

切换前后摄像头:

  • VeBaseCameraIdFront(前置摄像头)
  • VeBaseCameraIdBack(后置摄像头)
- (void)switchCamera:(VePhoneCameraID)cameraId;

停止视频采集

描述:关闭视频数据发送,并且不进行视频采集。

- (void)stopVideoStream;

设置本地视频渲染视图

描述:设置本地视频渲染时使用的视图,并使用默认渲染模式(VePhoneRenderModeHidden,视窗填满优先)

参数

类型

描述

view

UIView

视图

- (void)setLocalVideoCanvas:(UIView *)view;

设置本地视频渲染视图和模式

描述:设置本地视频渲染时使用的视图,并设置渲染模式

参数

类型

描述

view

UIView

视图

mode

VePhoneRenderMode

设置渲染模式:

  • 1(VePhoneRenderModeHidden;默认)
  • 2(VePhoneRenderModeFit)
  • 3(VePhoneRenderModeAdaptive)
- (void)setLocalVideoCanvas:(UIView *)view renderMode:(VePhoneRenderMode)mode;

镜像翻转本地摄像头画面

描述:使用“前置摄像头”采集时,是否开启镜像翻转本地摄像头画面

参数

类型

描述

type

VeBaseMirrorType

可选枚举值及说明如下:

  • 0(VeBaseMirrorTypeNone,默认)
  • 1(VeBaseMirrorTypeRender)
- (void)setLocalVideoMirrorType:(VeBaseMirrorType)type;

设置视频编码质量参数

描述:根据客户端的网络情况以及接收端的网络情况以及订阅方式,配置本地视频编码质量参数

参数

类型

描述

videoSolutions

NSArray<VePhoneVideoSolution>

本地视频采集和编码质量参数,参考以下 视频采集参数说明

- (void)setVideoEncoderConfig:(NSArray<VePhoneVideoSolution *> *)videoSolutions;

视频采集参数说明

参数

类型

描述

width

NSInteger

视频宽度,单位:px

height

NSInteger

视频高度,单位:px

frameRate

NSInteger

视频帧率,单位:fps

maxBitrate

NSInteger

最大编码码率,单位:kbps

encoderPreference

VePhoneVideoEncoderPreference

视频编码质量策略,枚举值及说明,参考 本地视频采集编码选项

@interface VeBaseVideoSolution : NSObject
/** 视频宽度,单位:px */
@property(nonatomic, assign) NSInteger width;
/** 视频高度,单位:px */
@property(nonatomic, assign) NSInteger height;
/** 视频帧率,单位:fps */
@property(nonatomic, assign) NSInteger frameRate;
/** 最大编码码率,单位:kbps */
@property(nonatomic, assign) NSInteger maxBitrate;
/** 视频编码质量策略 */
@property (nonatomic, assign) VeBaseVideoEncoderPreference encoderPreference;

@end

更新画面渲染模式

描述:更新视频流画面渲染模式。

参数

类型

描述

renderMode

VeBaseVideoRenderMode

设置渲染模式:

  • VeBaseVideoRenderModeFit(等比缩放居中模式)
  • VeBaseVideoRenderModeFill(非等比拉伸模式)
  • VeBaseVideoRenderModeCover(等比例缩放模式)

对渲染模式枚举值的详细说明,参考 视频流渲染模式选项

- (void)updateVideoRenderMode:(VeBaseVideoRenderMode)renderMode;

推送外部音频数据

描述:开启推送和采集外部音频数据。

参数

类型

描述

audioFrame

VeBaseAudioFrame

外部采集的音频流

- (int)pushExternalAudioFrame:(VeBaseAudioFrame *)audioFrame;

自定义音频采集参数说明

参数

类型

描述

buffer

NSData

PCM 数据

samples

int

采样点个数

channel

VeBaseAudioChannel

音频声道,枚举值及说明,参考 音频采集声道枚举说明

sampleRate

VeBaseAudioSampleRate

采样率,枚举值及说明,参考 音频采样率枚举说明

@interface VeBaseAudioFrame : NSObject
/** PCM 数据 */
@property(nonatomic, strong) NSData *buffer;
/** 采样点个数 */
@property(nonatomic, assign) int samples;
/** 音频声道 */
@property(nonatomic, assign) VeBaseAudioChannel channel;
/** 采样率 */
@property(nonatomic, assign) VeBaseAudioSampleRate sampleRate;

@end

推送外部视频数据

描述:开启推送和采集外部视频数据。

参数

类型

描述

frame

CVPixelBufferRef

外部采集的视频流,包含待 SDK 编码的视频数据

pts

CMTime

CMTime

rotation

VeBaseVideoRotation

当前视频角度,枚举值及说明,参考 视频旋转角度枚举说明

- (BOOL)pushExternalVideoFrame:(CVPixelBufferRef)frame time:(CMTime)pts rotation:(VeBaseVideoRotation)rotation;

云手机控制相关接口

暂停开关

描述:暂停云手机开关。

参数

类型

描述

pause

BOOL

暂停云手机开关,默认值为 NO(关闭)

- (void)switchPaused:(BOOL)on;

提高远端音量

描述:提高远端音频播放音量。

- (void)volumeUp;

降低远端音量

描述:降低远端音频播放音量。

- (void)volumeDown;

静音开关

描述:静音开关。

参数

类型

描述

on

BOOL

静音开关,默认为关闭

- (void)muteAudio:(BOOL)on;

视频开关

描述:视频开关。

参数

类型

描述

on

BOOL

视频开关,默认为关闭

- (void)muteVideo:(BOOL)on;

音频注入开关

描述:在应用运行中,设置云端音频注入开关

返回值 0:调用成功;-2:调用失败
调用此接口会异步触发 phoneManager:onAudioInjectionStateChanged:callUserId:code:message: 回调

参数

类型

描述

state

BOOL

开关,默认:打开

- (NSInteger)setAudioInjectionState:(BOOL)state;

查询音频注入开关

描述:在云手机运行过程中,查询云端音频注入开关状态

调用此接口会异步触发 phoneManager:onGetAudioInjectionState:code:message 回调

- (void)getAudioInjectionState;

视频注入开关

描述:在应用运行中,设置云端视频注入开关

返回值 0:调用成功;-1:调用失败,当前处于未播放状态
调用此接口会异步触发 phoneManager:onVideoInjectionStateChanged:callUserId:result:message: 回调

参数

类型

描述

state

BOOL

开关,默认:打开

- (NSInteger)setVideoInjectionState:(BOOL)state;

查询视频注入开关

描述:在云手机运行过程中,查询云端视频注入开关状态

调用此接口,会触发 phoneManager:onGetVideoInjectionState:result:message 回调

- (void)getVideoInjectionState;

向云端输入框发送文本

描述:在云手机运行过程中,向云端输入框发送文本

返回值 0:调用成功,-1:调用失败
当收到“phoneManager:onTextInputEnableStateChanged:”为“YES”的回调,可以调用此接口发送文本到云端输入框

参数

类型

描述

text

NSString

文本信息

- (NSInteger)sendInputText:(NSString *)text;

查询云端输入框是否支持发送文本

描述:在云手机运行过程中,查询云端输入框发送文本

返回值 YES:支持,NO:不支持

- (BOOL)isTextInputEnable;

设置云端实例是否全屏显示

描述:在云手机运行过程中,动态设置云端是否全屏显示

返回值0:调用成功,-1:调用失败

参数

类型

描述

enable

BOOL

  • YES:全屏
  • NO:非全屏
- (NSInteger)enableFullScreen:(BOOL)enable;

震动开关

描述:在云手机开始运行前和运行过程中,动态设置震动打开和关闭

参数

类型

描述

state

BOOL

  • YES:打开
  • NO:关闭
- (void)setVibratorState:(BOOL)state;

设置传感器开关状态

描述:在云手机开始运行前和运行过程中,动态设置各类传感器打开和关闭。

调用各类传感器开关设置接口,会异步触发 phoneManager:onSensorsStateChanged:type:callUserId:result: message: 回调

参数

类型

描述

state

BOOL

  • YES:打开
  • NO:关闭
/// 设置“陀螺仪”传感器开关
/// - Parameter state: 开关,默认:NO
- (void)setGyroState:(BOOL)state;

/// 设置“重力”传感器开关
/// - Parameter state: 开关,默认:NO
- (void)setGravityState:(BOOL)state;

/// 设置“定位”开关
/// - Parameter state: 开关
- (void)setLocationState:(BOOL)state;

/// 设置“磁力”传感器开关
/// - Parameter state: 开关
- (void)setMagneticState:(BOOL)state;

/// 设置“方向”传感器开关
/// - Parameter state: 开关
- (void)setOrientationState:(BOOL)state;

/// 设置“加速度”传感器开关
/// - Parameter state: 开关
- (void)setAccelerometerState:(BOOL)state;

发送模拟重力传感器数据

描述:该方法用于向云端实例发送“摇一摇”指令,云端实例会使用传感器模拟摇一摇操作。

参数

类型

描述

duration

NSInteger

摇一摇时长,取值范围:[1800, 30000],单位:ms

返回值 0:调用成功;-1:调用失败,当前处于未播放状态;-2:参数不合法
调用此接口,会触发 “phoneManager:onShakeResponse:” 回调

- (NSInteger)sendShakeEventToRemote:(NSInteger)duration;

查询传感器开关状态

描述:在云手机运行过程中,查询各类传感器打开和关闭状态。

调用各类传感器开关查询接口,会异步触发 phoneManager:onGetSensorsState:type:result:message: 回调

/// 查询“陀螺仪”传感器开关
- (void)getGyroState;

/// 查询“重力”传感器开关
- (void)getGravityState;

/// 查询“定位”开关
- (void)getLocationState;

/// 查询“磁力”传感器开关
- (void)getMagneticState;

/// 查询“方向”传感器开关
- (void)getOrientationState;

/// 查询“加速度”传感器开关
- (void)getAccelerometerState;

数据统计

本地流数据统计

VeBaseLocalStreamStats 参数如下:

参数

类型

描述

audioRtt

NSInteger

音频往返时延,单位:ms

audioSentKBitrate

CGFloat

音频发送的码率,单位:kbps

audioLossRate

CGFloat

音频丢包率,范围:0 ~ 1

numChannels

NSInteger

音频声道数

sentSampleRate

NSInteger

音频发送采样率,单位:Hz

recordSampleRate

NSInteger

音频采集采样率,单位:Hz

videoSentKBitrate

CGFloat

视频发送码率,单位:kbps

inputFrameRate

NSInteger

视频采集帧率,单位:fps

sentFrameRate

NSInteger

视频发送帧率,单位:fps

encoderOutputFrameRate

NSInteger

视频编码器输出帧率,单位:fps

rendererOutputFrameRate

NSInteger

视频本地渲染帧率,单位:fps

sentTargetKBitrate

NSInteger

视频目标发送码率,单位:kbps

sentTargetFrameRate

NSInteger

视频目标发送帧率,单位:fps

videoLossRate

CGFloat

视频丢包率,范围:0 ~ 1

videoRtt

NSInteger

视频往返时延,单位:ms

encodedBitrate

NSInteger

视频编码码率,单位:kbps

encodedFrameWidth

NSInteger

视频编码宽度,单位:px

encodedFrameHeight

NSInteger

视频编码高度,单位:px

encodedFrameCount

NSInteger

视频帧总数

参考示例:

@interface VeBaseLocalStreamStats : NSObject

/** 音频往返时延,ms */
@property (assign, nonatomic) NSInteger audioRtt;
/** 音频发送的码率,kbps */
@property (assign, nonatomic) CGFloat audioSentKBitrate;
/** 音频丢包率,0 ~ 1 */
@property (assign, nonatomic) CGFloat audioLossRate;
/** 音频声道数 */
@property(assign, nonatomic) NSInteger numChannels;
/** 音频发送采样率,Hz */
@property(assign, nonatomic) NSInteger sentSampleRate;
/** 音频采集采样率,Hz */
@property (assign, nonatomic) NSInteger recordSampleRate;
/** 视频发送码率,kbps */
@property (assign, nonatomic) CGFloat videoSentKBitrate;
/** 视频采集帧率,fps */
@property (assign, nonatomic) NSInteger inputFrameRate;
/** 视频发送帧率,fps */
@property (assign, nonatomic) NSInteger sentFrameRate;
/** 视频编码器输出帧率,fps */
@property (assign, nonatomic) NSInteger encoderOutputFrameRate;
/** 视频本地渲染帧率,fps */
@property (assign, nonatomic) NSInteger rendererOutputFrameRate;
/** 视频目标发送码率,kbps */
@property (assign, nonatomic) NSInteger sentTargetKBitrate;
/** 视频目标发送帧率,fps */
@property (assign, nonatomic) NSInteger sentTargetFrameRate;
/** 视频丢包率,0 ~ 1 */
@property (assign, nonatomic) CGFloat videoLossRate;
/** 视频往返时延,ms */
@property (assign, nonatomic) NSInteger videoRtt;
/** 视频编码码率,kbps */
@property(assign, nonatomic) NSInteger encodedBitrate;
/** 视频编码宽度,px */
@property(assign, nonatomic) NSInteger encodedFrameWidth;
/** 视频编码高度,px */
@property(assign, nonatomic) NSInteger encodedFrameHeight;
/** 视频帧总数 */
@property(assign, nonatomic) NSInteger encodedFrameCount;

@end

远端流数据统计

VeBaseRemoteStreamStats 参数如下:

参数

类型

描述

uid

NSString

远端发布媒体流的用户 ID

width

NSInteger

远端视频宽度

height

NSInteger

远端视频高度

audioRtt

NSInteger

音频往返时延,单位:ms

videoRtt

NSInteger

视频往返时延,单位:ms

audioLossRate

CGFloat

远端音频丢包率

videoLossRate

CGFloat

远端视频丢包率

audioStallCount

NSInteger

远端音频卡顿次数

videoStallCount

NSInteger

远端视频卡顿次数

audioStallDuration

NSInteger

远端音频卡顿时长,单位:ms

videoStallDuration

NSInteger

远端视频卡顿时长,单位:ms

receivedAudioKBitrate

NSInteger

远端音频接收码率,单位:kbps

receivedVideoKBitrate

NSInteger

远端音频接收码率,单位:kbps

decoderOutputFrameRate

NSInteger

远端视频解码输出帧率

rendererOutputFrameRate

NSInteger

远端视频渲染输出帧率

numChannels

NSInteger

音频声道数

playoutSampleRate

NSInteger

播放采样率

audioE2eDelay

NSInteger

音频,用户体验级别的端到端延时,从发送端采集完成编码开始到接收端解码完成渲染开始的延时,单位:ms

videoE2eDelay

NSInteger

视频,用户体验级别的端到端延时,从发送端采集完成编码开始到接收端解码完成渲染开始的延时,单位:ms

videoCodecType

NSInteger

视频编码类型

  • 0:未知
  • 1:H264
  • 2:ByteVC1

参考示例:

@interface VeBaseRemoteStreamStats : NSObject

/** 远端发布媒体流的用户ID */
@property (nonatomic, copy) NSString *uid;
/** 远端视频宽度 */
@property (nonatomic, assign) NSInteger width;
/** 远端视频高度 */
@property (nonatomic, assign) NSInteger height;
/** 音频往返时延,ms */
@property (nonatomic, assign) NSInteger audioRtt;
/** 视频往返时延,ms */
@property (nonatomic, assign) NSInteger videoRtt;
/** 远端音频丢包率 */
@property (nonatomic, assign) CGFloat audioLossRate;
/** 远端视频丢包率 */
@property (nonatomic, assign) CGFloat videoLossRate;
/** 远端音频卡顿次数 */
@property (nonatomic, assign) NSInteger audioStallCount;
/** 远端视频卡顿次数 */
@property (nonatomic, assign) NSInteger videoStallCount;
/** 远端音频卡顿时长,ms */
@property (nonatomic, assign) NSInteger audioStallDuration;
/** 远端视频卡顿时长,ms */
@property (nonatomic, assign) NSInteger videoStallDuration;
/** 远端音频接收码率 */
@property (nonatomic, assign) NSInteger receivedAudioKBitrate;
/** 远端视频接收码率 */
@property (nonatomic, assign) NSInteger receivedVideoKBitrate;
/** 远端视频解码输出帧率 */
@property (nonatomic, assign) NSInteger decoderOutputFrameRate;
/** 远端视频渲染输出帧率 */
@property (nonatomic, assign) NSInteger rendererOutputFrameRate;
/** 音频声道数 */
@property(assign, nonatomic) NSInteger numChannels;
/** 播放采样率 */
@property (assign, nonatomic) NSInteger playoutSampleRate;
/** 音频,用户体验级别的端到端延时,从发送端采集完成编码开始到接收端解码完成渲染开始的延时,单位:ms*/
@property (nonatomic, assign) NSInteger audioE2eDelay;
/** 视频,用户体验级别的端到端延时,从发送端采集完成编码开始到接收端解码完成渲染开始的延时,单位:ms */
@property (nonatomic, assign) NSInteger videoE2eDelay;
/** 视频编码类型;0:未知;1:H264;2:ByteVC1 */
@property (nonatomic, assign) NSInteger videoCodecType;

@end

回调接口

#pragma mark - “核心”回调
/// 云端“首帧音频”回调
/// - Parameter manager: VePhoneManager 对象
- (void)firstRemoteAudioFrameArrivedFromPhoneManager:(VePhoneManager *)manager;

/// 云端“首帧视频”回调
/// - Parameter manager: VeGameManager 对象
- (void)firstRemoteVideoFrameArrivedFromPhoneManager:(VePhoneManager *)manager;

/// 启动成功回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - streamProfileId: 清晰度 ID
///   - reservedId: 预定 ID
///   - extra: 自定义扩展信息
- (void)phoneManager:(VePhoneManager *)manager startSucceedResult:(NSInteger)streamProfileId reservedId:(NSString *)reservedId extra:(NSDictionary *)extra;

/// 云端“旋转”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - rotation: 旋转度
- (void)phoneManager:(VePhoneManager *)manager changedDeviceRotation:(NSInteger)rotation;

/// 本地“操作延迟”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - delayTime: 时间 ms
- (void)phoneManager:(VePhoneManager *)manager operationDelay:(NSInteger)delayTime;

/// Pod退出回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - errCode: 错误码
- (void)phoneManager:(VePhoneManager *)manager onPodExit:(VePhoneErrorCode)errCode;

/// ”MCC“错误回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - errCode: 错误码
- (void)phoneManager:(VePhoneManager *)manager onMessageChannleError:(VePhoneErrorCode)errCode;

/// ”服务连接状态“回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - state: 连接状态
- (void)phoneManager:(VePhoneManager *)manager connectionChangedToState:(VeBaseConnectionState)state;

/// 本地“网络类型改变”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - networkType: 当前网络类型
- (void)phoneManager:(VePhoneManager *)manager networkTypeChangedToType:(VeBaseNetworkType)networkType;

/// ”网络质量“回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - quality: 网络质量
- (void)phoneManager:(VePhoneManager *)manager onNetworkQuality:(VeBaseNetworkQuality)quality;

/// 设置“清晰度”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - current: current 分辨率
///   - from: from 分辨率
///   - userId: 当前调用者Id
///   - paramsDict: 目标参数
///   - result: 结果,YES:成功;NO:失败
- (void)phoneManager:(VePhoneManager *)manager onVideoStreamProfileChanged:(NSInteger)current fromStreamProfileId:(NSInteger)from callUserId:(NSString *)userId targetParams:(NSDictionary *)paramsDict result:(BOOL)result;

/// 获取“清晰度”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - current: 当前清晰度ID
///   - result: 结果,YES:成功;NO:失败
- (void)phoneManager:(VePhoneManager *)manager onGetVideoStreamProfile:(NSInteger)current result:(BOOL)result;

/// 设置“传感器”开关回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - state: YES:打开;NO:关闭
///   - type: 1:加速度;2:陀螺仪;3:磁力;4:方向;5:重力;20:定位
///   - userId: 当前调用者Id
///   - YES:成功;False:失败
///   - msg: 错误信息
- (void)phoneManager:(VePhoneManager *)manager onSensorsStateChanged:(BOOL)state type:(NSInteger)type callUserId:(NSString *)userId result:(BOOL)result message:(NSString *)msg;

/// 查询“传感器”开关回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - state: YES:打开;NO:关闭
///   - type: 1:加速度;2:陀螺仪;3:磁力;4:方向;20:定位
///   - YES:成功;False:失败
///   - msg: 错误信息
- (void)phoneManager:(VePhoneManager *)manager onGetSensorsState:(BOOL)state type:(NSInteger)type result:(BOOL)result message:(NSString *)msg;

#pragma mark - “数据通道”回调
/// 云端“MCC”在线状态回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - channel_uid: 消息通道ID
- (void)phoneManager:(VePhoneManager *)manager onRemoteMessageOnline:(NSString *)channel_uid;

/// 云端“MCC”离线状态回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - channel_uid: 消息通道ID
- (void)phoneManager:(VePhoneManager *)manager onRemoteMessageOffline:(NSString *)channel_uid;

/// 云端通过“MCC”发送消息回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - message: 消息
- (void)phoneManager:(VePhoneManager *)manager onReceiveMessage:(VeBaseChannelMessage *)message;

/// 本地通过“MCC”发送消息结果回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - result: 结果,YES:成功 NO:超时失败
///   - mid: 消息id
- (void)phoneManager:(VePhoneManager *)manager onSendMessageResult:(BOOL)result messageId:(NSString *)mid;

/// 云端发送“剪贴板数据”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - dataArray: 数据
- (void)phoneManager:(VePhoneManager *)manager receivedClipBoardMessage:(NSArray *)dataArray;

/// 云端发送“通用消息”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - dataDict: 消息体
- (void)phoneManager:(VePhoneManager *)manager receivedGeneralMessage:(NSDictionary *)dataDict;

#pragma mark - “音频采集”回调
/// 云端“开始音频采集”请求回调
/// - Parameter manager: VePhoneManager 对象
- (void)startAudioCaptureRequestFromPhoneManager:(VePhoneManager *)manager;

/// 云端“停止音频采集”请求回调
/// - Parameter manager: VePhoneManager 对象
- (void)stopAudioCaptureRequestFromPhoneManager:(VePhoneManager *)manager;

/// “音频采集设备状态”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - state: 设备状态
///   - error: 错误信息
- (void)phoneManager:(VePhoneManager *)manager onAudioCaptureDeviceState:(VeBaseMediaDeviceState)state deviceError:(VeBaseMediaDeviceError)error;

/// 本地“音频播放设备变化”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - audioRoute: 设备类型
- (void)phoneManager:(VePhoneManager *)manager onAudioRouteChanged:(VeBaseAudioRoute)audioRoute;

/// 云端用户的音频变化
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - volume: 云端音量,[0, 100]
///   - uid: 云端用户id
- (void)phoneManager:(VePhoneManager *)manager onRemoteAudioPlaybackVolumeChanged:(NSInteger)volume fromUid:(NSString *)uid;

#pragma mark - “视频采集”回调
/// 云端“开始视频采集”请求回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - cameraId: 摄像头类型
- (void)phoneManager:(VePhoneManager *)manager startVideoCaptureRequest:(VeBaseCameraId)cameraId;

/// 云端“停止视频采集”请求回调
/// - Parameter manager: VePhoneManager 对象
- (void)stopVideoCaptureRequestFromPhoneManager:(VePhoneManager *)manager;

/// 本地“采集视频”首帧回调
/// - Parameter manager: VePhoneManager 对象
- (void)firstLocalVideoFrameCapturedFromPhoneManager:(VePhoneManager *)manager;

/// “视频采集设备状态”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - state: 设备状态
///   - error: 错误信息
- (void)phoneManager:(VePhoneManager *)manager onVideoCaptureDeviceState:(VeBaseMediaDeviceState)state deviceError:(VeBaseMediaDeviceError)error;

#pragma mark - 切换“APP前后台”回调
/// 本地“切换前后台”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - code: 0:后台;1:前台
- (void)phoneManager:(VePhoneManager *)manager onBackgroundSwitched:(NSInteger)code;

/// 云端“APP切换到前台”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - packageName: 包名
///   - switchType: 切换类型
- (void)phoneManager:(VePhoneManager *)manager onRemoteAppSwitchedForeground:(NSString *)packageName switchType:(VeBaseRemoteAppSwitchedType)switchType;

/// 云端“APP切换到后台”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - packageName: 包名
///   - switchType: 切换类型
- (void)phoneManager:(VePhoneManager *)manager onRemoteAppSwitchedBackground:(NSString *)packageName switchType:(VeBaseRemoteAppSwitchedType)switchType;

/// 云端“APP切换前后台失败”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - warningCode: 警告码
///   - errorMsg: 错误信息
- (void)phoneManager:(VePhoneManager *)manager onRemoteAppSwitchedFailedWithCode:(VePhoneWarningCode)warningCode errorMsg:(NSString *)errorMsg;

/// 查询云端一组APP列表
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - appList: 应用列表
- (void)phoneManager:(VePhoneManager *)manager onRevicedRemoteAppList:(NSArray *)appList;

#pragma mark - “定位信息”回调
/// 本地设置“云端定位信息”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - location: 位置信息
- (void)phoneManager:(VePhoneManager *)manager onRemoteLocationUpdated:(VeBaseLocationInfo *)location;

/// 云端请求定位时,在自动模式(VeBaseLocationModeAuto)下,位置信息回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - location: 位置信息
- (void)phoneManager:(VePhoneManager *)manager onSentLocalLocation:(VeBaseLocationInfo *)location;

/// 云端请求定位时,在手动模式(VeBaseLocationModeManual)下,“开始定位”的回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - provider: 取值network、gps
///   - time: 最新时间间隔
///   - distance: 最新位移
///   - num: 更新次数
- (void)phoneManager:(VePhoneManager *)manager onReceivedRemoteLocationRequest:(NSString *)provider minTime:(NSInteger)time minDistance:(CGFloat)distance numUpdates:(NSInteger)num;

/// 云端请求定位时,在手动模式(VeBaseLocationModeManual)下,“结束定位”的回调
/// - Parameter manager: VePhoneManager 对象
- (void)onRemoteLocationRequestEndedFromPhoneManager:(VePhoneManager *)manager;

#pragma mark - 媒体流“统计数据”回调
/// 本地“流数据统计及网络质量”回调,本地发布流成功后,SDK 会周期性(2s)的通知用户发布的流在此次统计周期内的质量统计信息
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - stats: 统计数据
- (void)phoneManager:(VePhoneManager *)manager onLocalStreamStats:(VeBaseLocalStreamStats *)stats;

/// 云端“流数据统计及网络质量”回调,本地订阅流成功后,SDK 会周期性(2s)的通知用户发布的流在此次统计周期内的质量统计信息
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - stats: 统计数据
- (void)phoneManager:(VePhoneManager *)manager onRemoteStreamStats:(VeBaseRemoteStreamStats *)stats;

#pragma mark - ”云端截图“回调
/// 云端截图结果回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - code: 0:成功并已保存,40045:空间不足失败,40046:未知原因失败
///   - path: 保存路径
- (void)phoneManager:(VePhoneManager *)manager onScreenShot:(NSInteger)code savePath:(NSString *)path downloadUrl:(NSString *)url;

#pragma mark - “后台保活时长”回调
/// 设置“后台保活时长”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - time: 无操作时长
///   - userId: 当前调用者Id
///   - result: YES:成功;False:失败
- (void)phoneManager:(VePhoneManager *)manager onIdleTimeChanged:(NSInteger)time callUserId:(NSString *)userId result:(BOOL)result;

/// 查询“后台保活时长”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - time: 无操作时长
///   - result: YES:成功;False:失败
- (void)phoneManager:(VePhoneManager *)manager onGetIdleTime:(NSInteger)time result:(BOOL)result;

#pragma mark - “无操作回收时长”回调
/// 设置“无操作回收时长”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - time: 无操作时长
///   - userId: 当前调用者Id
///   - result: YES:成功;False:失败
- (void)phoneManager:(VePhoneManager *)manager onAutoRecycleTimeChanged:(NSInteger)time callUserId:(NSString *)userId result:(BOOL)result;

/// 查询“无操作回收时长”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - time: 无操作时长
///   - result: YES:成功;False:失败
- (void)phoneManager:(VePhoneManager *)manager onGetAutoRecycleTime:(NSInteger)time result:(BOOL)result;

#pragma mark - “音频注入开关”回调
/// 设置“音频注入”开关回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - state: 开关,YES:打开;NO:关闭
///   - userId: 当前调用者Id
///   - result: YES:成功;False:失败
///   - msg: 错误信息
- (void)phoneManager:(VePhoneManager *)manager onAudioInjectionStateChanged:(BOOL)state callUserId:(NSString *)userId result:(BOOL)result message:(NSString *)msg;

/// 查询“音频注入”开关状态的回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - state: 开关,YES:打开;NO:关闭
///   - result: YES:成功;False:失败
///   - msg: 错误信息
- (void)phoneManager:(VePhoneManager *)manager onGetAudioInjectionState:(BOOL)state result:(BOOL)result message:(NSString *)msg;

#pragma mark - “视频注入开关”回调
/// 设置“视频注入”开关回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - state: 开关,YES:打开;NO:关闭
///   - userId: 当前调用者Id
///   - result: YES:成功;False:失败
///   - msg: 错误信息
- (void)phoneManager:(VePhoneManager *)manager onVideoInjectionStateChanged:(BOOL)state callUserId:(NSString *)userId result:(BOOL)result message:(NSString *)msg;

/// 查询“视频注入”开关状态的回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - state: 开关,YES:打开;NO:关闭
///   - result: YES:成功;False:失败
///   - msg: 错误信息
- (void)phoneManager:(VePhoneManager *)manager onGetVideoInjectionState:(BOOL)state result:(BOOL)result message:(NSString *)msg;

#pragma mark - “查询屏幕当前焦点应用包名”回调
/// “查询屏幕当前焦点应用包名”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - code: 错误码,0:成功;1:uid错误;2:pkg错误
///   - packageName: 包名称
- (void)phoneManager:(VePhoneManager *)manager getFocusedWindowApp:(NSInteger)code packageName:(NSString *)packageName;

#pragma mark - “录屏”回调
/// “录屏“回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - status: 录制状态
///   - savePath: 完整保存路径
///   - msg: 提示信息
///   - url: 下载地址
- (void)phoneManager:(VePhoneManager *)manager status:(VeBaseRecordingStatus)status savePath:(NSString *)savePath msg:(NSString *)msg downloadUrl:(NSString *)url;

#pragma mark - “导航栏状态”回调
/// “导航栏状态“回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - status: 0:隐藏,1:显示
///   - reason: 0:pod端切换的回调,1:SDK调用get接口返回结果,2:SDK调用set接口返回结果,-1:SDK参数错误
- (void)phoneManager:(VePhoneManager *)manager onNavBarStatus:(NSInteger)status reason:(NSInteger)reason;

#pragma mark - “操控权转移”回调
/// 云端用户加入房间
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - uid: 云端用户ID
- (void)phoneManager:(VePhoneManager *)manager onUserJoin:(NSString *)uid;

/// 云端用户离开房间
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - uid: 云端用户ID
- (void)phoneManager:(VePhoneManager *)manager onUserLeave:(NSString *)uid;

/// 配置指定用户操控权结果回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - code: 错误码 0:成功;!0:失败
///   - state: 用户操控权状态
///   - msg: 提示信息
/// - Notes 只有房间内调用”enableControl:“接口的用户才会收到此回调
- (void)phoneManager:(VePhoneManager *)manager onEnableControlResult:(NSInteger)code state:(VePhoneControlState *)state message:(NSString *)msg;

/// 操控权发生改变时回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - state: 用户操控权状态
/// - Notes 当房间内有用户调用”enableControl:“接口后,房间内的所有本地用户都会收到此回调
- (void)phoneManager:(VePhoneManager *)manager onControlStateChanged:(VePhoneControlState *)state;

/// 查询指定用户是否拥有操控权回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - code: 错误码 0:成功;!0:失败
///   - state: 用户操控权状态
///   - msg: 提示信息
- (void)phoneManager:(VePhoneManager *)manager onHasControlResult:(NSInteger)code state:(VePhoneControlState *)state message:(NSString *)msg;

/// 查询所有用户是否具有操控权
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - code: code: 错误码 0:成功;!0:失败
///   - states: 用户操控权状态集合
///   - msg: 提示信息
- (void)phoneManager:(VePhoneManager *)manager onAllControlsResult:(NSInteger)code list:(NSArray<VePhoneControlState *> *)states message:(NSString *)msg;

#pragma mark - “触控操作事件”回调
/// “触控操作事件”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - touchArray: 触摸操控事件数组
- (void)phoneManager:(VePhoneManager *)manager onTouchEvent:(NSArray<VeBaseTouchEventItem *> *)touchArray;

#pragma mark - ”本地/云端输入法切换“回调
/// 拉流过程”本地/云端输入法切换“回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - type: 输入法类型
///   - code: 错误码 0:成功;!0:失败
- (void)phoneManager:(VePhoneManager *)manager onKeyboardTypeChanged:(VePhoneKeyboardType)type code:(VePhoneWarningCode)code;

/// 查询”输入法类型“回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - type: 输入法类型
- (void)phoneManager:(VePhoneManager *)manager onGetKeyboardTypeResult:(VePhoneKeyboardType)type;

#pragma mark - “云端输入框是否支持文本发送”回调
/// “云端输入框是否支持文本发送”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - enable: YES支持,NO不支持
- (void)phoneManager:(VePhoneManager *)manager onTextInputEnableStateChanged:(BOOL)enable;

#pragma mark - “指令分发场景中Pod加房/离房”回调
/// “指令分发场景中Pod加房/离房”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - podType: 0,指令接收端;1,指令发送端
///   - roomState: 0,退房;1,加房
///   - podList: Pod列表
- (void)phoneManager:(VePhoneManager *)manager onSyncPodRoomState:(NSInteger)podType roomState:(NSInteger)roomState podList:(NSArray<NSString *> *)podList;

#pragma mark - “云端实例全屏状态发生改变”回调
/// “云端实例全屏状态发生改变”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - callUserId: 设置云端实例全面屏状态的用户ID
///   - width: 实例推流宽度
///   - height: 实例推流高度
- (void)phoneManager:(VePhoneManager *)manager onFullScreenStateChanged:(NSString *)callUserId width:(NSInteger)width height:(NSInteger)height;

#pragma mark - “摇一摇”回调
/// ”摇一摇“结果回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - result: 0:摇一摇异常;1:摇一摇完成;2:正在摇一摇
///   - msg: 结果的详细信息
- (void)phoneManager:(VePhoneManager *)manager onShakeResponse:(NSInteger)result message:(NSString *)msg;

#pragma mark - “警告&错误”回调
/// “警告”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - warnCode: 警告码
- (void)phoneManager:(VePhoneManager *)manager onWarning:(VePhoneWarningCode)warnCode;

/// “错误”回调
/// - Parameters:
///   - manager: VePhoneManager 对象
///   - errCode: 错误码
- (void)phoneManager:(VePhoneManager *)manager onError:(VePhoneErrorCode)errCode;

枚举说明

远端定位模式

枚举项

枚举值

说明

VeBaseLocationModeAuto

0

自动模式

VeBaseLocationModeManual

1

手动模式

摄像头类型

枚举项

枚举值

说明

VeBaseCameraIdFront

0

前置摄像头

VeBaseCameraIdBack

1

后置摄像头

SDK 与信令服务器连接状态

枚举项

枚举值

说明

VeBaseConnectionStateDisconnected

1

连接中断

VeBaseConnectionStateConnecting

2

连接建立中

VeBaseConnectionStateConnected

3

连接已建立

VeBaseConnectionStateReconnecting

4

连接重连中

VeBaseConnectionStateReconnected

5

连接已重连

VeBaseConnectionStateLost

6

网络连接断开超过 10 秒,仍然会继续重连

VeBaseConnectionStateFailed

7

连接失败,服务端状态异常

网络连接类型

枚举项

枚举值

说明

VeBaseNetworkTypeUnknown

-1

未知

VeBaseNetworkTypeDisconnected

0

断开

VeBaseNetworkTypeLAN

1

LAN

VeBaseNetworkTypeWIFI

2

WIFI

VeBaseNetworkTypeMobile2G

3

2G

VeBaseNetworkTypeMobile3G

4

3G

VeBaseNetworkTypeMobile4G

5

4G

VeBaseNetworkTypeMobile5G

6

5G

音频播放设备类型

枚举项

枚举值

说明

VeBaseAudioRouteHeadset

1

有线耳机

VeBaseAudioRouteEarpiece

2

听筒。设备自带的,一般用于通话的播放硬件

VeBaseAudioRouteSpeakerphone

3

扬声器。设备自带的,一般用于免提播放的硬件

VeBaseAudioRouteHeadsetBluetooth

4

蓝牙耳机

VeBaseAudioRouteHeadsetUSB

5

USB设备

本地视频采集渲染模式

枚举项

枚举值

说明

VeBaseRenderModeHidden

1

视窗填满优先(视频帧等比缩放,直至视窗被视频填满)

VeBaseRenderModeFit

2

视频帧内容全部显示优先(视频帧等比缩放,直至视频帧能够在视窗上全部显示)

VeBaseRenderModeAdaptive

3

视频帧自适应视窗(视频帧非等比缩放,直至视窗被视频填满)

本地视频画面镜像模式

枚举项

枚举值

说明

VeBaseMirrorTypeNone

0

关闭本地镜像

VeBaseMirrorTypeRender

1

开启本地镜像

本地视频采集编码选项

枚举项

枚举值

说明

VeBaseVideoEncoderPreferenceDisabled

0

不降级

VeBaseVideoEncoderPreferenceMaintainFramerate

1

优先保证帧率,以保证视频流畅度

VeBaseVideoEncoderPreferenceMaintainQuality

2

优先保证画质

VeBaseVideoEncoderPreferenceBalance

3

平衡画质与帧率

应用切换类型

枚举项

枚举值

说明

VeBaseRemoteAppSwitchedTypeManualSucceed

0

主动切换成功

VeBaseRemoteAppSwitchedTypeAutoSucceed

1

自动切换成功

录屏状态类型

枚举项

枚举值

说明

VeBaseRecordingStatusStopSuccessWithDownloadUrl

0

录制成功,正常结束,上传录屏文件到对象存储成功,返回录像文件保存路径

VeBaseRecordingStatusStopSuccess

1

停止录制成功,录像文件生成成功

VeBaseRecordingStatusStartSuccess

2

开始录制成功

VeBaseRecordingStatusStartFailure

3

开始录制失败,正在录制中时调用了开始录制

VeBaseRecordingStatusStopFailure

4

停止录制失败,未开始录制时调用了停止录制

VeBaseRecordingStatusNoSpace

5

录制失败,云手机存储空间不足,已占用存储空间总量的80%

VeBaseRecordingStatusReachLimit

6

录制时长到达上限,停止录制,录像文件生成成功

VeBaseRecordingStatusLimitExceeded

7

开始录制失败,录制时长超过上限(4小时)

VeBaseRecordingStatusOthers

8

其它原因

网络质量类型

枚举项

枚举值

说明

VeBaseNetworkQualityGood

2

网络状况良好,能够较好地承载当前业务

VeBaseNetworkQualityBad

4

网络质量欠佳,会影响当前业务的主观体验

VeBaseNetworkQualityVeryBad

5

网络已经无法承载当前业务的媒体流,需要采取相应策略,比如降低媒体流的码率或者更换网络

VeBaseNetworkQualityDown

6

当前网络完全无法正常通信

音视频采集类型

枚举项

枚举值

说明

VeBaseMediaSourceTypeExternal

0

外部采集

VeBaseMediaSourceTypeInternal

1

内部采集

音频采集声道

枚举项

枚举值

说明

VeBaseAudioChannelAuto

-1

默认设置

VeBaseAudioChannelMono

1

单声道

VeBaseAudioChannelStereo

2

双声道

音频采样率

枚举项

枚举值

说明

VeBaseAudioSampleRateAuto

-1

默认设置

VeBaseAudioSampleRate8000

8000

8000Hz

VeBaseAudioSampleRate16000

16000

16000Hz

VeBaseAudioSampleRate32000

32000

32000Hz

VeBaseAudioSampleRate44100

44100

44100Hz

VeBaseAudioSampleRate48000

48000

48000Hz

视频旋转角度

枚举项

枚举值

说明

VeBaseVideoRotation0

0

视频不做旋转

VeBaseVideoRotation90

90

视频顺时针旋转 90°

VeBaseVideoRotation180

180

视频顺时针旋转 180°

VeBaseVideoRotation270

270

视频顺时针旋转 270°

订阅音视频流类型

枚举项

枚举值

说明

VeBaseStreamTypeBoth

0

正常订阅音视频

VeBaseStreamTypeAudio

1

仅订阅音频

VeBaseStreamTypeVideo

2

仅订阅视频

视频流渲染模式选项

枚举项

枚举值

说明

VeBaseVideoRenderModeFit

0

等比缩放居中模式:

  • 画面等比缩放居中显示于 Container,当推流分辨率比例与 Container 比例一致时,效果为全屏显示;
  • 当推流分辨率与 Container 比例不一致时,效果为一个方向占满画布,另一个方向在两侧会有同等比例黑边;
  • 无画面内容裁切

VeBaseVideoRenderModeFill

1

非等比拉伸模式:

  • 非等比拉伸画面并充满整个 Container;
  • 无画面内容裁切

VeBaseVideoRenderModeCover

2

等比例缩放模式:

  • 画面短边撑满容器,长边被裁切;
  • 可能有画面内容裁切

视频流旋转模式选项

枚举项

枚举值

说明

VeBaseRotationModePortrait

0

竖屏方向

VeBaseRotationModeLandscape

1

横屏方向

VeBaseRotationModeAutoRotation

2

自适应旋转

媒体设备状态

枚举项

枚举值

说明

VeBaseMediaDeviceStateUnknown

0

未知

VeBaseMediaDeviceStateStarted

1

设备已开启

VeBaseMediaDeviceStateStopped

2

设备已停止

VeBaseMediaDeviceStateRuntimeError

3

设备运行时错误

VeBaseMediaDeviceStateAdded

4

设备已插入

VeBaseMediaDeviceStateRemoved

5

设备被移除

VeBaseMediaDeviceStateInterruptionBegan

6

系统通话/锁屏/第三方应用打断了音视频通话

VeBaseMediaDeviceStateInterruptionEnded

7

音视频通话已从系统电话/锁屏/第三方应用打断中恢复

VeBaseMediaDeviceStateRecording

8

本地音视频采集设备启动成功

VeBaseMediaDeviceStateEncoding

9

本地音视频采集后,首帧编码成功

VeBaseMediaDeviceStateFailed

10

本地音视频启动失败

媒体设备错误

枚举项

枚举值

说明

VeBaseMediaDeviceErrorUnknown

0

未知

VeBaseMediaDeviceErrorOK

1

媒体设备正常

VeBaseMediaDeviceErrorDeviceNoPermission

2

没有权限启动媒体设备

VeBaseMediaDeviceErrorDeviceBusy

3

媒体设备已经在使用中

VeBaseMediaDeviceErrorDeviceFailure

4

媒体设备错误

VeBaseMediaDeviceErrorDeviceNotFound

5

未找到指定的媒体设备

VeBaseMediaDeviceErrorDeviceDisconnected

6

媒体设备被移除

VeBaseMediaDeviceErrorDeviceNoCallback

7

无采集数据

VeBaseMediaDeviceErrorUNSupportFormat

8

设备采样率不支持

VeBaseMediaDeviceErrorNotFindGroupId

9

iOS屏幕采集没有 GroupId 参数

VeBaseMediaDeviceErrorNotAvailableInBackground

10

视频采集中断:因用户使用系统相机,应用切换到后台运行,导致采集中断

VeBaseMediaDeviceErrorVideoInUseByAnotherClient

11

视频采集中断:可能由于其他应用占用系统相机,导致视频设备暂时不可用,从而造成采集中断

VeBaseMediaDeviceErrorNotAvailableWithMultipleForegroundApps

12

视频采集中断:当前应用处于侧拉、分屏或者画中画模式时,导致采集中断

VeBaseMediaDeviceErrorNotAvailableDueToSystemPressure

13

视频采集中断:由于系统性能不足导致中断,比如设备过热

VeBaseMediaDeviceErrorFailure

14

本地音视频流发布失败

VeBaseMediaDeviceErrorAudioRecordFailure

15

本地音频录制失败,建议你检查录制设备是否正常工作

VeBaseMediaDeviceErrorAudioEncodeFailure

16

本地音频编码失败

VeBaseMediaDeviceErrorAudioNoRecordingDevice

17

没有可用的音频录制设备

VeBaseMediaDeviceErrorVideoDeviceNotFound

18

本地视频采集设备不存在或已移除

VeBaseMediaDeviceErrorVideoCaptureFailure

19

本地视频采集失败,建议检查采集设备是否正常工作

VeBaseMediaDeviceErrorVideoEncodeFailure

20

本地视频编码失败

VeBaseMediaDeviceErrorVideoDeviceDisconnected

21

通话过程中本地视频采集设备被其他程序抢占,导致设备连接中断

触控 Action 类型

枚举项

枚举值

说明

VeBaseTouchActionTypeStart

0

开始

VeBaseTouchActionTypeMoved

1

移动

VeBaseTouchActionTypeEnded

2

结束

键盘类型

枚举项

枚举值

说明

VePhoneKeyboardTypePod

0

使用云机键盘

VePhoneKeyboardTypeLocal

1

使用本地键盘

警告码及说明

可能返回的警告信息如下:

警告码

警告信息

说明

10010

WARNING_START_NO_STOP_BEFORE

启动云手机失败。原因:同一个客户端连续调用了两次启动接口之间没有调用停止接口。建议:请调用停止接口,结束上一次 “游戏”,再调用启动接口。

10019

WARNING_START_INVALID_AUTO_RECYCLE_TIME

设置无操作推流服务回收时长出错。建议:请参考 setAutoRecycleTime 接口描述进行设置。

30007

WARNING_SDK_LACK_OF_LOCATION_PERMISSION

SDK 无定位服务权限。原因:定位服务权限未开启。建议:检查设备定位服务权限是否开启。

40037

WARNING_LOCAL_ALREADY_SET_BACKGROUND

应用切换后台失败。原因:应用已处于后台,请勿重复调用。

40038

WARNING_LOCAL_ALREADY_SET_FOREGROUND

应用切换前台失败。原因:应用已处于前台,请勿重复调用。

40040

WARNING_FOREGROUND_CHANGE_STATUS_NO_PACKAGENAME

云机应用切换前台失败。原因:应用包名不存在。建议:请检查指定的应用包名是否正确。

40041

WARNING_FOREGROUND_CHANGE_STATUS_REPEAT

云机应用切换前台失败。原因:云机应用已处于前台,请勿重复调用。

40043

WARNING_FOREGROUND_CHANGE_STATUS_NOTFOND

云机应用切换前台失败。原因:指定的应用不在后台或已被关闭。

40054

WARNING_NATIVE_IME_DISABLED

不允许设置输入法类型

61001

WARNING_START_NET_REQUEST_CANCEL

网络请求取消

错误码及说明

可能返回的报错信息如下:

错误码

错误信息

说明

10000

ERROR_START_GENERAL

启动云手机失败。原因:通用错误。建议:请检查启动云手机 start 接口参数。

10009

ERROR_START_AUTHENTICATION_KEY_FAILED

开始游戏失败。原因:火山引擎服务鉴权失败。建议:请检查临时鉴权 Token 的有效期,参考 生成临时 Token 接口。

10011

ERROR_START_CONNECTION_ENDED

启动云手机失败。原因:在调用启动接口后,且启动成功回调触发前,云手机被停止(可能是因为服务端 “游戏” 崩溃或者调用了OpenAPI stop 请求)。

10027

ERROR_START_INVALID_LOCAL_TIME

启动云手机失败。原因:用户手机时间和服务端时间相差超过7天,导致鉴权 Token 过期。建议:需要客户端提示用户把手机时间修正为标准时间。

11001

ERROR_START_PRODUCT_NOT_EXIST

启动云手机失败。原因:业务 ID 错误。建议:请通过火山引擎云手机控制台『业务详情』页面获取。

11002

ERROR_START_APPLICATION_NOT_EXIST

启动云手机失败。原因:应用 ID 错误。建议:请通过火山引擎云手机控制台『应用管理』页面获取。

11003

ERROR_START_CONFIGURATION_CODE_NOT_EXIST

启动云手机失败。原因:资源套餐 ID 错误。建议:请通过调用服务端 ListPod 接口获取。

11004

ERROR_START_POD_NOT_EXIST

启动云手机失败。原因:实例 ID 错误。建议:请通过火山引擎云手机控制台『实例管理』页面获取。

11005

ERROR_REQUEST_PARAMETER_BINDING_ERROR

请求参数绑定错误。建议:请检查请求参数是否正确。

11006

ERROR_INVALID_REQUEST_PARAMETER

请求参数错误。建议:请检查请求参数是否正确。

11007

ERROR_BUSINESS_ID_ERROR

业务 ID 错误。建议:请检查业务是否存在,可通过火山引擎云手机控制台『业务详情』页面获取。

11008

ERROR_ACCOUNT_ID_INIT_ERROR

火山引擎账号 ID 错误。建议:请检查使用的账号和签名,可通过火山引擎官网页面右上角 用户 > 账号管理 > 主账号信息 获取正确的账号。

11009

ERROR_ACCOUNT_ID_NOT_FOUND

火山引擎账号 ID 不合法。建议:通过火山引擎官网页面右上角 用户 > 账号管理 > 主账号信息 获取正确的账号。

11010

ERROR_USER_IS_INVALID

子账号不合法。建议:请检查子账号是否有业务和实例相关操作权限。可参考 创建和管理子账号权限。

11011

ERROR_GENERIC_INSTANCE_ERROR

套餐、实例不存在。建议:请检查实例状态、订购的资源是否过期。

11012

ERROR_INSTANCE_OFFLINE

实例离线。建议:请检查实例状态。

11013

ERROR_UNIVERSAL_STARTUP_FAILED

启动云手机失败。

11014

ERROR_INTERNAL_POD_START_FAILED

启动云手机失败。建议:请检查实例状态或联系火山引擎云手机技术支持。

11015

ERROR_INTERNAL_POD_MUTE_FAILED

启动云手机失败。建议:请检查实例状态或联系火山引擎云手机技术支持。

11016

ERROR_INTERNAL_CONFIG_FAILED

启动云手机失败。建议:请检查实例状态或联系火山引擎云手机技术支持。

11019

ERROR_ACCOUNTID_MISMATCH

指定的火山引擎账号校验失败。建议:通过火山引擎官网页面右上角 用户 > 账号管理 > 主账号信息 获取正确的账号。

11020

ERROR_POD_NOT_READY

云机实例未就绪。建议:请检查指定的实例已开机运行。

11021

ERROR_DOWN_STREAM_UNKNOWN_ERROR

服务端下游错误。建议:请联系火山引擎云手机技术支持。

20000

ERROR_STREAM_GENERAL

串流连接错误。原因:网络原因。建议:请检查网络。

20002

ERROR_STREAM_CHANGE_CLARITY_ID_NOT_IN_START_STATE

切换清晰度失败。原因:当前处于非播放状态 。建议:请调用启动接口,在收到播放成功回调后,再调用切换清晰度档位接口。

30000

ERROR_SDK_GENERAL

客户端 SDK 通用错误。建议:请联系火山引擎云手机技术支持。

30001

ERROR_SDK_INIT_FAILED

客户端 SDK 初始化失败。建议:请联系火山引擎云手机技术支持。

30002

ERROR_SDK_CONFIG_OR_AUTH_PARAMETER_EMPTY

客户端调用 SDK 接口错误。原因:接口配置参数或鉴权参数为空。建议:请参考接口说明文档,检查接口参数。

30008

ERROR_SDK_INVALID_VIDEO_CONTAINER

指定的视图尺寸无效。原因:在启动云手机时传入的视图尺寸无效。建议:在手动布局视图时,需要在启动云手机前自行设置视图的尺寸,且需要确认在启动云手机时传入的视图的宽和高是正确的,且不能为0。

ERROR_FIRST_FRAME_TIME_OUT

33001

首帧超时(默认:20s)

30009

ERROR_INIT_ACCOUNT_ID_ILLEGAL

未指定火山引擎账号。建议:通过火山引擎官网页面右上角 用户 > 账号管理 > 主账号信息 获取正确的账号。

40000

ERROR_REMOTE_ABNORMAL_EXIT

实例退出。原因:云机服务异常退出。建议:请联系火山引擎云手机服务对接人员。

40001

ERROR_REMOTE_OPENAPI_EXIT

实例退出。原因:通过控制台操作或调用服务端 OpenAPI 接口退出,属于符合预期的操作。

40002

ERROR_REMOTE_INVISIVLE

实例退出。原因:云机实例状态被切换为不可见,属于符合预期的操作。

40003

ERROR_REMOTE_KICKOFF

实例退出。原因:用户被断开连接,属于符合预期的操作。

40004

ERROR_STREAM_STOPPED_AUTO_RECYCLE

实例退出。原因:用户长时间未操作,服务端自动断开应用连接。

40006

ERROR_REMOTE_STOPPED_API

应用停止。原因:服务端主动停止了应用。

ERROR_POD_STOPPED_BACKGROUND_TIMEOUT

应用停止。原因:应用切换后台,超过指定的保活时长未切换前台,服务端自动断开连接。建议:客户端需要提示用户因为应用切后台超过保活时长,连接断开。

40009

ERROR_POD_EXIT_GENERAL

应用停止。原因:云机服务退出。建议:请联系火山引擎技术支持。

40011

ERROR_REMOTE_POWER_OFF

实例异常退出。原因:云机实例关机。建议:重启云机实例。

40045

ERROR_STORAGE_NOT_ENOUGH

云手机存储空间不足。原因:存储云手机画面截图文件的空间不足,请清理存储空间后再尝试截图操作。

40046

ERROR_POD_UNKNOWN_FAILURE

未知错误,云手机画面截图失败,请稍后重试。

50000

ERROR_MESSAGE_GENERAL

消息通用错误。

50001

ERROR_MESSAGE_NOT_CONNECTED

发送消息错误。原因:客户端 SDK 与火山引擎云游戏 PaaS 服务未连接。建议:请检查网络后,重新调用发送消息接口,进行消息发送。

50002

ERROR_MESSAGE_FAILED_TO_PARSE_MSG

消息通道数据解析失败。原因:无法解析接收到的消息。

50003

ERROR_MESSAGE_CHANNEL_UID_ILLEGAL

指定的消息通道 ID 无效。原因:指定的消息通道 ID 与云机初始化 veMessageChannelClient 时填入的用户 ID 不符。

50007

ERROR_MESSAGE_OVER_SIZED

通过客户端 SDK 发送的消息错误。原因:消息包体过大(不应超过60KB)。建议:减小发送包体大小,重新发送。

50009

ERROR_MESSAGE_TIMEOUT_ILLEGAL

发送消息错误。原因:指定的消息发送超时时长不符合要求,必须为大于0的值。

60001

ERROR_NET_REQUEST_ERROR

网络请求失败

60002

ERROR_HTTP_REQUEST_ERROR

网络请求失败

71001

ERROR_FILE_CHANNEL_FILE_NOT_FOUND

文件传输失败。原因:推送或拉取的文件不存在。建议:请检查文件名是否正确且确保文件存在后重试。

71002

ERROR_FILE_CHANNEL_FILE_NO_ACCESS

文件传输失败。原因:无访问权限推送或拉取文件。建议:提示用户通过客户端申请目标目录的文件读写权限。

71003

ERROR_FILE_CHANNEL_NETWORK_ABORT

文件传输失败。原因:推送或拉取文件过程中网络异常中断。建议:请检查网络连接后重试。

71004

ERROR_FILE_CHANNEL_TIMEOUT

文件传输失败。原因:推送或拉取文件过程中超时。建议:请检查网络连接后重试。

71005

ERROR_FILE_CHANNEL_STORAGE_NOT_ENOUGH

文件传输失败。原因:推送或拉取文件磁盘空间不足。建议:请确保有足够的存储空间保存文件。

40008

最近更新时间:2025.07.28 20:47:10
这个页面对您有帮助吗?
有用
有用
无用
无用