全部產品
Search
文件中心

Cloud Phone:Windows SDK C++版

更新時間:Jun 23, 2026

本文介紹如何使用無影雲手機的Windows SDK C++版。

1. 快速開始

1.1 擷取SDK和DEMO

下載 SDK 和 Demo

Integration Environment要求

Windows X64 release

引入SDK

Visual Studio 2019樣本:

開啟專案屬性頁面->配置屬性->VC++目錄,在包含目錄添加asp-client-sdk的include目錄

開啟專案屬性頁面->配置屬性->VC++目錄,在庫目錄添加asp-client-sdk的lib目錄

開啟專案屬性頁面->配置屬性->連結器->常規,在附加庫目錄添加asp-client-sdk的lib目錄

開啟專案屬性頁面->配置屬性->連結器->輸入,在附加依賴項添加asp-client-sdk.lib、asp-engine.lib、glog.lib

qt creator樣本:

專案pro檔案添加

INCLUDEPATH+=$$PWD/asp-client-sdk/include \
LIBS+=$$PWD/asp-client-sdk/lib/asp-client-sdk.lib \
      $$PWD/asp-client-sdk/lib/asp-engine.lib \
      $$PWD/asp-client-sdk/lib/glog.lib \

快速使用Demo

下載Windows_Demo_Release,解壓縮得到 server 和 client 兩個目錄,分別是服務端和用戶端的DEMO。

啟動服務端

修改配置

{
    "httpPort": "8328",
    "accessKeyId": "AK",
    "accessKeySecret": "SK",
    "androidRegionId": "cn-hangzhou"
}

修改其中的 AK 和 SK 即可,androidRegionId填寫為執行個體的RegionId

運行其中的 server/run_server.bat , 會提示

2024-11-01T13:48:27.002Z Server is running on http://127.0.0.1:8328/listAic

服務端啟動完成

運行用戶端

{
  "CLOUD_SCREENSIZE_HEIGHT": 100,
  "CLOUD_SCREENSIZE_WIDTH": 100,
  "DEBUG_MODE": 2,
  "DISPLAY_COL": 11,
  "DISPLAY_GROUP": 20,
  "GROUPIDS": [
       "ag-1jknz4zyznleim503"
  ],
  "GROUP_SCREENSIZE_HEIGHT": 100,
  "GROUP_SCREENSIZE_WIDTH": 100,
  "LOCAL_SCREENSIZE_HEIGHT": 720,
  "LOCAL_SCREENSIZE_WIDTH": 480,
  "DISPLAY_SCALE": 1,
  "GROUP_SCALE": 8,
  "MAX_PHONE_NUM": 0,
  "PROXY_CONN_TYPE": 0,
  "QUIC_OPTION": false,
  "PHONE_URL": "http://127.0.0.1",
  "PORT": 8328,
  "AUDIO_ENABLE": false,
  "USE_DUMP": false,
  "USE_OPENGL": true
}

GROUPIDS 修改為需要控制的雲手機執行個體組 ID ag-開頭, 可以支援多個 GROUPID, 修改為您建立的 ag 開頭的雲手機執行個體組 ID,儲存。

配置參數說明:

CLOUD_SCREENSIZE_HEIGHT: 初始化雲端解析度高
CLOUD_SCREENSIZE_WIDTH: 初始化雲端解析度寬
DEBUG_MODE: 記錄層級 0-無日誌 1-debug 2-info
DISPLAY_COL: 10 展示最大列
GROUPIDS: 分組,支援列表
GROUP_SCREENSIZE_HEIGHT: 初始化本地縮圖視窗高
GROUP_SCREENSIZE_WIDTH: 初始化本地縮圖視窗寬
LOCAL_SCREENSIZE_HEIGHT: 初始化本地主控視窗高
LOCAL_SCREENSIZE_WIDTH: 初始化本地主控視窗寬
DISPLAY_SCALE: 主控縮放比例
GROUP_SCALE: 縮圖縮放比例
MAX_PHONE_NUM: 最多串連數量
PROXY_CONN_TYPE: 連線類型,固定
QUIC_OPTION: 是否使用quick 固定
PHONE_URL: 服務端地址,
PORT: 服務端連接埠
AUDIO_ENABLE: 是否啟用音頻
EndUserId: 協同流使用者名稱
IS_COO: 是否協同流
SALE_MODE: 是否CPS
SHOW_INSTENCE_NAME: 顯示名稱還是ID
USE_OPENGL: 是否啟用opengl渲染

