All Products
Search
Document Center

Cloud Phone:SDK Android

Last Updated:Jun 25, 2026

Alibaba Cloud Workspace SDK untuk Android menyediakan antarmuka terbuka untuk menghubungkan ke komputer cloud, aplikasi cloud, dan Cloud Phone. Dengan mengintegrasikan SDK ini, Anda dapat dengan cepat menyesuaikan dan membangun klien Android sesuai kebutuhan bisnis Anda.

1. Memulai dengan cepat

1.1 Mendapatkan SDK dan demo

Catatan

Dengan mengunduh dan menggunakan SDK, Anda menyetujui Kebijakan Privasi Alibaba Cloud Workspace SDK.

Dokumen, SDK, dan klien ini hanya untuk penggunaan internal. Jangan mendistribusikannya kepada pihak ketiga tanpa izin dari Alibaba Cloud.

Persyaratan lingkungan

Versi Android minimum yang didukung: 5.1

Integrasi paket AAR

  • Salin file aspengine-third-release.aar, aspengine-player-release.aar, dan wytrace-release.aar ke direktori app/libs.

  • Tambahkan dependensi berikut ke file build.gradle modul aplikasi Anda:

dependencies {
    implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
    // Pustaka parser konfigurasi INI yang diperlukan oleh aspengine-sdk.
    implementation 'org.ini4j:ini4j:0.5.4'
    // Pustaka yang diperlukan oleh wytrace.
    implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.8'
    implementation 'com.google.code.gson:gson:2.10.1'
    implementation 'io.github.aliyun-sls:aliyun-log-android-sdk:2.7.0@aar'
}
  • Deklarasikan izin yang diperlukan dalam file AndroidManifest.xml Anda:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE"/>
  • Konfigurasikan aturan keep ProGuard:

-keep class com.aliyun.wuying.aspsdk.** { *; }
-dontwarn com.aliyun.wuying.aspsdk.**

1.2 Proses integrasi

1.3 Praktik terbaik

Lihat Praktik terbaik untuk mengintegrasikan Cloud Phone.

Tersedia beberapa metode login untuk mendapatkan tiket koneksi guna integrasi SDK.

Untuk contoh kode, lihat kode sampel untuk antarmuka siklus hidup.

2. Antarmuka siklus hidup

2.1 Inisialisasi instans StreamView

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   requestWindowFeature(Window.FEATURE_NO_TITLE);
   getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
   setContentView(R.layout.activity_stream_view_demo);
   mStreamView = findViewById(R.id.stream_view);
   mStreamView.enableDesktopMode(false);
   mStreamView.scaleStreamVideo(pref.getBoolean("fit_video_content", true) ?
   mStreamView.ScaleType.FIT_STREAM_CONTENT : StreamView.ScaleType.FILL_STREAM_VIEW);
   mStreamView.getASPEngineDelegate().setAlignStreamResolutionWithSurfaceSize(false);
}
<?xml version="1.0" encoding="utf-8"?>
<android.widget.RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".StreamViewDemoActivity">

    <com.aliyun.wuying.aspsdk.aspengine.ui.StreamView
        android:id="@+id/stream_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:focusableInTouchMode="true"
        android:focusable="true"
        android:focusedByDefault="true" />

</android.widget.RelativeLayout>

2.2 Membangun koneksi

Untuk informasi mengenai nilai mConfigs, lihat Bagian 4.1.

mStreamView.start(mConfigs);

2.3 Menutup koneksi

mStreamView.stop();

2.4 Menghapus instans StreamView

mStreamView.dispose();
mStreamView = null;

2.5 Mode Multi-StreamView

Mode ini memungkinkan Anda beralih secara mulus satu aliran antara beberapa instans View. Untuk menerapkan mode ini, ikuti langkah-langkah berikut:

  1. Definisikan dan inisialisasi instans StreamView seperti dijelaskan pada Bagian 2.1.

  2. Gunakan IAspEngine untuk membangun koneksi. Parameter harus konsisten dengan definisi Config pada Bagian 4.1.

    IASPEngine engine = mBuilder.enableRTC(true).build(context);
    // Aktifkan statistik data.
    engine.enableStatistics(true, true);
    ConnectionConfig cc = new ConnectionConfig();
    cc.id = CONFIG_DESKTOP_ID;
    cc.connectionTicket = CONFIG_CONNECTION_TICKET;
    cc.useVPC = CONFIG_USE_VPC;
    cc.type = OS_TYPE;
    cc.user = CONFIG_USER;
    cc.uuid = CONFIG_UUID;
    
    engine.start(cc);
  3. Bind IAspEngine ke StreamView. Pemanggilan ini merender aliran pada View yang ditentukan.

    mStreamView.bindASPEngine(engine);
  4. Lanjutkan rendering pada StreamView. Pemanggilan ini mengarahkan View untuk melanjutkan rendering aliran.

    mStreamView.resumeASPEngine();

Untuk detail lebih lanjut, lihat implementasi dalam aplikasi demo.

2.6 Callbacks

Proxy callback koneksi: IASPEngineListener

Deskripsi antarmuka:

API

Deskripsi

onConnectionSuccess(int connectionId)

Dipicu saat koneksi ke Cloud Phone berhasil dibangun. Mengembalikan ID koneksi.

onConnectionFailure(int errorCode, String errorMsg)

Dipicu jika koneksi ke Cloud Phone gagal. Mengembalikan kode kesalahan dan pesan kesalahan.

onEngineError(int errorCode, String errorMsg)

