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
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.gradlemodul 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.xmlAnda:
<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:
Definisikan dan inisialisasi instans
StreamViewseperti dijelaskan pada Bagian 2.1.Gunakan
IAspEngineuntuk membangun koneksi. Parameter harus konsisten dengan definisiConfigpada 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);Bind
IAspEnginekeStreamView. Pemanggilan ini merender aliran padaViewyang ditentukan.mStreamView.bindASPEngine(engine);Lanjutkan rendering pada
StreamView. Pemanggilan ini mengarahkanViewuntuk 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 |
Proxy callback permintaan izin sistem: IRequestSystemPermissionListener
Deskripsi antarmuka:
API | Deskripsi |
bool OnRequestSystemPermission(SystemPermission permission) | Dipicu saat SDK perlu meminta izin sistem. Parameter |
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 Mengatur parameter ini ke |
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 |
scaleStreamVideo(ScaleType scaleType) | Menentukan perilaku penskalaan untuk aliran video. Untuk nilai valid |
setVideoProfile(int width, int height, int fps, IRemoteResult result) | Mengatur resolusi untuk aliran video. Parameter |
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 |
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 |
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 |
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 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 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 addLyncChannel(LyncChannel var1) dan removeLyncChannel(LyncChannel var1) | Menambahkan atau menghapus saluran untuk mengirim perintah ADB. Untuk detail implementasi, lihat |
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 Parameter |
Di bawah registerIMEListener, unregisterIMEListener, setImeType, enableRelativeMouse, dll. | Tidak didukung pada Cloud Phone. |
4. Parameter
4.1 Config
Gunakan parameter ini untuk membangun koneksi.
Parameter | Tipe | Deskripsi |
| string | ID instans. Nilai ini sesuai dengan |
| string | Tiket otentikasi koneksi. Dapatkan tiket ini dengan memanggil API |
| boolean | Mengaktifkan saluran RTC jika diatur ke |
| boolean | Mengaktifkan pemeriksaan ketersediaan VDAgent selama koneksi jika diatur ke |
| boolean | Atur ke |
| string | Tipe sistem operasi. Harus diatur ke |
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
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:

Di mana:
Antarmuka
IVideoStreamHandlerdigunakan untuk menangani data aliran video.Antarmuka
IAdaptiveGraphicStreamHandlerdigunakan untuk menangani data aliran grafis adaptif.Antarmuka
IAudioPlaybackStreamHandlerdigunakan untuk menangani data pemutaran audio.Antarmuka
ICursorBitmapdigunakan 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 |
|
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 |
|
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 |
|
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 |
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 |
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 |
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 |
|
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 Nilai ini dapat berupa |
Nilai kembalian
Tipe | Deskripsi |
ErrorCode |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
6.4.2 deInitAudio
Dipanggil saat saluran audio dihancurkan.
ErrorCode deInitAudio();Nilai kembalian
Tipe | Deskripsi |
ErrorCode |
|
6.4.3 startAudioPlayback
Dipanggil sebelum Cloud Phone mulai mengirim aliran audio.
ErrorCode startAudioPlayback();Nilai kembalian
Tipe | Deskripsi |
ErrorCode |
|
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 |
|
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 |
|
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 |
Nilai kembalian
Tipe | Deskripsi |
ErrorCode |
|
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 |
Nilai kembalian
Tipe | Deskripsi |
ErrorCode |
|
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 |
|
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 |
Objek ini dapat bernilai null saat aplikasi masuk ke background atau layar terkunci. |
Nilai kembalian
Tipe | Deskripsi |
ErrorCode |
|
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 |
|
6.5.3 release
Dipanggil saat aliran gambar dihancurkan untuk melakukan pembersihan.
ErrorCode release();Nilai kembalian
Tipe | Deskripsi |
ErrorCode |
|
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 |
|
6.6.2 unsetCursorBitmap
Dipanggil saat kursor pada Cloud Phone disembunyikan.
ErrorCode unsetCursorBitmap();Nilai kembalian
Tipe | Deskripsi |
ErrorCode |
|
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 |
|
6.6.4 release
Dipanggil setelah koneksi terputus dan kursor menghilang untuk melakukan pembersihan.
ErrorCode release();Nilai kembalian
Tipe | Deskripsi |
ErrorCode |
|
Kode kesalahan
Kode kesalahan | Pesan kesalahan ( | 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 |