運行 client/WuyingDemo.exe

1.2 對接流程

1.3 最佳實務

方案詳見無影雲手機快速整合最佳實務。 雲手機整合的總體方案如下圖所示

有多種登入方式,擷取整合SDK所需要的串連雲手機Ticket憑證,流程圖為:

具體代碼可以參考生命週期介面的參考代碼。

2. 生命週期介面

2.1 建立縮圖串連

函數原型: static AspClient* create(AspTicket& ticket, wuying::asp::shared_ptr<IAspClientCallback> callback);

參數說明:

參數名稱

參數類型

描述

ticket

AspTicket

AspTicket包含了是否為縮列圖、執行個體資訊和串連憑證,參見4.1 AspTicket

callback

IAspClientCallback

串連回調,參見2.5.1 串連回調代理IAspClientCallback

功能描述:該介面建立與雲手機縮圖串連。

程式碼範例:

AspTicket ticket;
// 設定ticket
ticket.ticket = "";
// 設定AppInstanceId
ticket.id = "";//AppInstanceId;
// 設定user
ticket.user = "";//雲手機名稱
//uuid與後端uuid相同
ticket.uuid = "wyClient";
//固定Windows
ticket.systemType = "Windows";
//固定0
ticket.partner = 0;
//是否縮圖 固定為true
ticket.isThumbnailEnable = true;

//添加串連回調,具體見後文
shared_ptr<AspClientCbImpl> iClient(new AspClientCbImpl(cert.Id));
AspClient *client=AspClient::create(ticket, iClient);

//剪貼簿回調,具體見後文
shared_ptr<AspClipboardlmpl> clipboardCallback(new AspClipboardlmpl());
client->setClipboardCallback(clipboardCallback);

//添加Shell命令回調,具體見後文
shared_ptr<AspShellCmdlmpl> shellCmdCallBack(new AspShellCmdlmpl());
client->setShellCmdCallback(shellCmdCallBack);

//設定縮圖視窗大小 with:寬 int height:高 int 1:fps int
client->setThumbnailDisplay(with, height, 1);

//設定連線類型 固定為socket和false
client->setProxyConnType(ASP_CONN_SOCKET);
client->setQuicOption(false);

//設定視窗回調
shared_ptr<IAspDisplayCallback> iDisplay(nullptr);
auto display = client->addDisplay(iDisplay);

//串連手機
client->open();

2.2 建立主控串連

函數原型: static AspClient* create(AspTicket& ticket, wuying::asp::shared_ptr<IAspClientCallback> callback);

參數說明:

參數名稱

參數類型

描述

ticket

AspTicket

AspTicket包含了執行個體資訊和串連憑證,參見4.1 AspTicket

callback

IAspClientCallback

串連回調,參見2.5.1 串連回調代理IAspClientCallback

功能描述:該介面建立與雲手機主控串連

程式碼範例:

AspTicket ticket;
// 設定ticket
ticket.ticket = "";
// 設定AppInstanceId
ticket.id = "";//AppInstanceId;
// 設定user
ticket.user = "";//雲手機名稱
//uuid與後端uuid相同
ticket.uuid = "wyClient";
//固定Windows
ticket.systemType = "Windows";
//固定0
ticket.partner = 0;
//是否縮圖 固定為true
ticket.isThumbnailEnable = true;

//添加串連回調,具體見後文
shared_ptr<AspClientCbImpl> iClient(new AspClientCbImpl(cert.Id));
AspClient *client=AspClient::create(ticket, iClient);

//剪貼簿回調,具體見後文
shared_ptr<AspClipboardlmpl> clipboardCallback(new AspClipboardlmpl());
client->setClipboardCallback(clipboardCallback);

//添加Shell命令回調,具體見後文
shared_ptr<AspShellCmdlmpl> shellCmdCallBack(new AspShellCmdlmpl());
client->setShellCmdCallback(shellCmdCallBack);

//設定縮圖視窗大小 with:寬 int height:高 int 1:fps int
client->setThumbnailDisplay(with, height, 1);

//設定連線類型 固定為socket和false
client->setProxyConnType(ASP_CONN_SOCKET);
client->setQuicOption(false);

//設定視窗回調
shared_ptr<IAspDisplayCallback> iDisplay(nullptr);
auto display = client->addDisplay(iDisplay);