Dipicu saat terjadi kesalahan internal SDK. Mengembalikan kode kesalahan dan pesan kesalahan.

onDisconnected(int reason)

Dipicu saat koneksi terputus. Mengembalikan kode alasan pemutusan koneksi dalam bentuk integer.

onReconnect(int errorCode)

Dipicu saat SDK mencoba menyambung ulang setelah pemutusan. Mengembalikan kode kesalahan yang memicu penyambungan ulang.

onFirstFrameRendered(long timeCostMS)

Dipicu saat frame video pertama dirender. Mengembalikan waktu yang berlalu sejak awal koneksi hingga frame pertama, dalam milidetik.

onPolicyUpdate(String policy)

Dipicu saat pembaruan kebijakan diterima dari Cloud Phone. Mengembalikan konfigurasi kebijakan sebagai string.

onSessionSuccess()

Dipicu saat sesi streaming berhasil dibangun.

Proxy callback data performa: IStatisticsListener

Deskripsi antarmuka:

API

Deskripsi

onStatisticsInfoUpdate(StatisticsInfo statisticsInfo)

Dipicu secara berkala untuk memberikan data performa. Mengembalikan objek StatisticsInfo yang berisi metrik terbaru.

Proxy callback permintaan izin sistem: IRequestSystemPermissionListener

Deskripsi antarmuka:

API

Deskripsi

bool OnRequestSystemPermission(SystemPermission permission)

Dipicu saat SDK perlu meminta izin sistem. Parameter permission menunjukkan jenis izin yang diperlukan.

Kode contoh untuk mendaftarkan dan membatalkan pendaftaran callback:

// Dengarkan callback koneksi.
mStreamView.getASPEngineDelegate().registerASPEngineListener(IASPEngineListener listener);
mStreamView.getASPEngineDelegate().unregisterASPEngineListener(IASPEngineListener listener);
// Dengarkan callback data performa.
mStreamView.getASPEngineDelegate().registerStatisticsListener(IStatisticsListener listener);
mStreamView.getASPEngineDelegate().unregisterStatisticsListener(IStatisticsListener listener);
// Dengarkan permintaan izin sistem.
mStreamView.registerSystemPermissionListener(IRequestSystemPermissionListener listener);
mStreamView.unregisterSystemPermissionListener(IRequestSystemPermissionListener listener);

3. API Layanan

API

Deskripsi

enableVDAgentCheck(boolean enabled)

Menentukan apakah akan menerapkan pemeriksaan ketersediaan VDAgent saat membangun koneksi. Pemeriksaan ini diaktifkan secara default.

Jika diatur ke true dan VDAgent tidak tersedia selama pembangunan koneksi, kesalahan dilaporkan dan koneksi saat ini dihentikan.

Mengatur parameter ini ke false tidak disarankan, kecuali untuk tujuan debugging internal.

enableRTC(boolean enabled)

Menentukan apakah akan menggunakan RTC untuk mentransmisikan data streaming. RTC digunakan secara default.

enableDesktopMode(boolean enabled)

Mengaktifkan atau menonaktifkan mode desktop. Saat diaktifkan, semua input sentuh dikonversi menjadi event mouse dan dikirim ke server. Untuk Cloud Phone, kami merekomendasikan mengatur nilai ini ke false.

scaleStreamVideo(ScaleType scaleType)

Menentukan perilaku penskalaan untuk aliran video. Untuk nilai valid ScaleType, lihat tipe enum 5.1 ScaleType.

setVideoProfile(int width, int height, int fps, IRemoteResult result)

Mengatur resolusi untuk aliran video. Parameter fps (laju frame) saat ini tidak didukung.

boolean sendKeyEvent(KeyEvent event)

dan

sendKeyboardEvent(KeyEvent event, IRemoteResult result)

Mengirim event keyboard ke sesi remote.

boolean simulateMouseClick(boolean leftButton)

Meniru klik mouse dalam sesi remote. Atur parameter ke true untuk klik kiri atau false untuk klik kanan.

boolean enableMouseMode(boolean enabled)

Mengaktifkan atau menonaktifkan mode mouse.

boolean sendMouseEvent(MotionEvent motionEvent)

dan

sendMouseEvent(MotionEvent motionEvent, IRemoteResult result)

Mengirim event mouse ke sesi remote.

reconnect(String connectionToken)

Menyambung ulang ke sesi setelah pemutusan tak terduga.

Metode ini biasanya digunakan untuk menangani pemutusan dengan reason=2200. Untuk menyambung ulang, aplikasi Anda harus memanggil OpenAPI untuk mendapatkan token koneksi baru untuk Cloud Phone, lalu meneruskannya ke metode ini.

boolean setMediaStreamPlayer(MediaStreamPlayer player)

Mengganti engine media default SDK dengan engine kustom yang disediakan oleh aplikasi Anda. Metode ini harus dipanggil sebelum memulai streaming atau setelah aliran terputus.

void setAlignStreamResolutionWithSurfaceSize(boolean aligned)

Mengaktifkan atau menonaktifkan penyesuaian otomatis resolusi aliran dengan ukuran SurfaceView sisi klien saat streaming dimulai. Fitur ini diaktifkan secara default. Untuk Cloud Phone, kami merekomendasikan menonaktifkan fitur ini.

void mute(boolean muted)

Mengaktifkan atau menonaktifkan mode bisu.

void enableStatistics(boolean enabled)

Mengaktifkan atau menonaktifkan pengumpulan data performa.

