本文档描述了云手机 iOS 客户端 SDK 提供的接口。
接口名称 | 接口描述 |
|---|---|
初始化 SDK | |
获取管理器实例 | |
获取 SDK 版本号 | |
获取 SDK 生成的设备 ID | |
获取服务端设备 ID | |
是否开启调试日志 | |
启动云手机 | |
停止云手机并退出 |
接口名称 | 接口描述 |
|---|---|
设置保活时间 | |
设置无操作推流服务回收时长 | |
获取已设置的无操作推流服务回收时长 | |
切换视频流清晰度 | |
客户端前后台切换 | |
云机应用切换到前台 | |
获取已切换到后台的云机应用列表 | |
云手机画面截图 | |
开始云手机画面录屏 | |
停止云手机画面录屏 | |
查询屏幕当前焦点应用 | |
设置导航栏开关状态 | |
获取导航栏开关状态 | |
拉流过程中,切换本地/云机输入法类型 | |
查询当前使用的本地/云机输入法类型 | |
设置指定用户是否具有操控权 | |
异步查询指定用户是否具有操控权 | |
异步查询所有用户的操控权详情 | |
向云机实例发送消息,并接收消息发送结果的回调 | |
当云机存在多个消息通道时,客户端向云机实例发送消息 | |
云机有且仅有一个消息通道时,客户端向云机实例发送消息,并指定消息发送超时时间。 | |
向云机实例发送消息,并指定消息发送超时时间 | |
客户端向云机实例发送通用消息 | |
发送客户端本地剪贴板消息到云机 | |
发送键盘事件 | |
发送键盘事件 | |
设置是否拦截 SDK 向云机实例发送的触控事件 | |
设置远端位置信息 | |
设置远端请求位置信息的模式 |
接口名称 | 接口描述 |
|---|---|
开启音频采集 | |
停止音频采集 | |
获取音频采集音量 | |
调节音频采集音量 | |
获取本地音频的播放音量 | |
调节本地音频播放音量 | |
获取远端音频的播放音量 | |
调节远端音频的播放音量 | |
获取音频播放设备 | |
设置音频播放设备 | |
开启视频采集 | |
切换摄像头 | |
停止视频采集 | |
设置本地视频渲染时使用的视图,并使用默认渲染模式 | |
设置本地视频渲染时使用的视图,并设置渲染模式 | |
设置是否开启镜像翻转本地摄像头画面 | |
配置本地视频编码质量参数 | |
更新视频流渲染模式 | |
推送外部音频数据 | |
推送外部视频数据 | |
暂停开关 | |
提高远端音量 | |
降低远端音量 | |
静音开关 | |
视频开关 | |
开启/关闭音频注入功能 | |
开启/关闭视频注入功能 | |
查询音频注入功能状态 | |
查询视频注入功能状态 |
接口名称 | 接口描述 |
|---|---|
陀螺仪开关 | |
震动开关 | |
地理位置请求开关 | |
方向开关 | |
磁力计开关 | |
加速计开关 |
参考示例:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 初始化SDK,设置全局配置信息 // accountId:火山引擎账号ID // 建议在程序一启动的时候就调用 [[VePhoneManager sharedInstance] initWithAccountId: accountId]; }
描述:配置 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 | 否 | 当次启动的生命周期标识,可以用该参数查询使用时长,链路日志等
|
planId | NSString | 否 | 火山侧套餐 ID |
accountId | NSString | 否 | 火山账号ID |
reset | BOOL | 否 | 退出后,是否重置设备环境:
|
videoStreamProfileId | NSInteger | 否 | 视频流清晰度 ID;如不传入,则使用默认清晰度,详细信息,参考 云手机清晰度档位说明 |
localKeyboardEnable | BOOL | 否 | 本地键盘开关:
|
autoRecycleTime | NSInteger | 否 | 设置无操作自动回收服务时长,单位秒(如不设置或设置为0,则使用默认时长300秒,支持设置的上限值为7200,即2小时) |
userTag | NSString | 否 | 用户标签,由业务方指定 |
remoteMockLocation | 否 | 云机虚拟定位信息 | |
remoteWindowSize | CGSize | 否 | 设置云机推流分辨率(width 和 height),取值范围 >= 0,说明如下:
|
videoRenderMode | VeBaseVideoRenderMode | 否 | 指定视频流渲染模式:
对渲染模式的详细说明,参考 视频流渲染模式选项 |
rotationMode | VeBaseRotationMode | 否 | 指定视频流的旋转模式:
对视频流旋转模式的详细说明,参考 视频流旋转模式选项 |
extraDict | NSDictionary | 否 | 根据业务需要,自定义扩展参数 |
waitTime | NSInteger | 否 | 云手机实例进房后,等待客户端加入房间的最大允许时长。 |
参考示例:
@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: 启动云手机之前,指定启动云手机时拉取音视频流类型(如不指定,则正常拉取音视频流):
/** * 设置“媒体流”订阅类型 * 默认:VeBaseStreamTypeBoth * 在调用 startWithConfig: 之前设置,不支持拉流过程中修改 * 收到首帧之后,可通过调用 muteAudio:、muteVideo:、switchPaused: 接口恢复 */ @property (nonatomic, assign) VeBaseStreamType streamType;
在调用 startWithConfig: 启动云手机之前,指定“音频”的采集方式:
/** * 设置“音频“采集方式 * 默认:VeBaseMediaSourceTypeInternal * 在调用 startWithConfig: 之前设置,不支持拉流过程中修改 */ @property (nonatomic, assign) VeBaseMediaSourceType audioSourceType;
在调用 startWithConfig: 启动云手机之前,指定“视频”的采集方式:
/** * 设置“视频”采集方式 * 默认:VeBaseMediaSourceTypeInternal * 在调用 startWithConfig: 之前设置,不支持拉流过程中修改 */ @property (nonatomic, assign) VeBaseMediaSourceType videoSourceType;
在调用 startWithConfig: 启动云手机之前,指定“定位”的模式:
/** * 设置”定位“模式 * 默认:VeBaseLocationModeAuto * 在调用 startWithConfig: 之前设置,不支持拉流过程中修改 * VeBaseLocationModeAuto:会触发“phoneManager:onSentLocalLocation:”回调 * VeBaseLocationModeManual:会触发“phoneManager:onReceivedRemoteLocationRequest:minTime:minDistance:numUpdates:、“phoneManager:onRemoteLocationRequestEndedFromPhoneManager:”回调 */ @property (nonatomic, assign) VeBaseLocationMode locationServiceMode;
描述:初始化 SDK,设置全局配置信息(建议在程序启动的时候调用,时机越早越好)。
参数 | 类型 | 描述 |
|---|---|---|
accountId | NSString | 火山引擎用户账号,可通过火山引擎官网页面右上角 用户 > 账号管理 > 主账号信息 获取 |
- (void)initWithAccountId:(NSString *)accountId;
描述:获取管理器实例(返回 VePhoneManager 对象)。
+ (VePhoneManager *)sharedInstance;
描述:获取 vePhoneSDK 的当前版本号。
+ (NSString *)currentVersion;
描述:获取 SDK 生成的本地设备 ID,用于后台查询 SDK 日志,进行调试和问题排查。格式要求为 16 位,纯数字;(建议接入方在需要问题排查时,提供给火山引擎技术支持)。
+ (NSString *)currentDeviceId;
描述:获取 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 | 客户端切换前后台:
|
- (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 | 是否保存截图文件在云手机实例:
说明:当云手机存储空间小于600MB时,如指定 |
- (void)screenShot:(BOOL)savedOnPod;
描述:对当前云手机画面进行录屏,并获取在云手机实例中保存录屏文件的路径以及下载录屏文件的地址。
调用此接口,会触发 phoneManager:status:savePath:msg:downloadUrl: 回调。
参数 | 类型 | 描述 |
|---|---|---|
duration | NSInteger | 设置最大录屏时长(单位:秒),支持设置的最大值为14400(即4小时) |
saveOnPod | Bool | 是否保存录屏文件在云手机实例:
|
- (void)startRecording:(NSInteger)duration saveOnPod:(BOOL)saveOnPod;
描述:主动停止对当前云手机画面进行录屏。
- (void)stopRecording;
描述:查询屏幕当前的焦点窗口应用名称。
调用此接口,会触发 phoneManager:getFocusedWindowApp:packageName: 回调。
- (void) getFocusedWindowApp;
描述:设置云手机当前导航栏开关状态(打开/隐藏)。
参数 | 类型 | 描述 |
|---|---|---|
status | NSInteger | 设置导航栏开关状态:
|
- (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 | 设置指定用户是否具有云手机操控权(每个新用户连接云手机时默认具备操控权,可以通过本接口动态关闭控制权):
|
- (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 | 消息类型。取值如下:
说明 该参数取值为 |
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 |
| 发送的消息内容 |
- (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 | 可选项包括:
|
- (NSInteger)sendKeyEvent:(NSInteger)keyCode;
描述:发送键盘事件到云机实例。
参数 | 类型 | 描述 |
|---|---|---|
action | NSInteger | 可选项包括:
|
keyCode | NSInteger | 可选项包括:
|
- (NSInteger)sendKeyEvent:(NSInteger)action keyCode:(NSInteger)keyCode;
描述:设置是否拦截 SDK 向云机实例发送的触控事件(收到首帧,调用此接口,传入YES时,会收到 phoneManager:onTouchEvent: 回调,业务方根据需要消费触控事件)。
参数 | 类型 | 描述 |
|---|---|---|
intercept | BOOL | 设置是否拦截 SDK 向云机实例发送的触控事件
|
- (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 | 设置云机请求获取定位信息的模式:
|
- (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 | 音频播放设备类型:
|
- (void)setAudioPlaybackDevice:(VeBaseAudioRoute)audioRoute;
描述:获取本地摄像头权限后,采集并发送摄像头视频数据。
参数 | 类型 | 描述 |
|---|---|---|
cameraId | VePhoneCameraID | 指定前后摄像头:
|
- (void)startVideoStream:(**VeBaseCameraId**)cameraId;
描述:切换前后摄像头。
参数 | 类型 | 描述 |
|---|---|---|
cameraId | VePhoneCameraID | 切换前后摄像头:
|
- (void)switchCamera:(VePhoneCameraID)cameraId;
描述:关闭视频数据发送,并且不进行视频采集。
- (void)stopVideoStream;
描述:设置本地视频渲染时使用的视图,并使用默认渲染模式(VePhoneRenderModeHidden,视窗填满优先)
参数 | 类型 | 描述 |
|---|---|---|
view | UIView | 视图 |
- (void)setLocalVideoCanvas:(UIView *)view;
描述:设置本地视频渲染时使用的视图,并设置渲染模式
参数 | 类型 | 描述 |
|---|---|---|
view | UIView | 视图 |
mode | VePhoneRenderMode | 设置渲染模式:
|
- (void)setLocalVideoCanvas:(UIView *)view renderMode:(VePhoneRenderMode)mode;
描述:使用“前置摄像头”采集时,是否开启镜像翻转本地摄像头画面
参数 | 类型 | 描述 |
|---|---|---|
type | VeBaseMirrorType | 可选枚举值及说明如下:
|
- (void)setLocalVideoMirrorType:(VeBaseMirrorType)type;
描述:根据客户端的网络情况以及接收端的网络情况以及订阅方式,配置本地视频编码质量参数
参数 | 类型 | 描述 |
|---|---|---|
videoSolutions |
| 本地视频采集和编码质量参数,参考以下 视频采集参数说明 |
- (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 | 设置渲染模式:
对渲染模式枚举值的详细说明,参考 视频流渲染模式选项 |
- (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 |
|
- (NSInteger)enableFullScreen:(BOOL)enable;
描述:在云手机开始运行前和运行过程中,动态设置震动打开和关闭
参数 | 类型 | 描述 |
|---|---|---|
state | BOOL |
|
- (void)setVibratorState:(BOOL)state;
描述:在云手机开始运行前和运行过程中,动态设置各类传感器打开和关闭。
调用各类传感器开关设置接口,会异步触发 phoneManager:onSensorsStateChanged:type:callUserId:result: message: 回调
参数 | 类型 | 描述 |
|---|---|---|
state | BOOL |
|
/// 设置“陀螺仪”传感器开关 /// - 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 | 视频编码类型
|
参考示例:
@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 | 后置摄像头 |
枚举项 | 枚举值 | 说明 |
|---|---|---|
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 | 等比缩放居中模式:
|
VeBaseVideoRenderModeFill | 1 | 非等比拉伸模式:
|
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 | 通话过程中本地视频采集设备被其他程序抢占,导致设备连接中断 |
枚举项 | 枚举值 | 说明 |
|---|---|---|
VeBaseTouchActionTypeStart | 0 | 开始 |
VeBaseTouchActionTypeMoved | 1 | 移动 |
VeBaseTouchActionTypeEnded | 2 | 结束 |
枚举项 | 枚举值 | 说明 |
|---|---|---|
VePhoneKeyboardTypePod | 0 | 使用云机键盘 |
VePhoneKeyboardTypeLocal | 1 | 使用本地键盘 |
可能返回的警告信息如下:
警告码 | 警告信息 | 说明 |
|---|---|---|
10010 | WARNING_START_NO_STOP_BEFORE | 启动云手机失败。原因:同一个客户端连续调用了两次启动接口之间没有调用停止接口。建议:请调用停止接口,结束上一次 “游戏”,再调用启动接口。 |
10019 | WARNING_START_INVALID_AUTO_RECYCLE_TIME | 设置无操作推流服务回收时长出错。建议:请参考 |
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