//串連雲手機
client->open();

2.3 reopen

函數原型:void reopen(std::string& ticket)

功能描述:重新開啟串連,或斷聯後重連,僅close(false)有效。

參數說明:

參數名稱

參數類型

描述

ticket

std::string

ticket為串連憑證,有效期間一般10分鐘。

程式碼範例:

client->reopen(ticket);

2.4 close

函數原型:void close(bool destroyClient = false) 

功能描述:關閉串連

參數說明:

參數名稱

參數類型

描述

destroyClient

bool

是否清理資源,預設false

程式碼範例:

client->close(false)

2.5 回調說明

2.5.1 串連回調代理IAspClientCallback

代理介面說明:

介面

描述

void onThumbnailUpdate(void* buffer, uint32_t width, uint32_t height, AspImageFormat format)

串連雲手機成功縮圖的回調,format參見5.2 AspImageFormat

void onConnectEvent(ConnectEvent& event)

串連雲手機狀態事件的回調,event參見4.2 ConnectEvent

程式碼範例:

class AspClientCbImpl : public IAspClientCallback
{
public:
    AspClientCbImpl() {}
    //縮圖回調
    void onThumbnailUpdate(void* buffer, uint32_t width, uint32_t height, AspImageFormat format) override {

    }
    //串連事件
    void onConnectEvent(ConnectEvent& event) override {
       switch(event.type) {
          case ConnectEventType::EVENT_CONNECT_SUCCESS:
              
              break;
          case ConnectEventType::EVENT_CONNECT_FAILED:
              
              break;
          case ConnectEventType::EVENT_DISCONNECT_SUCCESS:
              
              break;
          case ConnectEventType::EVENT_RECONNECT_START:
              
              break;
          case ConnectEventType::EVENT_RECONNECT_FAILED:
              
              break;
          default:
              
              break;
        }
    }
};

2.5.2 主控流回調代理IAspDisplayCallback

代理介面說明:

介面

描述

void onImageFrameReady(AspImageFrame& frame)

串連雲手機成功後主控流的回調,frame參見4.3 AspImageFrame

程式碼範例:

class AspDisplayCbImpl : public IAspDisplayCallback
{
public:
    void onImageFrameReady(AspImageFrame& frame) override {
        //主控的映像byte數組指標,長度為長*寬*4
        uint8_t* ptr = static_cast<uint8_t*>(frame.buffer);
        //映像的寬
        int width = frame.width;
        //映像的高
        int height = frame.height;
        //必須手動釋放
        frame.releaseBuffer();
    }
};

2.5.3 音頻回調代理AspAudio

代理介面說明:

介面

描述

void onAudioFrameRender(AspAudioFrame &frame)

無需實現, frame參見4.4 AspAudioFrame,目前音頻渲染包含在SDK中。

void onAudioVolumeUpdate(uint32_t volume)

無需實現,目前音頻渲染包含在SDK中。

void onAudioMuteUpdate(bool isMute)

無需實現,目前音頻渲染包含在SDK中。

void onAudioPlaybackUpdate(AspAudioPlayback &playback)

無需實現,playback參見4.5 AspAudioPlayback,目前音頻渲染包含在SDK中。

void onAudioPlaybackStart()

無需實現,目前音頻渲染包含在SDK中。

void onAudioPlaybackStop()

無需實現,目前音頻渲染包含在SDK中。

程式碼範例:

class AspAudioImpl : public AspAudio
{
public:
    void onAudioFrameRender(AspAudioFrame &frame) override{
    
    }
    void onAudioVolumeUpdate(uint32_t volume) override{
    
    }
    void onAudioMuteUpdate(bool isMute) override{
    
    }

    void onAudioPlaybackUpdate(AspAudioPlayback &playback) override{
    
    }

    void onAudioPlaybackStart() override{
    
    }
    void onAudioPlaybackStop() override{
    
    }
};

3. 業務介面

3.1 日誌介面

3.1.1 初始化

功能描述:該介面可以列印SDK內部日誌,用於定位問題。

程式碼範例:

//初始化日誌,AspLogSinkImpl為日誌回調
auto logSinkImpl = std::make_shared<AspLogSinkImpl>();
AspLogSink::setLogSink(logSinkImpl.get());

3.1.2 回調代理AspLogSink

代理介面說明:

介面

描述

void debug(const std::string& tag, const std::string& msg)

SDK debug日誌回調