mStreamView.getASPEngineDelegate().requestIFrame()

Meminta keyframe.

Di bawah mStreamView.getASPEngineDelegate():

registerFileTransferListener(IFileTransferListener var1)

dan

unregisterFileTransferListener(IFileTransferListener var1)

dan

mStreamView.getASPEngineDelegate().uploadFiles(pathList, "/sdcard/Download/");

Mengelola unggah dan unduh file. Untuk detail implementasi, lihat aplikasi demo.

Di bawah mStreamView.getASPEngineDelegate():

addDataChannel(DataChannel var1)

dan

removeDataChannel(DataChannel var1)

Menambahkan atau menghapus saluran data kustom untuk bertukar data dengan sesi remote. Untuk detail implementasi, lihat aplikasi demo.

Di bawah mStreamView.getASPEngineDelegate():

addLyncChannel(LyncChannel var1)

dan

removeLyncChannel(LyncChannel var1)

Menambahkan atau menghapus saluran untuk mengirim perintah ADB. Untuk detail implementasi, lihat AspAdbUtil dalam aplikasi demo.

void setToQualityFirst()

Mengatur mode prioritas kualitas. Mode ini mendukung laju frame maksimum 30 fps dan kualitas gambar diatur ke High. Tidak didukung pada Cloud Phone.

void setToFpsFirst()

Mengatur mode prioritas kelancaran. Mode ini mendukung laju frame maksimum 60 fps dan kualitas gambar diatur ke Good. Tidak didukung pada Cloud Phone.

void setToCustomPicture(int fps, int quality);

Mengatur mode kustom yang memungkinkan Anda menentukan laju frame dan kualitas gambar.

Parameter fps menerima nilai dari 0 hingga 60. Nilai yang lebih tinggi menghasilkan video yang lebih lancar.

Parameter quality menerima nilai dari 0 hingga 4, di mana 0 adalah lossless, 1 adalah high, 2 adalah good, 3 adalah fair, dan 4 adalah auto. Tidak didukung pada Cloud Phone.

Di bawah mStreamView.getASPEngineDelegate():

registerIMEListener, unregisterIMEListener, setImeType, enableRelativeMouse, dll.

Tidak didukung pada Cloud Phone.

4. Parameter

4.1 Config

Gunakan parameter ini untuk membangun koneksi.

Parameter

Tipe

Deskripsi

StreamView.CONFIG_DESKTOP_ID

string

ID instans. Nilai ini sesuai dengan ResourceId yang dikembalikan oleh API DescribeUserResources.

StreamView.CONFIG_CONNECTION_TICKET

string

Tiket otentikasi koneksi. Dapatkan tiket ini dengan memanggil API GetConnectionTicket.

StreamView.CONFIG_PREFER_RTC_TRANSPORT

boolean

Mengaktifkan saluran RTC jika diatur ke true. Pengaturan ini direkomendasikan untuk Cloud Phone.

StreamView.CONFIG_ENABLE_VDAGENT_CHECK

boolean

Mengaktifkan pemeriksaan ketersediaan VDAgent selama koneksi jika diatur ke true. Pengaturan ini direkomendasikan untuk Cloud Phone.

StreamView.CONFIG_ENABLE_STATISTICS

boolean

Atur ke true untuk mengaktifkan statistik performa, yang kemudian ditampilkan sebagai overlay pada aliran video. Pengaturan ini direkomendasikan untuk Cloud Phone.

OSType

string

Tipe sistem operasi. Harus diatur ke android untuk Cloud Phone.

4.2 StatisticsInfo

Data performa

API

Tipe

Deskripsi

mReceiveFps

int

Laju frame yang diterima

mRenderFps

int

Laju frame yang dirender

mDownstreamBandwithMBPerSecond

double

Bandwidth downstream

mUpstreamBandwithMBPerSecond

double

Bandwidth upstream

mP2pFullLinkageLatencyMS

long

Latensi end-to-end (tidak digunakan lagi)

mNetworkLatencyMS

long

RTT jaringan

mPingGatewayRttMS

long

RTT ping

mLostRate

double

Laju kehilangan paket

mServerRenderLatencyMS

long

Latensi rendering sisi cloud

mServerEncoderLatencyMS

long

Latensi encoding sisi cloud

mServerTotalLatencyMS

long

Latensi total sisi cloud

mTotalDownstreamBandwidth

long

Total bandwidth downstream

mGuestCpuUsage

long

Penggunaan CPU guest

mStreamType

String

Protokol streaming

5. Tipe enumerasi

5.1 ScaleType

Menentukan cara gambar yang dialirkan diskalakan agar sesuai dengan StreamView.

Parameter

Deskripsi

FILL_STREAM_VIEW

Meregangkan gambar yang dialirkan agar mengisi seluruh StreamView. Pengaturan ini tidak mempertahankan rasio aspek asli gambar, yang dapat menyebabkan distorsi jika rasio aspek tidak cocok.

FIT_STREAM_CONTENT

Menyesuaikan skala gambar yang dialirkan agar muat di dalam StreamView sambil mempertahankan rasio aspek aslinya. Ini mencegah distorsi tetapi mungkin meninggalkan area kosong jika rasio aspek gambar dan tampilan berbeda.

5.1 SystemPermission

Menentukan izin sistem.

Parameter

Deskripsi

RECORDAUDIO

Mengizinkan perekaman audio.

6. Menyesuaikan MediaStreamPlayer

Catatan

Implementasi multimedia kustom tidak diperlukan karena SDK menyediakan implementasi default.