void info(const std::string& tag, const std::string& msg) 

SDK info日誌回調

void warning(const std::string& tag, const std::string& msg)

SDK warning日誌回調

void fatal(const std::string& tag, const std::string& msg)

SDK fatal日誌回調

void error(const std::string& tag, const std::string& msg)

SDK error日誌回調

程式碼範例:

#include "AspLogSink.h"

using namespace wuying::asp;

class AspLogSinkImpl : public AspLogSink
{
public:
    AspLogSinkImpl() {

    }

    void debug(const std::string& tag, const std::string& msg) override {
        //列印debug日誌
    }
    void info(const std::string& tag, const std::string& msg) override {
        //列印info日誌
    }
    void warning(const std::string& tag, const std::string& msg) override {
        //列印warning日誌
    }
    void fatal(const std::string& tag, const std::string& msg) override {
        //列印fatal日誌
    }
    void error(const std::string& tag, const std::string& msg) override {
        //列印error日誌
    }
};

3.2 縮圖業務介面

3.2.1 suspendThumbnailDisplay

函數原型:void suspendThumbnailDisplay() 

功能描述:掛起縮圖的映像,不推流

程式碼範例:

client->suspendThumbnailDisplay();

3.2.2 resumeThumbnailDisplay

函數原型:void resumeThumbnailDisplay() 

功能描述:恢複縮圖的推流,可以強制推一幀

程式碼範例:

client->resumeThumbnailDisplay();

3.3 主控其他功能

3.3.1 setOutputImageFormat

函數原型:void setOutputImageFormat(AspImageFormat format)

功能描述:設定主控回調框架格式

參數說明:

參數名稱

參數類型

描述

format

AspImageFormat

主控回調框架格式,具體參見5.2 AspImageFormat

程式碼範例:

client->setOutputImageFormat(AspImageFormat::BGRA);

3.3.2 requestGraphicsKeyFrame

函數原型:void requestGraphicsKeyFrame(AspDisplay* display) = 0;

功能描述:推一幀主控的主要畫面格,參數AspDisplay

參數說明:

參數名稱

參數類型

描述

display

AspDisplay*

顯示類指標

程式碼範例:

client->requestGraphicsKeyFrame(display);

3.3.3 setGraphicsQuality

函數原型:void setGraphicsQuality(AspImageQuality quality) = 0;

功能描述:設定畫質,畫質跟解析度有關係,一般設定為AUTO,詳細參數參見結構體

參數說明:

參數名稱

參數類型

描述

quality

AspImageQuality

映像品質參見5.4 AspImageQuality

client->setGraphicsQuality(ASP_IMAGE_QUALITY_AUTO)

3.3.4 setGraphicsFps

函數原型:void setGraphicsFps(int fps) = 0;

功能描述:設定fps

參數說明:

參數名稱

參數類型

描述

fps

int

幀率

程式碼範例:

client->setGraphicsFps(30)

3.3.5 setGraphicsBitrate

函數原型:void setGraphicsBitrate(int32_t bps) = 0;

功能描述:設定碼率,碼率影響圖片的大小

參數說明:

參數名稱

參數類型

描述

bps

int32_t

碼率

以下碼率僅供參考:

畫質

碼率

低畫質

1*1024

中畫質

5*1024

高畫質

10*1024

不失真

50*1024

程式碼範例:

client->setGraphicsBitrate(1*1024)

3.4 滑鼠

3.4.1 sendMouseClick

函數原型:void sendMouseClick(AspAction action, uint32_t button, uint32_t buttonState) = 0;

功能描述:滑鼠點擊

參數說明:

參數名稱

參數類型

描述

action

AspAction

參見5.5 AspAction

button

uint32_t

參見5.6 AspMouseButtonMask

buttonState

uint32_t

參見5.7 AspMouseButton

程式碼範例:

//滑鼠左鍵按下
display->sendMouseClick(AspAction::ACTION_DOWN, ASP_MOUSE_BUTTON_MASK_L, ASP_MOUSE_BUTTON_LEFT);
//滑鼠左鍵彈起
display->sendMouseClick(AspAction::ACTION_UP, ASP_MOUSE_BUTTON_MASK_L, ASP_MOUSE_BUTTON_LEFT);

3.4.2 sendMouseMove

函數原型:virtual void sendMouseMove(uint32_t x, uint32_t y, uint32_t buttonState) = 0;