6.1 Memproses data media

Mengimplementasikan com.aliyun.wuying.aspsdk.aspengine.MediaStreamPlayer memungkinkan aplikasi menggunakan engine media kustom untuk memproses data streaming media, yang terutama terdiri dari hal-hal berikut:

  • Data aliran video: Aliran video mentah yang terutama terdiri dari frame terkompresi H.264/H.265.

  • Aliran gambar adaptif: Aliran gambar yang terutama terdiri dari bitmap.

  • Data downstream audio: Aliran audio terutama dalam format Opus/PCM.

  • Data kursor: Saat mode mouse virtual diaktifkan, aplikasi menerima data posisi dan gambar kursor, memungkinkannya merender kursor virtual secara independen.

Aplikasi dapat memanggil IASPEngine.setMediaStreamPlayer untuk mengatur implementasi engine media kustom untuk Alibaba Cloud Workspace SDK.

6.2 MediaStreamPlayer

MediaStreamPlayer adalah kelas abstrak yang mengharuskan aplikasi mengimplementasikan metode inisialisasi dan pembersihan global, serta menyediakan implementasi kustom untuk menangani berbagai jenis data media:

image.png

Di mana:

  • Antarmuka IVideoStreamHandler digunakan untuk menangani data aliran video.

  • Antarmuka IAdaptiveGraphicStreamHandler digunakan untuk menangani data aliran grafis adaptif.

  • Antarmuka IAudioPlaybackStreamHandler digunakan untuk menangani data pemutaran audio.

  • Antarmuka ICursorBitmap digunakan untuk menangani data kursor.

Aplikasi dapat mengimplementasikan satu atau beberapa antarmuka di atas. Alibaba Cloud Workspace SDK kemudian menentukan tipe streaming cloud berdasarkan antarmuka yang diimplementasikan, sebagai berikut:

  • Jika aplikasi mengimplementasikan kedua IVideoStreamHandler dan IAdaptiveGraphicStreamHandler, mode streaming diatur ke Mixed. Dalam mode ini, Alibaba Cloud Workspace secara otomatis beralih antara aliran grafis adaptif dan aliran video.

  • Jika aplikasi hanya mengimplementasikan IVideoStreamHandler, mode streaming diatur ke Video stream only, dan server hanya akan menyediakan aliran video.

  • Jika aplikasi hanya mengimplementasikan IAdaptiveGraphicStreamHandler, mode streaming diatur ke Image stream only, dan server hanya akan menyediakan aliran gambar.

Untuk menyesuaikan cara SDK menangani berbagai jenis data media, implementasikan metode onCreateXXXHandler dalam MediaStreamPlayer:

    @Override
    protected IVideoStreamHandler onCreateVideoStreamHandler() {
        return new VideoStreamHandler();
    }

    @Override
    protected IAdaptiveGraphicStreamHandler onCreateAdaptiveGraphicStreamHandler() {
        return null;
    }

    @Override
    protected IAudioPlaybackStreamHandler onCreateAudioPlaybackStreamHandler() {
        return new AudioPlaybackStreamHandler();
    }

    @Override
    protected ICursorBitmapHandler onCreateCursorBitmapHandler() {
        return null;
    }

Pada contoh di atas, engine media kustom mengimplementasikan IVideoStreamHandler dan IAudioPlaybackStreamHandler. Metode onCreateXXXHandler dijalankan hanya sekali per sesi streaming.

Memanggil metode utama:

6.2.1 initialize

Aplikasi Anda mengimplementasikan metode ini untuk menginisialisasi secara global engine media kustom.

Sistem memanggil metode ini sekali selama setiap proses streaming.

public ErrorCode initialize()

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.2.2 release

Melepaskan semua sumber daya global yang terkait dengan engine media kustom.

Metode ini dipanggil sekali selama setiap sesi streaming.

public ErrorCode release()

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.2.3 enableStatistics

Gunakan metode ini untuk mengaktifkan atau menonaktifkan pengumpulan statistik performa.

public void enableStatistics(boolean enabled)

Parameter

Parameter

Tipe

Deskripsi

enabled

boolean

true

false

6.2.4 onCreateVideoStreamHandler

Menyediakan implementasi engine media untuk menangani data aliran video.

SDK menjalankan metode ini sekali per aliran.

public IVideoStreamHandler onCreateVideoStreamHandler()

Nilai kembalian

Tipe

Deskripsi

IVideoStreamHandler

Implementasi engine media yang disediakan aplikasi untuk menangani data aliran video.

Kembalikan null jika aplikasi tidak menyediakan implementasi. Dalam kasus ini, SDK membuang data aliran video.

6.2.5 onCreateAdaptiveGraphicStreamHandler

Menyediakan implementasi engine media untuk menangani data aliran grafis adaptif.

SDK memanggil metode ini sekali per sesi streaming.

public IAdaptiveGraphicStreamHandler onCreateAdaptiveGraphicStreamHandler()

Nilai kembalian

Tipe

Deskripsi

IAdaptiveGraphicStreamHandler

Implementasi engine media aplikasi Anda untuk menangani data aliran grafis adaptif.

Jika aplikasi Anda tidak menyediakan implementasi, kembalikan null. Dalam kasus ini, SDK tidak memproses data aliran grafis.

6.2.6 onCreateAudioPlaybackStreamHandler

Menyediakan implementasi engine media untuk memproses data downstream audio.

SDK memanggil metode ini sekali per sesi streaming.