功能描述:滑鼠移動

參數說明:

參數名稱

參數類型

描述

x

uint32_t

雲手機橫座標

y

uint32_t

雲手機縱座標

buttonState

uint32_t

參見5.6 AspMouseButtonMask

程式碼範例:

//x y 為雲機的x y座標
sendMouseMove(x, y, ASP_MOUSE_BUTTON_MASK_L)

3.5 鍵盤

3.5.1 sendKeyEvent

函數原型:virtual void sendKeyEvent(AspAction action, int scancode) = 0;

功能描述:鍵盤事件

參數說明:

參數名稱

參數類型

描述

action

AspAction

操作類型參見5.5 AspAction

scancode

int

按鍵掃描碼

程式碼範例:

//鍵盤按下
display->sendKeyEvent(AspAction::ACTION_DOWN,scanCode);
//鍵盤彈起
display->sendKeyEvent(AspAction::ACTION_UP,scanCode);

3.6 剪貼簿

本地到雲

雲到本地

3.6.1 setClipBoardTypes

函數原型:virtual void setClipBoardTypes(std::vector<AspClipboardType> types) = 0;

功能描述:發送剪貼簿類型,一般在Ctrl+V調用或寫入剪貼簿時調用,目前僅支援文本。

參數說明:

參數名稱

參數類型

描述

types

std::vector<AspClipboardType>

剪貼簿類型數組,參見5.8 AspClipboardType

程式碼範例:

std::vector<AspClipboardType> types;
types.push_back(AspClipboardType::CLIPBOARD_UTF8_TEXT);
client->setClipBoardTypes(types);

3.6.2 notifyClipboardReadComplete

函數原型:virtual void notifyClipboardReadComplete(AspClipboardType type, uint8_t* buf, size_t len) = 0;

功能描述:將內容傳到雲機在onClipboardRead(uint8_t selection, AspClipboardType type)觸發時調用

參數說明:

參數名稱

參數類型

描述

type

AspClipboardType

剪貼簿類型目前只支援文本

buf

uint8_t*

剪貼簿內容的位元組數組指標

len

size_t

buf大小

程式碼範例:

void onClipboardRead(uint8_t selection, AspClipboardType type) override {
        //本地到雲機,通過client->setClipBoardTypes(types)觸發
        //觸發onClipboardRead,將剪貼簿內容寫入notifyClipboardReadComplete
        client->notifyClipboardReadComplete(type, reinterpret_cast<uint8_t *>(utf8Data.data()), utf8Data.size());
}

3.6.3 回調代理IClipboardCallback

代理介面說明:

介面

描述

void onClipboardRead(uint8_t selection, AspClipboardType type)

本地到雲機,通過setClipBoardTypes(types)觸發,觸發時調用notifyClipboardReadComplete將剪貼簿內容寫入,type參見5.8 AspClipboardType

void onClipboardWrite(std::vector<AspClipboardData> dataV) 

雲機到本地,觸發時將內容寫入剪貼簿,data參見4.6 AspClipboardData

程式碼範例:

class AspClipboardlmpl :public IClipboardCallback
{
public:
    AspClipboardlmpl() {};

    void onClipboardRead(uint8_t selection, AspClipboardType type) override {
        //本地到雲機,通過client->setClipBoardTypes(types)觸發
        //觸發onClipboardRead,將剪貼簿內容寫入notifyClipboardReadComplete
        //client->notifyClipboardReadComplete(type, reinterpret_cast<uint8_t *>(utf8Data.data()), utf8Data.size());
    }
    void onClipboardWrite(std::vector<AspClipboardData> dataV) override {
        //雲機到本地剪貼簿,將dataV資料寫入剪貼簿
    }
};

3.7 Shell命令通道

3.7.1 sendStringDataToShell

函數原型:virtual bool sendStringDataToShell(const std::string& val) = 0;

功能描述:發送Shell命令

參數說明:

參數名稱

參數類型

描述

val

std::string

發送的ADB Shell命令格式:{"id":"","cmd":""}

程式碼範例:

client->sendStringDataToShell(jsonString)

常用ADB命令:

功能

命令

返回鍵

input keyevent KEYCODE_BACK

Home鍵

input keyevent KEYCODE_HOME

切換鍵

input keyevent KEYCODE_APP_SWITCH

靜音

input keyevent 164

音量增大

input keyevent KEYCODE_VOLUME_UP

音量減小