public IAudioPlaybackStreamHandler onCreateAudioPlaybackStreamHandler()

Nilai kembalian

Tipe

Deskripsi

IAudioPlaybackStreamHandler

Implementasi engine media yang disediakan aplikasi untuk memproses data downstream audio.

Jika aplikasi tidak menyediakan implementasi, kembalikan null. Dalam kasus ini, SDK tidak memproses data downstream audio.

6.2.7 onCreateCursorBitmapHandler

Menyediakan SDK dengan engine media untuk pemrosesan data kursor.

SDK memanggil metode ini sekali per sesi streaming.

SDK hanya menggunakan implementasi antarmuka yang dikembalikan dalam mode mouse virtual.

public ICursorBitmapHandler onCreateCursorBitmapHandler()

Nilai kembalian

Tipe

Deskripsi

ICursorBitmapHandler

Implementasi engine media untuk pemrosesan data kursor.

Kembalikan null jika aplikasi Anda tidak mengimplementasikan pemrosesan data kursor. Dalam kasus ini, SDK tidak memproses data kursor, bahkan dalam mode mouse virtual.

6.3 IVideoStreamHandler

Antarmuka ini menyediakan metode utama untuk menangani aliran video. Alur kerja utamanya adalah sebagai berikut:

Saat aplikasi beralih antara foreground dan background, Surface yang digunakan untuk rendering dihancurkan atau dibuat ulang. Dalam kasus ini, metode IVideoStreamHandler.setVideoSurface dipanggil berulang kali. Saat Surface dihancurkan, objek surface yang diteruskan ke setVideoSurface bernilai null. Aplikasi Anda harus menangani titik kegagalan pada decoder dan renderer.

Dengan mengimplementasikan metode IVideoStreamHandler.setEventHandler, aplikasi memperoleh antarmuka penanganan event yang disediakan oleh Alibaba Cloud Workspace SDK. Aplikasi menggunakan antarmuka ini untuk memberi tahu SDK tentang event pemrosesan video dari engine media kustomnya, terutama untuk mengumpulkan data performa.

    @Override
    public void setEventHandler(EventHandler handler) {
        Log.i(TAG, "setEventHandler handler " + handler);
        VideoStreamEventHandler.getInstance().reset(handler);
    }

...
    
    public synchronized void onVideoFrameRendered() {
        VFrame frame = mVideoFrame.remove();
        if (mEnabled && mHandler != null) {
            Event event = new Event();
            event.type = EventType.RENDER_PERF_INFO;
            event.decodePerfInfo = new VDecodePerfInfo();
            event.renderPerfInfo = new VRenderPerfInfo();
            event.renderPerfInfo.frameId = frame.frameId;
            event.renderPerfInfo.sessionId = frame.sessionId;
            // Memberi tahu Wuying SDK bahwa frame video telah dirender. SDK kemudian menggunakan frameId untuk menghitung latensi end-to-end sisi klien.
            mHandler.callback(event);
        }
    }

6.3.1 setEventHandler

Dipanggil saat SDK memuat engine media kustom. Menyediakan EventHandler untuk mengirim event pemrosesan aliran video.

public void setEventHandler(EventHandler handler)

Parameter

Parameter

Tipe

Deskripsi

handler

EventHandler

Objek yang disediakan oleh Alibaba Cloud Workspace SDK yang digunakan aplikasi Anda untuk mengirim event pemrosesan aliran video ke SDK.

6.3.2 addVideoTrack

Dipanggil saat aliran video dibuat.

Saat ini, hanya satu aliran video yang dapat ada dalam satu sesi streaming.

ErrorCode addVideoTrack(int trackId, VProfile profile);

Parameter

Parameter

Tipe

Deskripsi

trackId

int

ID aliran video.

profile

VProfile

Informasi tentang aliran video.

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.3.3 setVideoSurface

Dipanggil saat status Surface rendering video berubah.

ErrorCode setVideoSurface(int trackId, Surface surface);

Parameter

Parameter

Tipe

Deskripsi

trackId

int

ID aliran video.

surface

android.view.Surface

Objek Surface rendering.

Nilai ini dapat berupa null saat aplikasi masuk ke background atau perangkat terkunci.

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.3.4 playVideo

Aplikasi Anda harus mengimplementasikan metode ini. SDK memanggilnya saat aliran video siap untuk diputar.

ErrorCode playVideo(int trackId);

Parameter

Parameter

Tipe

Deskripsi

trackId

int

ID aliran video.

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.3.5 removeVideoTrack

Menghapus aliran video yang ditentukan.

ErrorCode removeVideoTrack(int trackId);

Parameter

Parameter

Tipe

Deskripsi

trackId

int

ID aliran video.

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.3.6 pushVideoFrame

Anda mengimplementasikan metode ini dalam aplikasi Anda. SDK memanggil metode ini saat menerima frame video baru.

ErrorCode pushVideoFrame(int trackId, VFrame frame);

Parameter

Parameter

Tipe

Deskripsi

trackId

int

ID aliran video.

frame

VFrame

Frame video yang diterima.

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.3.7 getVideoTracks

Mengembalikan informasi tentang semua aliran video yang sedang diproses.

HashMap<Integer, VProfile> getVideoTracks();

Nilai kembalian

Tipe

Deskripsi

HashMap<Integer, VProfile>

HashMap yang berisi informasi tentang semua aliran video yang sedang diproses.

6.3.8 release

Metode ini diimplementasikan oleh aplikasi. Dipanggil saat semua aliran video dihancurkan, memungkinkan aplikasi melakukan pembersihan.