input keyevent KEYCODE_VOLUME_DOWN

隱藏導覽列

setprop persist.wy.hasnavibar false; killall com.android.systemui

顯示導覽列

setprop persist.wy.hasnavibar true; killall com.android.systemui

截圖

screencap -p /sdcard/Download/abc.png

3.7.2 回調代理IShellCmdCallback

代理介面說明:

介面

描述

void onReceiveStringData(const std::string& val)

接收字元流Shell命令回執

void onReceiveRawData(const std::vector<uint8_t> val)

接收位元組流Shell命令回執

程式碼範例:

class AspShellCmdlmpl :public IShellCmdCallback
{
public:
    AspShellCmdlmpl() {};

    void onReceiveStringData(const std::string& val) override {
        //發送字元的回調
    }
    void onReceiveRawData(const std::vector<uint8_t> val) override {
       //發送位元組的回調
    }
};

4. 參數詳細說明

4.1 AspTicket

struct AspTicket {
    std::string ticket; 		//擷取雲手機的ticket字串
    std::string id;			//案頭id
    std::string user;			//使用者名稱
    std::string uuid;			//本機uuid,請求ticket的時候使用的uuid
    std::string systemType;		//作業系統類型
    uint8_t partner;			//合作方
    bool isThumbnailEnable = false;	//是否是縮圖模式
};

4.2 ConnectEvent

struct ConnectEvent {
    ConnectEventType type;	//串連成功、串連失敗等事件類型
    int reason;				//事件觸發的原因
};

4.3 AspImageFrame

struct AspImageFrame {
    uint32_t frameId;
    void* buffer;
    uint32_t width;
    uint32_t height;
    AspImageFormat format;
    ReleaseBuffer releaseBuffer;
};

4.4 AspAudioFrame

struct AspAudioFrame {
    int sample;				//採樣率
    int channels;			//通道
    int size;				//資料大小
    uint8_t *data;			//資料地址

    ReleaseBuffer releaseBuffer;	//data釋放函數,在data使用完之後必須調用
};

4.5 AspAudioPlayback

struct AspAudioPlayback {
    AspAudioReadType readType;	//音頻資料擷取方式,包括PUSH和PULL兩種方式
    AspAudioMode mode;		//PCM or OPUS
    uint32_t channels;		//通道數
    uint32_t frequency;		//採樣率
    AspAudioFormat format;	//RAW or OPUS

    AudioReader audioReader;	//PULL讀取方式時,資料讀取的函數,請參照demo的實現
};

4.6 AspClipboardData

struct AspClipboardData {
    AspClipboardType type;
    uint8_t* data;
    uint32_t size;
};

5. 枚舉類型

5.1 AspConnType

enum AspConnType {
    ASP_CONN_SOCKET = 0,
    ASP_CONN_SOCKPAIR = 1,
    ASP_CONN_PIPE = 2,
    ASP_CONN_SOCKET_UNIX = 3,
    ASP_CONN_END = ASP_CONN_PIPE,
};

5.2 AspImageFormat

enum class AspImageFormat {
    YUV420P,
    YUV422P,
    YUV444P,
    RGB24,
    RGBA,
    BGRA,
    ARGB,
    ABGR,
    NV12
};

5.3 ConnectEventType

enum ConnectEventType {
    EVENT_CONNECT_SUCCESS,
    EVENT_CONNECT_FAILED,
    EVENT_DISCONNECT_SUCCESS,
    EVENT_RECONNECT_START,
    EVENT_RECONNECT_FAILED
};

5.4 AspImageQuality

enum AspImageQuality {
    ASP_IMAGE_QUALITY_LOSSLESS = 0,
    ASP_IMAGE_QUALITY_HIGH = 1,
    ASP_IMAGE_QUALITY_MEDIUM = 2,
    ASP_IMAGE_QUALITY_LOW = 3,
    ASP_IMAGE_QUALITY_AUTO = 4,
};

5.5 AspAction

enum AspAction {
    ACTION_UP,
    ACTION_DOWN
};

5.6 AspMouseButtonMask

enum AspMouseButtonMask {
    ASP_MOUSE_BUTTON_MASK_L = (1 << 0),
    ASP_MOUSE_BUTTON_MASK_M = (1 << 1),
    ASP_MOUSE_BUTTON_MASK_R = (1 << 2),
    ASP_MOUSE_BUTTON_MASK_F = (1 << 3),
    ASP_MOUSE_BUTTON_MASK_B = (1 << 4),

    ASP_MOUSE_BUTTON_MASK = 0x1f
};

5.7 AspMouseButton

enum AspMouseButton {
    ASP_MOUSE_BUTTON_INVALID,
    ASP_MOUSE_BUTTON_LEFT,
    ASP_MOUSE_BUTTON_MIDDLE,
    ASP_MOUSE_BUTTON_RIGHT,
    ASP_MOUSE_BUTTON_UP,
    ASP_MOUSE_BUTTON_DOWN,
    ASP_MOUSE_BUTTON_SIDE_FORWARD,
    ASP_MOUSE_BUTTON_SIDE_BACK,

    ASP_MOUSE_BUTTON_ENUM_END
};

5.8 AspClipboardType

enum AspClipboardType {
    CLIPBOARD_NONE = 0,
    CLIPBOARD_UTF8_TEXT,
    CLIPBOARD_IMAGE_PNG,  /* All clients with image support should support this one */
    CLIPBOARD_IMAGE_BMP,  /* optional */
    CLIPBOARD_IMAGE_TIFF, /* optional */
    CLIPBOARD_IMAGE_JPG,  /* optional */
    CLIPBOARD_FILE,       /* optional, single file */
    CLIPBOARD_DIRECTORY,  /* optional, support directory recrusive */
    CLIPBOARD_HTML,
    CLIPBOARD_RTF,
    CLIPBOARD_XML_SPREAD_SHEET,
};

6. 錯誤碼

錯誤碼

錯誤訊息(%s表示雲手機或雲應用)

定義模組

原因

2~26主要是網路相關問題

2

串連%s失敗

ASP SDK

無效MAGIC

3

串連%s失敗

ASP SDK

資料有誤

4

用戶端與服務端版本不匹配

ASP SDK

版本不匹配

5

串連需要 TLS

ASP SDK

需要TLS

6

串連不需要 TLS

ASP SDK

不需要TLS而實際使用了TLS

7

您沒有許可權串連當前%s

ASP SDK

許可權問題

8

ASP SDK

遷移過程中client ID無效

9

串連%s失敗

ASP SDK

channel不存在

20

串連ASP伺服器失敗。

ASP SDK

channel 串連錯誤

21

TLS認證出錯了

ASP SDK

TLS 認證錯誤

22

串連%s失敗

ASP SDK

channel link 錯誤

23

串連%s失敗

ASP SDK

串連認證錯誤

24

串連%s失敗

ASP SDK

串連IO錯誤

25

串連%s失敗

ASP SDK

Ticket校正失敗。使用者串連被斷開後,若使用同一個Ticket再次請求建連,也將觸發此錯誤。

26

ASP SDK

xquic 握手失敗

1206

一個ticket 可以重複使用,但是每次只能串連一個。如果雲手機處於串連中,再建立串連就會報此錯。

ASP SDK

1207

執行個體發生重啟,導致Ticket失效了

ASP SDK

sdk流協同錯誤碼

1000

token empty 

ASP SDK

只會出現在流協同的時候,client與server進行二次校正失敗

1001

user empty 

ASP SDK

1200

token invalid 

ASP SDK

1201

vm invalid 

ASP SDK

1202

ADMIN internal error 

ASP SDK

1203

user invalid 

ASP SDK

1204

token experied 

ASP SDK

1500

server internal error 

ASP SDK

1501

server net work error 

ASP SDK

串連中斷開或遇到某些錯誤的情況

2000

擷取%s資料逾時,與服務端中斷連線

ASP SDK

正常斷開

2001

%s已與服務端中斷連線。可能是因為%s進程已被強制終止。

ASP SDK

一般是端上應用被終止進程了,如Android應用使用者通過按下Home鍵終止

2002

已有使用者從其他終端串連當前%s。請稍後重試。

ASP SDK

其他人搶佔了端

2003

%s正在關機或重啟,一般由管理員操作,請稍後重試。

ASP SDK

雲手機被關機或重啟,一般是管理員操作

2004

目前使用者串連被斷開。

ASP SDK

用戶端發起斷流,或服務端發起踢人或斷流

2005

%s已逾時中斷連線,因為已達到管理員設定的使用時間長度限制。

ASP SDK

管理員設定使用時間長度被關

2006

管理員已回收了你使用該雲手機的許可權,即將登出並斷開雲手機的串連。