ErrorCode release();

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.4 IAudioPlaybackStreamHandler

Antarmuka ini menyediakan metode untuk menangani data aliran audio. Alur kerjanya adalah sebagai berikut:

6.4.1 initAudio

Dipanggil saat saluran audio dibuat.

ErrorCode initAudio();

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.4.2 deInitAudio

Dipanggil saat saluran audio dihancurkan.

ErrorCode deInitAudio();

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.4.3 startAudioPlayback

Dipanggil sebelum Cloud Phone mulai mengirim aliran audio.

ErrorCode startAudioPlayback();

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.4.4 stopAudioPlayback

Aplikasi Anda mengimplementasikan metode ini. SDK memanggil metode ini saat Cloud Phone berhenti mengirim aliran audio.

ErrorCode stopAudioPlayback();

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.4.5 pushAudioPlaybackFrame

Aplikasi Anda mengimplementasikan metode ini. SDK memanggil metode ini saat frame audio downstream baru diterima.

ErrorCode pushAudioPlaybackFrame(AFrame pbData);

Parameter

Parameter

Tipe

Deskripsi

pbData

AFrame

Frame audio downstream yang diterima.

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.4.6 updateAudioPlaybackVol

Dipanggil saat volume sistem Cloud Phone berubah.

ErrorCode updateAudioPlaybackVol(int volume);

Parameter

Parameter

Tipe

Deskripsi

volume

int

Nilai berkisar dari 0 (bisu) hingga USHRT_MAX.

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.4.7 updateAudioPlaybackMute

Dipanggil saat Cloud Phone dibisukan atau dibunyikan kembali.

ErrorCode updateAudioPlaybackMute(int mute);

Parameter

Parameter

Tipe

Deskripsi

mute

int

Menunjukkan status bisu. Nilai 1 berarti Cloud Phone dibisukan, dan 0 berarti tidak dibisukan.

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.4.8 release

Metode ini diimplementasikan oleh aplikasi. Dipanggil saat saluran audio dihancurkan untuk memungkinkan aplikasi melakukan pembersihan.

ErrorCode release();

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.5 IAdaptiveGraphicStreamHandler

Antarmuka ini menyediakan metode untuk memproses data aliran gambar. Alur kerjanya adalah sebagai berikut:

Aplikasi menerima frame gambar sebagai bitmap ARGB8888.

Setiap sesi streaming mendukung maksimal satu aliran gambar.

6.5.1 setAdaptiveGraphicSurface

Dipanggil saat status Surface yang digunakan untuk rendering gambar berubah.

ErrorCode setAdaptiveGraphicSurface(Surface surface);

Parameter

Parameter

Tipe

Deskripsi

surface

android.view.Surface

Surface untuk rendering gambar.

Objek ini dapat bernilai null saat aplikasi masuk ke background atau layar terkunci.

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.5.2 invalidateAdaptiveGraphicSurface

Dipanggil saat data frame grafis adaptif baru tersedia.

ErrorCode invalidateAdaptiveGraphicSurface(Region region, byte[] buffer, BitmapFormat format);

Parameter

Parameter

Tipe

Deskripsi

region

Region

Area gambar untuk frame grafis adaptif.

buffer

byte[]

Data frame grafis adaptif.

format

BitmapFormat

Format frame grafis adaptif. Default-nya adalah ARGB8888.

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.5.3 release

Dipanggil saat aliran gambar dihancurkan untuk melakukan pembersihan.

ErrorCode release();

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.6 ICursorBitmapHandler

Antarmuka ini mendefinisikan metode utama untuk menangani data kursor. Untuk merender gambar kursor dalam mode mouse virtual, aplikasi harus menyediakan SDK dengan implementasi antarmuka ini. Alur kerja utamanya adalah sebagai berikut:

6.6.1 setCursorBitmap

Dipanggil saat grafis kursor pada Cloud Phone berubah.

ErrorCode setCursorBitmap(CursorBitmap bitmap);

Parameter

Parameter

Tipe

Deskripsi

bitmap

CursorBitmap

Data grafis kursor dari Cloud Phone.

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.6.2 unsetCursorBitmap

Dipanggil saat kursor pada Cloud Phone disembunyikan.

ErrorCode unsetCursorBitmap();

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.6.3 setCursorPosition

Mengatur posisi kursor di Cloud Phone.

ErrorCode setCursorPosition(float x, float y);

Parameter

Parameter

Tipe

Deskripsi

x

float

Koordinat x kursor.

y

float

Koordinat y kursor.

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

6.6.4 release

Dipanggil setelah koneksi terputus dan kursor menghilang untuk melakukan pembersihan.

ErrorCode release();

Nilai kembalian

Tipe

Deskripsi

ErrorCode

ErrorCode.OK jika berhasil, atau kode kesalahan jika gagal.

Kode kesalahan

Kode kesalahan

Pesan kesalahan (%s mewakili Cloud Phone atau aplikasi cloud)

Modul

Penyebab

Kode kesalahan 2–26 terutama terkait dengan masalah jaringan.

2

Gagal terhubung ke %s.

ASP SDK

Nilai MAGIC tidak valid.

3

Gagal terhubung ke %s.

ASP SDK

Data tidak valid.

4

Versi klien dan server tidak cocok.

ASP SDK

Ketidakcocokan versi.

5

Diperlukan koneksi TLS.

ASP SDK

Server memerlukan koneksi TLS, tetapi klien tidak memulainya.

6

Koneksi TLS tidak terduga.

ASP SDK

Koneksi tidak memerlukan TLS, tetapi digunakan.

7

Izin ditolak untuk terhubung ke %s.

ASP SDK

Izin tidak mencukupi.

8

ID klien tidak valid selama migrasi.

ASP SDK

ID klien tidak valid selama migrasi.

9

Gagal terhubung ke %s.

ASP SDK

Saluran tidak ada.

20

Gagal terhubung ke server ASP.

ASP SDK

Kesalahan koneksi saluran.

21

Terjadi kesalahan autentikasi TLS.

ASP SDK

Kesalahan autentikasi TLS.

22

Gagal terhubung ke %s.

ASP SDK

Kesalahan tautan saluran.

23

Gagal terhubung ke %s.

ASP SDK

Kesalahan autentikasi koneksi.

24

Gagal terhubung ke %s.

ASP SDK

Kesalahan I/O koneksi.

25

Gagal terhubung ke %s.

ASP SDK

Validasi tiket gagal. Kesalahan ini juga terjadi saat menggunakan kembali tiket dari sesi yang telah dihentikan.

26

Proses jabat tangan xquic gagal.

ASP SDK

Proses jabat tangan xquic gagal.

1206

Tiket sedang digunakan.

ASP SDK

Tiket dapat digunakan kembali, tetapi hanya untuk satu koneksi dalam satu waktu. Kesalahan ini terjadi jika Anda mencoba membangun koneksi baru saat Cloud Phone sedang digunakan.

1207

Tiket tidak valid karena instance di-restart.

ASP SDK

Instance di-restart, yang membuat tiket tidak valid.

Kode kesalahan SDK untuk mode kolaboratif

1000

Token kosong.

ASP SDK

Kesalahan ini hanya terjadi dalam mode kolaboratif saat validasi sekunder antara klien dan server gagal.

1001

Pengguna kosong.

ASP SDK

1200

Token tidak valid.

ASP SDK

1201

VM tidak valid.

ASP SDK

1202

Terjadi kesalahan internal admin.

ASP SDK

1203

Pengguna tidak valid.

ASP SDK

1204

Token telah kedaluwarsa.

ASP SDK

1500

Terjadi kesalahan internal server.

ASP SDK

1501

Terjadi kesalahan jaringan server.

ASP SDK

Pemutusan koneksi dan kesalahan lainnya

2000

Terputus dari server karena pengambilan data dari %s melebihi batas waktu.

ASP SDK

Batas waktu pengambilan data.

2001

%s terputus dari server, kemungkinan karena prosesnya dihentikan.

ASP SDK

Ini biasanya terjadi saat proses di sisi klien dihentikan. Misalnya, aplikasi Android ditutup oleh pengguna dengan menekan tombol Home.

2002

Pengguna lain telah terhubung ke %s saat ini dari terminal berbeda.

ASP SDK

Sesi diambil alih oleh pengguna lain dalam mode preemptive.

2003

%s sedang dimatikan atau di-restart. Ini biasanya merupakan tindakan yang diprakarsai administrator.

ASP SDK

Cloud Phone dimatikan atau di-restart, biasanya oleh administrator.

2004

Koneksi pengguna saat ini dihentikan.

ASP SDK

Klien memulai pemutusan, atau server memicu tindakan kick atau disconnect.

2005

Sesi terputus: batas waktu penggunaan tercapai.

ASP SDK

Sesi dihentikan karena mencapai batas durasi penggunaan yang ditetapkan oleh administrator.

2006

Izin Anda untuk menggunakan Cloud Phone ini telah dicabut oleh administrator. Anda akan keluar dan terputus.

ASP SDK

Otorisasi pengguna dicabut oleh administrator.

2010

Gagal terhubung ke %s.

ASP SDK

Gagal terhubung ke Vdagent.

2011

Terjadi kesalahan saat meneruskan parameter koneksi.

ASP SDK

Parameter tidak valid diteruskan saat menghubungkan ke server.

2027

Mode tarik aliran diubah.

ASP SDK

Mode tarik aliran diubah dari mode preemptive ke mode kolaboratif, atau dari mode kolaboratif ke mode preemptive.

2100

Izin clipboard ditolak untuk menyalin dari %s ke perangkat lokal.

ASP SDK

Akses clipboard dari instance remote ke klien lokal ditolak oleh kebijakan.

2101

Izin clipboard ditolak untuk menyalin dari perangkat lokal ke %s.

ASP SDK

Akses clipboard dari klien lokal ke instance remote ditolak oleh kebijakan.

2200

%s sedang mencoba menyambung ulang...

ASP SDK

Koneksi terputus karena masalah jaringan, dan ASP SDK sedang mencoba menyambung ulang.

2201

Perangkat Anda mengalami anomali jaringan, menyebabkan %s terputus.

ASP SDK

Koneksi terputus karena masalah jaringan. ASP SDK tidak mendukung penyambungan ulang karena batasan gambar; sisi aplikasi harus memulai penyambungan ulang.

2202

Penyambungan ulang ke %s melebihi batas waktu.

ASP SDK

Upaya penyambungan ulang ASP SDK melebihi batas waktu.

2210

Koneksi terputus saat perangkat klien sedang tidur.

ASP SDK

Jaringan lokal terputus saat perangkat klien sedang tidur, yang menyebabkan koneksi Cloud Phone terputus.

2212

Koneksi terputus karena anomali jaringan lokal.

ASP SDK