ASP SDK

管理員取消了使用者授權

2010

串連%s失敗

ASP SDK

Vdagent串連失敗

2011

串連參數傳遞錯誤。

ASP SDK

串連server參數傳遞錯誤

2027

拉流模式已切換。

ASP SDK

拉流模式由搶佔模式切換為協同模式,或由協同模式切換為搶佔模式

2100

剪下板許可權,禁止從%s到本地

ASP SDK

剪貼簿許可權,禁止從VM到本地

2101

剪下板許可權,禁止從本地到%s

ASP SDK

剪貼簿許可權,禁止從本地到 VM

2200

%s正在嘗試重連...

ASP SDK

因為網路問題斷開了,ASP SDK正在重連

2201

您的裝置出現網路異常,導致%s已中斷連線。

ASP SDK

因為網路問題斷開了,ASP SDK因為鏡像原因不支援重連,應用側開始重連

2202

%s重連逾時,請檢查裝置網路後重試。

ASP SDK

ASP SDK重連逾時

2210

終端裝置休眠時斷開了本網,導致雲手機中斷連線

ASP SDK

2212

檢測到您的本網出現異常,導致雲手機中斷連線。

ASP SDK

2220

檢測到您的本網出現異常,導致雲手機中斷連線。

ASP SDK

2240

由於Ticket中的Token失效,導致重連失敗。

2300

應用側傳參出現異常導致串連失敗。

2501

用戶端串連流網關異常,網路不可達。

2502

用戶端串連流網關異常,TCP串連流網關IP逾時, connect *3次 (共15s)。

2503

用戶端串連流網關異常,未知網路錯誤。

2504

用戶端串連流網關異常,軟體原因串連中斷。

2505

用戶端串連流網關異常,串連被拒絕。

2506

Ticket失效,網關解析token失敗。

2507

Ticket失效,到期。

2508

Ticket失效,uuid不匹配。

2509

流網關探測asp-server 失敗

2510

探測server被拒絕:
解決:server 5912未開啟監聽

2511

探測server失敗,timeout和refuse 之外的其他錯誤

2512

流網關token校正失敗

管控token中帶的vpcId和流網關本身所在的vpcId 不一致

2513

用戶端和網關sayhello 過程中tcp收到異常reset

2520

用戶端串連失敗,自主診斷出來是網路異常導致的

2521

用戶端再和流網關tls握手階段重連3次三次都異常斷開

2522

vpn環境下串連出錯

2523

用戶端正在使用國密協議串連。請確認服務端設定或選擇相容的串連方式。

2701

端側網路問題,建議對比手機5g熱點試試能否串連上。

2702

用戶端到流網關SSL握手逾時

2703

用戶端到流網關SayHello逾時

2704

ASP Server回複建鏈訊息逾時

可能原因: asp-server卡死;網路異常;鏡像卡死;mem/cpu high

2705

Asp Client 等待第一幀逾時

可能原因: asp-server卡死;截屏或者gpu驅動異常沒有幀產生;網路異常;mem/cpu high

2706

檢測到用戶端本地的CPU、記憶體使用量率過高可能會導致串連失敗。

2707

AspServer 從Guest擷取第一幀截屏資料逾時

2708

sdk線程卡住導致串連失敗

端側邏輯錯誤

5100

%s串連ASP Server逾時,請稍後重試。

應用側

端側在一段時間內未接收到connected事件

5102

擷取%s資料逾時,請稍後重試。

應用側

端側在一段時間內接收到了connected但未接收到display事件

5004

用戶端出現錯誤,請重新開啟

應用側

傳入端側啟動參數有誤,一般出現在開發階段

5200

用戶端重連逾時,請稍後重試。

應用側

7. 常見問題

怎麼重啟雲手機

調用管控重啟API 重啟執行個體進行重啟,調用重啟API後,端側串連的雲手機會斷開,重啟完成後,端側再串連雲手機。

縮圖和主控切換

縮圖切換主控,需要先關閉(縮圖),然後等待關閉完成再切換到(主控)。

image.svg

主控切換縮圖,需要先關閉(主控),然後等待關閉完成再重新開啟(縮圖)。

sequenceDiagram
      participant App
      participant Sdk
      App->>Sdk: close(true)
      Sdk-->>App: onConnectEvent EVENT_DISCONNECT_SUCCESS
      App->>Sdk: reopen(Ticket)