Anomali jaringan lokal terdeteksi, yang menyebabkan Cloud Phone terputus.

2220

Koneksi terputus karena anomali jaringan lokal.

ASP SDK

Anomali jaringan lokal terdeteksi, yang menyebabkan Cloud Phone terputus.

2240

Penyambungan ulang gagal karena token dalam tiket tidak valid.

ASP SDK

2300

Koneksi gagal karena parameter tidak valid dari sisi aplikasi.

sisi aplikasi

2501

Klien gagal terhubung ke gerbang aliran. Jaringan tidak dapat dijangkau.

gerbang aliran

2502

Klien gagal terhubung ke gerbang aliran. Koneksi TCP ke alamat IP gerbang aliran melebihi batas waktu setelah tiga percobaan (total 15 detik).

gerbang aliran

2503

Klien gagal terhubung ke gerbang aliran karena kesalahan jaringan yang tidak diketahui.

gerbang aliran

2504

Klien gagal terhubung ke gerbang aliran. Koneksi dibatalkan oleh perangkat lunak.

gerbang aliran

2505

Klien gagal terhubung ke gerbang aliran. Koneksi ditolak.

gerbang aliran

2506

Tiket tidak valid. Gerbang gagal mengurai token.

gerbang aliran

2507

Tiket tidak valid karena telah kedaluwarsa.

gerbang aliran

2508

Tiket tidak valid karena ketidakcocokan UUID.

gerbang aliran

2509

Gerbang aliran gagal memeriksa server ASP.

gerbang aliran

2510

Pemeriksaan ke server ditolak. Solusi: Pastikan server mendengarkan pada port 5912.

gerbang aliran

2511

Pemeriksaan ke server gagal karena kesalahan selain batas waktu atau penolakan.

gerbang aliran

2512

Validasi token gerbang aliran gagal.

ID VPC dalam token manajemen tidak cocok dengan ID VPC gerbang aliran.

gerbang aliran

2513

Koneksi TCP di-reset selama proses jabat tangan "SayHello" antara klien dan gerbang aliran.

gerbang aliran

2520

Koneksi klien gagal; pemeriksaan mandiri menunjukkan adanya anomali jaringan.

ASP SDK

2521

Klien terputus setelah tiga kali upaya penyambungan ulang gagal selama fase proses jabat tangan TLS dengan gerbang aliran.

ASP SDK

2522

Terjadi kesalahan koneksi di lingkungan VPN.

ASP SDK

2523

Klien mencoba terhubung menggunakan suite protokol GM/T. Verifikasi konfigurasi server atau pilih metode koneksi yang kompatibel.

ASP SDK

2701

Terjadi masalah jaringan di sisi klien.

ASP SDK

2702

Proses jabat tangan SSL antara klien dan gerbang aliran melebihi batas waktu.

ASP SDK

2703

Proses jabat tangan "SayHello" antara klien dan gerbang aliran melebihi batas waktu.

ASP SDK

2704

Respons server ASP terhadap permintaan pembangunan koneksi melebihi batas waktu.

Kemungkinan penyebab: Server ASP tidak merespons, anomali jaringan, instance membeku, atau penggunaan memori/CPU tinggi.

ASP SDK

2705

Klien ASP melebihi batas waktu saat menunggu frame pertama.

Kemungkinan penyebab: Server ASP tidak merespons, tidak ada frame yang dihasilkan karena masalah tangkapan layar atau driver GPU, anomali jaringan, atau penggunaan memori/CPU tinggi.

ASP SDK

2706

Penggunaan CPU atau memori lokal yang tinggi pada klien dapat menyebabkan kegagalan koneksi.

ASP SDK

2707

Server ASP melebihi batas waktu saat mengambil frame tangkapan layar pertama dari OS guest.

ASP SDK

2708

Koneksi gagal karena thread SDK macet.

ASP SDK

Kesalahan logika sisi klien

5100

Koneksi dari %s ke server ASP melebihi batas waktu.

sisi aplikasi

Sisi klien tidak menerima event "connected" dalam periode waktu yang ditentukan.

5102

Pengambilan data dari %s melebihi batas waktu.

sisi aplikasi

Sisi klien menerima event "connected" tetapi tidak menerima event "display" dalam periode waktu yang ditentukan.

5004

Parameter startup tidak valid.

sisi aplikasi

Parameter startup tidak valid diteruskan ke sisi klien. Ini biasanya terjadi selama pengembangan.

5200

Penyambungan ulang klien melebihi batas waktu.

sisi aplikasi

8. FAQ

Restart Cloud Phone

Untuk me-restart Cloud Phone, panggil API RebootAndroidInstancesInGroup. Tindakan ini akan memutus sementara klien dari Cloud Phone. Setelah restart selesai, Anda perlu menyambung ulang dari klien.

Maven publik

Hosting Maven publik saat ini tidak didukung. Untuk mengintegrasikan SDK, Anda dapat mengunggah pustaka AAR ke repositori Maven Anda sendiri.

Perintah ADB umum

Fitur

Perintah

Tombol kembali

input keyevent KEYCODE_BACK

Tombol home

input keyevent KEYCODE_HOME

Pengalih aplikasi

input keyevent KEYCODE_APP_SWITCH

Bisu

input keyevent 164

Volume naik

input keyevent KEYCODE_VOLUME_UP

Volume turun

input keyevent KEYCODE_VOLUME_DOWN

Sembunyikan bilah navigasi

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

Tampilkan bilah navigasi

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

Tangkapan layar

screencap -p /sdcard/Download/abc.png