Alibaba Cloud Workspace SDK for Android は、クラウドコンピューター、クラウドアプリ、クラウドフォンに接続するためのオープンインターフェイスを提供します。この SDK を統合することで、ビジネスニーズに合わせた Android クライアントを迅速にカスタマイズして構築できます。
1. クイックスタート
1.1 SDK とデモの入手
SDK をダウンロードして使用することにより、Alibaba Cloud Workspace SDK プライバシーポリシーに同意したものとみなされます。
これらのドキュメント、SDK、およびクライアントは内部使用のみを目的としています。Alibaba Cloud の許可なく、第三者に配布しないでください。
環境要件
サポートされる最小 Android バージョン:5.1
AAR パッケージの統合
aspengine-third-release.aar, aspengine-player-release.aar、および wytrace-release.aar を
app/libsディレクトリにコピーします。app モジュールの
build.gradleファイルに、次の依存関係を追加します:
dependencies {
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
// aspengine-sdk に必要な INI 構成解析ライブラリ。
implementation 'org.ini4j:ini4j:0.5.4'
// 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'
}AndroidManifest.xmlファイルで、必須の権限を宣言します:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE"/>ProGuard の難読化回避ルールを設定します。
-keep class com.aliyun.wuying.aspsdk.** { *; }
-dontwarn com.aliyun.wuying.aspsdk.**1.2 統合プロセス
1.3 ベストプラクティス
詳細については、「クラウドフォン統合のベストプラクティス」をご参照ください。
SDK 統合のための接続チケットを取得するには、複数のログイン方法が利用できます。
コード例については、ライフサイクルインターフェイスのサンプルコードをご参照ください。
2. ライフサイクルインターフェイス
2.1 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 接続の確立
mConfigs の値については、セクション 4.1 をご参照ください。
mStreamView.start(mConfigs);2.3 接続の切断
mStreamView.stop();2.4 StreamView インスタンスの破棄
mStreamView.dispose();
mStreamView = null;2.5 マルチ StreamView モード
このモードでは、1 つのストリームを複数の View インスタンス間でシームレスに切り替えることができます。このモードを実装するには、以下の手順に従います。
セクション 2.1 の説明に従って、
StreamViewインスタンスを定義および初期化します。IAspEngineを使用して接続を確立します。パラメーターは、セクション 4.1 のConfig定義と一致している必要があります。IASPEngine engine = mBuilder.enableRTC(true).build(context); // データ統計を有効にします。 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);IAspEngineをStreamViewにバインドします。この呼び出しは、指定されたView上にストリームをレンダリングします。mStreamView.bindASPEngine(engine);StreamView上でレンダリングを再開します。この呼び出しは、Viewにストリームのレンダリングを再開するように指示します。mStreamView.resumeASPEngine();
詳細については、デモアプリケーションの実装をご参照ください。
2.6 コールバック
接続コールバックプロキシ: IASPEngineListener
インターフェイスの説明:
API | 説明 |
onConnectionSuccess(int connectionId) | クラウドフォンへの接続が正常に確立されたときにトリガーされます。接続 ID を返します。 |
onConnectionFailure(int errorCode, String errorMsg) | クラウドフォンへの接続に失敗した場合にトリガーされます。エラーコードとエラーメッセージを返します。 |
onEngineError(int errorCode, String errorMsg) | 内部 SDK エラーが発生したときにトリガーされます。エラーコードとエラーメッセージを返します。 |
onDisconnected(int reason) | 接続が切断されたときにトリガーされます。整数の切断理由コードを返します。 |
onReconnect(int errorCode) | 切断後に SDK が再接続を試みたときにトリガーされます。再接続をトリガーしたエラーコードを返します。 |
onFirstFrameRendered(long timeCostMS) | 最初のビデオフレームがレンダリングされたときにトリガーされます。接続開始から最初のフレームまでの経過時間をミリ秒単位で返します。 |
onPolicyUpdate(String policy) | クラウドフォンからポリシーの更新を受信したときにトリガーされます。ポリシー構成を文字列として返します。 |
onSessionSuccess() | ストリーミングセッションが正常に確立されたときにトリガーされます。 |
パフォーマンスデータコールバックプロキシ: IStatisticsListener
インターフェイスの説明:
API | 説明 |
onStatisticsInfoUpdate(StatisticsInfo statisticsInfo) | パフォーマンスデータを提供するために定期的に呼び出されます。最新のメトリックを含む |
システム権限リクエストコールバックプロキシ: IRequestSystemPermissionListener
インターフェイスの説明:
API | 説明 |
bool OnRequestSystemPermission(SystemPermission permission) | SDK がシステム権限をリクエストする必要があるときに呼び出されます。 |
コールバックの登録と登録解除のサンプルコード:
// 接続コールバックをリッスンします。
mStreamView.getASPEngineDelegate().registerASPEngineListener(IASPEngineListener listener);
mStreamView.getASPEngineDelegate().unregisterASPEngineListener(IASPEngineListener listener);
// パフォーマンスデータコールバックをリッスンします。
mStreamView.getASPEngineDelegate().registerStatisticsListener(IStatisticsListener listener);
mStreamView.getASPEngineDelegate().unregisterStatisticsListener(IStatisticsListener listener);
// システム権限リクエストをリッスンします。
mStreamView.registerSystemPermissionListener(IRequestSystemPermissionListener listener);
mStreamView.unregisterSystemPermissionListener(IRequestSystemPermissionListener listener);3. サービス API
API | 説明 |
enableVDAgentCheck(boolean enabled) | 接続確立時に VDAgent の可用性チェックを強制するかどうかを指定します。このチェックはデフォルトで有効です。 この値が 内部デバッグ目的の場合を除き、このパラメーターを |
enableRTC(boolean enabled) | ストリーミングデータの送信に RTC を使用するかどうかを指定します。デフォルトでは RTC が使用されます。 |
enableDesktopMode(boolean enabled) | デスクトップモードを有効または無効にします。有効にすると、すべてのタッチ入力がマウスイベントに変換され、サーバーに送信されます。クラウドフォンでは、これを |
scaleStreamVideo(ScaleType scaleType) | ビデオストリームのスケーリング動作を指定します。 |
setVideoProfile(int width, int height, int fps, IRemoteResult result) | ビデオストリームの解像度を設定します。 |
boolean sendKeyEvent(KeyEvent event) および sendKeyboardEvent(KeyEvent event, IRemoteResult result) | キーボードイベントをリモートセッションに送信します。 |
boolean simulateMouseClick(boolean leftButton) | リモートセッションでマウスクリックをシミュレートします。左クリックの場合はパラメーターを |
boolean enableMouseMode(boolean enabled) | マウスモードを有効または無効にします。 |
boolean sendMouseEvent(MotionEvent motionEvent) および sendMouseEvent(MotionEvent motionEvent, IRemoteResult result) | マウスイベントをリモートセッションに送信します。 |
reconnect(String connectionToken) | 予期せぬ切断後にセッションに再接続します。 このメソッドは通常、 |
boolean setMediaStreamPlayer(MediaStreamPlayer player) | SDK のデフォルトのメディアエンジンを、アプリケーションが提供するカスタムエンジンに置き換えます。このメソッドは、ストリーミングを開始する前、またはストリームが切断された後に呼び出す必要があります。 |
void setAlignStreamResolutionWithSurfaceSize(boolean aligned) | ストリーミングの開始時に、ストリームの解像度をクライアント側の |
void mute(boolean muted) | ミュートモードを有効または無効にします。 |
void enableStatistics(boolean enabled) | パフォーマンスデータの収集を有効または無効にします。 |
mStreamView.getASPEngineDelegate().requestIFrame() | キーフレームをリクエストします。 |
registerFileTransferListener(IFileTransferListener var1) および unregisterFileTransferListener(IFileTransferListener var1) および mStreamView.getASPEngineDelegate().uploadFiles(pathList, "/sdcard/Download/"); | ファイルのアップロードとダウンロードを管理します。実装の詳細については、デモアプリケーションをご参照ください。 |
addDataChannel(DataChannel var1) および removeDataChannel(DataChannel var1) | リモートセッションとデータを交換するためのカスタムデータチャネルを追加または削除します。実装の詳細については、デモアプリケーションをご参照ください。 |
addLyncChannel(LyncChannel var1) および removeLyncChannel(LyncChannel var1) | ADB コマンドを送信するためのチャンネルを追加または削除します。実装の詳細については、デモアプリケーションの |
void setToQualityFirst() | 品質優先モードを設定します。このモードは最大フレームレート 30 fps をサポートし、画質は「高」に設定されます。クラウドフォンではサポートされていません。 |
void setToFpsFirst() | スムーズさ優先モードを設定します。このモードは最大フレームレート 60 fps をサポートし、画質は「良」に設定されます。クラウドフォンではサポートされていません。 |
void setToCustomPicture(int fps, int quality); | フレームレートと画質を定義できるカスタムモードを設定します。
|
registerIMEListener, unregisterIMEListener, setImeType, enableRelativeMouse, など。 | クラウドフォンではサポートされていません。 |
4. パラメーター
4.1 Config
これらのパラメーターを使用して接続を確立します。
パラメーター | 型 | 説明 |
| string | インスタンス ID。この値は、 |
| string | 接続認証チケット。 |
| boolean |
|
| boolean |
|
| boolean |
|
| string | オペレーティングシステムのタイプ。クラウドフォンの場合は、 |
4.2 StatisticsInfo
パフォーマンスデータ
API | 型 | 説明 |
mReceiveFps | int | 受信フレームレート |
mRenderFps | int | レンダリングフレームレート |
mDownstreamBandwithMBPerSecond | double | ダウンストリーム帯域幅 |
mUpstreamBandwithMBPerSecond | double | アップストリーム帯域幅 |
mP2pFullLinkageLatencyMS | long | エンドツーエンドレイテンシ (非推奨) |
mNetworkLatencyMS | long | ネットワーク RTT |
mPingGatewayRttMS | long | Ping RTT |
mLostRate | double | パケット損失率 |
mServerRenderLatencyMS | long | クラウド側レンダリングレイテンシ |
mServerEncoderLatencyMS | long | クラウド側エンコーディングレイテンシ |
mServerTotalLatencyMS | long | クラウド側合計レイテンシ |
mTotalDownstreamBandwidth | long | 合計ダウンストリーム帯域幅 |
mGuestCpuUsage | long | ゲスト CPU 使用量 |
mStreamType | String | ストリーミングプロトコル |
5. 列挙型
5.1 ScaleType
ストリーミングされた画像を StreamView に合わせてどのようにスケーリングするかを指定します。
パラメーター | 説明 |
FILL_STREAM_VIEW | ストリーミングされた画像を StreamView 全体に引き伸ばして塗りつぶします。この設定は画像の元のアスペクト比を保持しないため、アスペクト比が一致しない場合に画像が歪む可能性があります。 |
FIT_STREAM_CONTENT | 元のアスペクト比を維持しながら、ストリーミングされた画像を StreamView 内に収まるようにスケーリングします。これにより歪みは防げますが、画像とビューのアスペクト比が異なる場合は空白部分が残る可能性があります。 |
5.1 SystemPermission
システム権限を指定します。
パラメーター | 説明 |
RECORDAUDIO | 音声の録音を許可します。 |
6. MediaStreamPlayer のカスタマイズ
SDK はデフォルトのマルチメディア実装を提供しているため、カスタム実装は必須ではありません。
6.1 メディアデータの処理
com.aliyun.wuying.aspsdk.aspengine.MediaStreamPlayer を実装することにより、アプリケーションはカスタムメディアエンジンを使用してストリーミングメディアデータを処理できるようになります。このデータは、主に以下の内容で構成されています。
ビデオストリームデータ:主に H.264/H.265 圧縮フレームで構成される生のビデオストリーム。
アダプティブ画像ストリーム:主にビットマップで構成される画像ストリーム。
音声ダウンストリームデータ:主に Opus/PCM 形式の音声ストリーム。
カーソルデータ:仮想マウスモードが有効な場合、アプリケーションはカーソル画像と位置データを受信し、仮想カーソルを独立してレンダリングできます。
アプリケーションは IASPEngine.setMediaStreamPlayer を呼び出して、Alibaba Cloud Workspace SDK のカスタムメディアエンジンの実装を設定できます。
6.2 MediaStreamPlayer
MediaStreamPlayer は、アプリケーションがグローバルな初期化およびクリーンアップメソッドを実装し、さまざまなメディアデータの型を扱うためのカスタム実装を提供する必要がある抽象クラスです:

ここで:
IVideoStreamHandlerインターフェイスは、ビデオストリームデータを処理するためのものです。IAdaptiveGraphicStreamHandlerインターフェイスは、アダプティブグラフィックのストリームデータを処理します。IAudioPlaybackStreamHandlerインターフェイスは、音声再生データを処理するためのものです。ICursorBitmapインターフェイスは、カーソルデータを扱うためのものです。
アプリケーションは、前述のインターフェイスの 1 つ以上を実装できます。Alibaba Cloud Workspace SDK は、実装されているインターフェイスに基づいて、次のようにクラウドストリーミングの種類を決定します。
アプリが IVideoStreamHandler と IAdaptiveGraphicStreamHandler の両方を実装している場合、ストリーミングモードは「混合」に設定されます。このモードでは、Alibaba Cloud Workspace はアダプティブグラフィックストリームとビデオストリームを自動的に切り替えます。
アプリが IVideoStreamHandler のみを実装している場合、ストリーミングモードは「ビデオストリームのみ」に設定され、サーバーはビデオストリームのみを提供します。
アプリが IAdaptiveGraphicStreamHandler のみを実装している場合、ストリーミングモードは「画像ストリームのみ」に設定され、サーバーは画像ストリームのみを提供します。
SDK がさまざまな種類のメディアデータを処理する方法をカスタマイズするには、onCreateXXXHandler メソッドを 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;
}上記の例では、カスタムメディアエンジンは IVideoStreamHandler と IAudioPlaybackStreamHandler の両方を実装しています。onCreateXXXHandler メソッドは、ストリーミングセッションごとに 1 回だけ実行されます。
メインメソッドの呼び出し:
6.2.1 initialize
アプリケーションはこのメソッドを実装して、カスタムメディアエンジンをグローバルに初期化します。
システムは、各ストリーミングプロセス中にこのメソッドを 1 回呼び出します。
public ErrorCode initialize()戻り値
型 | 説明 |
ErrorCode | 成功時は |
6.2.2 release
カスタムメディアエンジンに関連付けられているすべてのグローバルリソースを解放します。
このメソッドは、各ストリーミングセッション中に 1 回呼び出されます。
public ErrorCode release()戻り値
型 | 説明 |
ErrorCode | 成功時は |
6.2.3 enableStatistics
このメソッドを使用して、パフォーマンス統計の収集を有効または無効にします。
public void enableStatistics(boolean enabled)パラメーター
パラメーター | 型 | 説明 |
enabled | boolean |
|
6.2.4 onCreateVideoStreamHandler
ビデオストリームデータを処理するためのメディアエンジン実装を提供します。
SDK は、ストリームごとにこのメソッドを 1 回実行します。
public IVideoStreamHandler onCreateVideoStreamHandler()戻り値
型 | 説明 |
IVideoStreamHandler | アプリケーションがビデオストリームデータを処理するために提供するメディアエンジン実装。 アプリケーションが実装を提供しない場合は null を返します。この場合、SDK はビデオストリームデータを破棄します。 |
6.2.5 onCreateAdaptiveGraphicStreamHandler
アダプティブグラフィックストリームデータを処理するためのメディアエンジン実装を提供します。
SDK は、ストリーミングセッションごとにこのメソッドを 1 回呼び出します。
public IAdaptiveGraphicStreamHandler onCreateAdaptiveGraphicStreamHandler()戻り値
型 | 説明 |
IAdaptiveGraphicStreamHandler | アダプティブグラフィックストリームデータを処理するためのアプリのメディアエンジン実装。 アプリが実装を提供しない場合は、 |
6.2.6 onCreateAudioPlaybackStreamHandler
音声ダウンストリームデータを処理するためのメディアエンジン実装を提供します。
SDK は、ストリーミングセッションごとにこのメソッドを 1 回呼び出します。
public IAudioPlaybackStreamHandler onCreateAudioPlaybackStreamHandler()戻り値
型 | 説明 |
IAudioPlaybackStreamHandler | アプリケーションによって提供される、音声ダウンストリームデータを処理するメディアエンジン実装。 アプリケーションが実装を提供しない場合、 |
6.2.7 onCreateCursorBitmapHandler
カーソルデータ処理のためのメディアエンジンを SDK に提供します。
SDK は、ストリーミングセッションごとにこのメソッドを 1 回呼び出します。
SDK は、返されたインターフェイス実装を仮想マウスモードでのみ使用します。
public ICursorBitmapHandler onCreateCursorBitmapHandler()戻り値
型 | 説明 |
ICursorBitmapHandler | カーソルデータ処理のためのメディアエンジン実装。 アプリがカーソルデータ処理を実装していない場合は、 |
6.3 IVideoStreamHandler
このインターフェイスは、ビデオストリームを処理するための主要なメソッドを提供します。主なワークフローは次のとおりです。
アプリが前景とバックグラウンドを切り替えると、レンダリングに使用される Surface は削除または再作成されます。 この場合、IVideoStreamHandler.setVideoSurface メソッドは繰り返し呼び出されます。 Surface が削除されると、setVideoSurface に渡される surface オブジェクトは null になります。 アプリでは、デコーダーとレンダラーの障害を処理する必要があります。
IVideoStreamHandler.setEventHandler メソッドを実装することで、アプリケーションは Alibaba Cloud Workspace SDK が提供するイベント処理インターフェイスを取得します。アプリケーションは、このインターフェイスを使用して、主にパフォーマンスデータを収集するために、独自のメディアエンジンからのビデオ処理イベントを SDK に通知します。
@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;
// ビデオフレームがレンダリングされたことを Wuying SDK に通知します。SDK は frameId を使用してクライアント側のエンドツーエンドレイテンシを計算します。
mHandler.callback(event);
}
}6.3.1 setEventHandler
SDK がカスタムメディアエンジンをロードするときに呼び出されます。ビデオストリーム処理イベントを送信するための EventHandler を提供します。
public void setEventHandler(EventHandler handler)パラメーター
パラメーター | 型 | 説明 |
handler | EventHandler | Alibaba Cloud Workspace SDK によって提供されるオブジェクトで、アプリがビデオストリーム処理イベントを SDK に送信するために使用します。 |
6.3.2 addVideoTrack
ビデオストリームが作成されるときに呼び出されます。
現在、単一のストリーミングセッションには 1 つのビデオストリームしか存在できません。
ErrorCode addVideoTrack(int trackId, VProfile profile);パラメーター
パラメーター | 型 | 説明 |
trackId | int | ビデオストリームの ID。 |
profile | VProfile | ビデオストリームに関する情報。 |
戻り値
型 | 説明 |
ErrorCode | 成功した場合は |
6.3.3 setVideoSurface
ビデオレンダリング Surface の状態が変化したときに呼び出されます。
ErrorCode setVideoSurface(int trackId, Surface surface);パラメーター
パラメーター | 型 | 説明 |
trackId | int | ビデオストリームの ID。 |
surface | android.view.Surface | レンダリング用の この値は、アプリがバックグラウンドに移行したとき、またはデバイスがロックされたときに、 |
戻り値
型 | 説明 |
ErrorCode | 成功時は |
6.3.4 playVideo
アプリケーションはこのメソッドを実装する必要があります。SDK は、ビデオストリームが再生準備完了になったときに呼び出します。
ErrorCode playVideo(int trackId);パラメーター
パラメーター | 型 | 説明 |
trackId | int | ビデオストリーム ID。 |
戻り値
型 | 説明 |
ErrorCode | 成功時は |
6.3.5 removeVideoTrack
指定されたビデオストリームを削除します。
ErrorCode removeVideoTrack(int trackId);パラメーター
パラメーター | 型 | 説明 |
trackId | int | ビデオストリームの ID。 |
戻り値
型 | 説明 |
ErrorCode | 成功時は |
6.3.6 pushVideoFrame
アプリケーションでこのメソッドを実装します。SDK は、新しいビデオフレームを受信したときにこのメソッドを呼び出します。
ErrorCode pushVideoFrame(int trackId, VFrame frame);パラメーター
パラメーター | 型 | 説明 |
trackId | int | ビデオストリームの ID。 |
frame | VFrame | 受信したビデオフレーム。 |
戻り値
型 | 説明 |
ErrorCode | 成功時は |
6.3.7 getVideoTracks
現在処理中のすべてのビデオストリームに関する情報を返します。
HashMap<Integer, VProfile> getVideoTracks();戻り値
型 | 説明 |
HashMap<Integer, VProfile> | 処理中のすべてのビデオストリームに関する情報を含む HashMap。 |
6.3.8 release
このメソッドはアプリケーションによって実装されます。すべてのビデオストリームが破棄されたときに呼び出され、アプリケーションがクリーンアップを実行できるようにします。
ErrorCode release();戻り値
型 | 説明 |
ErrorCode | 成功時は |
6.4 IAudioPlaybackStreamHandler
このインターフェイスは、音声ストリームデータを処理するためのメソッドを提供します。ワークフローは次のとおりです。
6.4.1 initAudio
音声チャネルが作成されたときに呼び出されます。
ErrorCode initAudio();戻り値
型 | 説明 |
ErrorCode | 成功時は |
6.4.2 deInitAudio
音声チャネルが破棄されたときに呼び出されます。
ErrorCode deInitAudio();戻り値
型 | 説明 |
ErrorCode | 成功時は |
6.4.3 startAudioPlayback
クラウドフォンが音声ストリームの送信を開始する前に呼び出されます。
ErrorCode startAudioPlayback();戻り値
型 | 説明 |
ErrorCode | 成功した場合は |
6.4.4 stopAudioPlayback
アプリケーションはこのメソッドを実装します。SDK は、クラウドフォンが音声ストリームの送信を停止したときにこのメソッドを呼び出します。
ErrorCode stopAudioPlayback();戻り値
型 | 説明 |
ErrorCode | 成功時は |
6.4.5 pushAudioPlaybackFrame
アプリケーションはこのメソッドを実装します。SDK は、新しいダウンストリーム音声フレームが受信されたときにこのメソッドを呼び出します。
ErrorCode pushAudioPlaybackFrame(AFrame pbData);パラメーター
パラメーター | 型 | 説明 |
pbData | AFrame | 受信したダウンストリーム音声フレーム。 |
戻り値
型 | 説明 |
ErrorCode | 成功時は |
6.4.6 updateAudioPlaybackVol
クラウドフォンのシステムボリュームが変更されたときに呼び出されます。
ErrorCode updateAudioPlaybackVol(int volume);パラメーター
パラメーター | 型 | 説明 |
volume | int | 値の範囲は 0 (無音) から |
戻り値
型 | 説明 |
ErrorCode | 成功した場合は |
6.4.7 updateAudioPlaybackMute
クラウドフォンがミュートまたはミュート解除されたときに呼び出されます。
ErrorCode updateAudioPlaybackMute(int mute);パラメーター
パラメーター | 型 | 説明 |
mute | int | ミュート状態を示します。値 |
戻り値
型 | 説明 |
ErrorCode | 成功すると |
6.4.8 release
このメソッドはアプリケーションによって実装されます。音声チャネルが破棄されたときに呼び出され、アプリケーションがクリーンアップを実行できるようにします。
ErrorCode release();戻り値
型 | 説明 |
ErrorCode | 成功した場合は |
6.5 IAdaptiveGraphicStreamHandler
このインターフェイスは、画像ストリームデータを処理するためのメソッドを提供します。ワークフローは次のとおりです。
アプリケーションは、画像フレームを ARGB8888 ビットマップとして受信します。
各ストリーミングセッションは、最大 1 つの画像ストリームをサポートします。
6.5.1 setAdaptiveGraphicSurface
画像レンダリングに使用される Surface の状態が変更されたときに呼び出されます。
ErrorCode setAdaptiveGraphicSurface(Surface surface);パラメーター
パラメーター | 型 | 説明 |
surface | android.view.Surface | 画像レンダリング用の このオブジェクトは、アプリがバックグラウンドに入るか、画面がロックされたときに null になることがあります。 |
戻り値
型 | 説明 |
ErrorCode | 成功時は |
6.5.2 invalidateAdaptiveGraphicSurface
新しいアダプティブグラフィックフレームデータが利用可能になったときに呼び出されます。
ErrorCode invalidateAdaptiveGraphicSurface(Region region, byte[] buffer, BitmapFormat format);パラメーター
パラメーター | 型 | 説明 |
region | Region | アダプティブグラフィックフレームの描画エリア。 |
buffer | byte[] | アダプティブグラフィックフレームデータ。 |
format | BitmapFormat | アダプティブグラフィックフレームのフォーマット。デフォルトは ARGB8888 です。 |
戻り値
型 | 説明 |
ErrorCode | 成功時は |
6.5.3 release
画像ストリームが破棄されたときにクリーンアップを実行するために呼び出されます。
ErrorCode release();戻り値
型 | 説明 |
ErrorCode | 成功した場合は |
6.6 ICursorBitmapHandler
このインターフェイスは、カーソルデータを処理するための主要なメソッドを定義します。仮想マウスモードでカーソル画像を描画するには、アプリケーションがこのインターフェイスの実装を SDK に提供する必要があります。主なワークフローは次のとおりです。
6.6.1 setCursorBitmap
クラウドフォンのカーソルグラフィックが変更されたときに呼び出されます。
ErrorCode setCursorBitmap(CursorBitmap bitmap);パラメーター
パラメーター | 型 | 説明 |
bitmap | CursorBitmap | クラウドフォンからのカーソルグラフィックデータ。 |
戻り値
型 | 説明 |
ErrorCode | 成功時は |
6.6.2 unsetCursorBitmap
クラウドフォンのカーソルが非表示になったときに呼び出されます。
ErrorCode unsetCursorBitmap();戻り値
型 | 説明 |
ErrorCode | 成功した場合は |
6.6.3 setCursorPosition
クラウドフォン内のカーソル位置を設定します。
ErrorCode setCursorPosition(float x, float y);パラメーター
パラメーター | 型 | 説明 |
x | float | カーソルの x 座標。 |
y | float | カーソルの y 座標。 |
戻り値
型 | 説明 |
ErrorCode | 成功時は |
6.6.4 release
接続が切断され、カーソルが消えた後にクリーンアップを実行するために呼び出されます。
ErrorCode release();戻り値
型 | 説明 |
ErrorCode | 成功時には |
エラーコード
エラーコード | エラーメッセージ ( | モジュール | 原因 |
エラーコード 2~26 は、主にネットワークの問題に関連しています。 | |||
2 | %s への接続に失敗しました。 | ASP SDK | 無効な MAGIC 値。 |
3 | %s への接続に失敗しました。 | ASP SDK | 無効なデータ。 |
4 | クライアントとサーバーのバージョンが一致しません。 | ASP SDK | バージョンの不一致。 |
5 | TLS 接続が必要です。 | ASP SDK | サーバーは TLS 接続を要求していますが、クライアントは開始しませんでした。 |
6 | 予期しない TLS 接続。 | ASP SDK | 接続に TLS は必要ありませんが、使用されました。 |
7 | %s への接続権限が拒否されました。 | ASP SDK | 権限が不十分です。 |
8 | 移行中のクライアント ID が無効です。 | ASP SDK | 移行中のクライアント ID が無効です。 |
9 | %s への接続に失敗しました。 | ASP SDK | チャネルが存在しません。 |
20 | ASP サーバーへの接続に失敗しました。 | ASP SDK | チャネル接続エラー。 |
21 | TLS 認証エラーが発生しました。 | ASP SDK | TLS 認証エラー。 |
22 | %s への接続に失敗しました。 | ASP SDK | チャネルリンクエラー。 |
23 | %s への接続に失敗しました。 | ASP SDK | 接続認証エラー。 |
24 | %s への接続に失敗しました。 | ASP SDK | 接続 I/O エラー。 |
25 | %s への接続に失敗しました。 | ASP SDK | チケットの検証に失敗しました。このエラーは、終了したセッションのチケットを再利用した場合にも発生します。 |
26 | xquic ハンドシェイクに失敗しました。 | ASP SDK | xquic ハンドシェイクに失敗しました。 |
1206 | チケットは既に使用中です。 | ASP SDK | チケットは再利用できますが、一度に 1 つの接続でのみ使用できます。このエラーは、クラウドフォンが既に使用中に新しい接続を確立しようとすると発生します。 |
1207 | インスタンスの再起動によりチケットが無効になりました。 | ASP SDK | インスタンスが再起動され、チケットが無効になりました。 |
協調モードの SDK エラーコード | |||
1000 | トークンが空です。 | ASP SDK | これらのエラーは、クライアントとサーバー間の二次検証に失敗した場合にのみ協調モードで発生します。 |
1001 | ユーザーが空です。 | ASP SDK | |
1200 | トークンが無効です。 | ASP SDK | |
1201 | VM が無効です。 | ASP SDK | |
1202 | 管理者内部エラーが発生しました。 | ASP SDK | |
1203 | ユーザーが無効です。 | ASP SDK | |
1204 | トークンの有効期限が切れています。 | ASP SDK | |
1500 | サーバー内部エラーが発生しました。 | ASP SDK | |
1501 | サーバーネットワークエラーが発生しました。 | ASP SDK | |
接続中断およびその他のエラー | |||
2000 | %s からのデータ取得がタイムアウトしたため、サーバーから切断されました。 | ASP SDK | データ取得タイムアウト。 |
2001 | %s はサーバーから切断されました。プロセスが終了した可能性があります。 | ASP SDK | これは通常、クライアント側のプロセスが終了したときに発生します。たとえば、ユーザーがホームボタンを押して Android アプリを閉じた場合などです。 |
2002 | 別のユーザーが別の端末から現在の %s に接続しました。 | ASP SDK | セッションは、占有モードの別のユーザーによって引き継がれました。 |
2003 | %s はシャットダウンまたは再起動中です。これは通常、管理者によって開始されたアクションです。 | ASP SDK | クラウドフォンは、通常は管理者によってシャットダウンまたは再起動されました。 |
2004 | 現在のユーザー接続は終了しました。 | ASP SDK | クライアントが切断を開始したか、サーバーがキックまたは切断アクションをトリガーしました。 |
2005 | セッションが切断されました:使用時間制限に達しました。 | ASP SDK | セッションは、管理者によって設定された使用時間制限に達したため、終了しました。 |
2006 | このクラウドフォンを使用する権限は管理者によって取り消されました。ログアウトして切断されます。 | ASP SDK | ユーザーの権限は管理者によって取り消されました。 |
2010 | %s への接続に失敗しました。 | ASP SDK | Vdagent への接続に失敗しました。 |
2011 | 接続パラメーターの受け渡し中にエラーが発生しました。 | ASP SDK | サーバーへの接続時に無効なパラメーターが渡されました。 |
2027 | ストリームプルモードが切り替わりました。 | ASP SDK | ストリームプルモードが占有モードから協調モードに、または協調モードから占有モードに切り替わりました。 |
2100 | %s からローカルデバイスへのコピーはクリップボードの権限で拒否されました。 | ASP SDK | リモートインスタンスからローカルクライアントへのクリップボードアクセスはポリシーによって拒否されています。 |
2101 | ローカルデバイスから %s へのコピーはクリップボードの権限で拒否されました。 | ASP SDK | ローカルクライアントからリモートインスタンスへのクリップボードアクセスはポリシーによって拒否されています。 |
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 | チケット内のトークンが無効なため、再接続に失敗しました。 | ASP SDK | |
2300 | アプリ側からの無効なパラメーターにより接続に失敗しました。 | アプリ側 | |
2501 | クライアントはストリームゲートウェイへの接続に失敗しました。ネットワークが到達不能です。 | ストリームゲートウェイ | |
2502 | クライアントはストリームゲートウェイへの接続に失敗しました。ストリームゲートウェイの IP アドレスへの TCP 接続が 3 回試行後 (合計 15 秒) にタイムアウトしました。 | ストリームゲートウェイ | |
2503 | 不明なネットワークエラーにより、クライアントはストリームゲートウェイへの接続に失敗しました。 | ストリームゲートウェイ | |
2504 | クライアントはストリームゲートウェイへの接続に失敗しました。接続はソフトウェアによって中止されました。 | ストリームゲートウェイ | |
2505 | クライアントはストリームゲートウェイへの接続に失敗しました。接続が拒否されました。 | ストリームゲートウェイ | |
2506 | チケットが無効です。ゲートウェイはトークンの解析に失敗しました。 | ストリームゲートウェイ | |
2507 | チケットは有効期限が切れているため無効です。 | ストリームゲートウェイ | |
2508 | UUID の不一致によりチケットが無効です。 | ストリームゲートウェイ | |
2509 | ストリームゲートウェイは ASP サーバーのプローブに失敗しました。 | ストリームゲートウェイ | |
2510 | サーバーへのプローブが拒否されました。解決策:サーバーがポート 5912 でリッスンしていることを確認してください。 | ストリームゲートウェイ | |
2511 | タイムアウトまたは拒否以外のエラーにより、サーバーへのプローブに失敗しました。 | ストリームゲートウェイ | |
2512 | ストリームゲートウェイのトークン検証に失敗しました。 管理トークンの VPC ID がストリームゲートウェイの VPC ID と一致しません。 | ストリームゲートウェイ | |
2513 | クライアントとストリームゲートウェイ間の「SayHello」ハンドシェイク中に TCP 接続がリセットされました。 | ストリームゲートウェイ | |
2520 | クライアント接続に失敗しました。自己診断チェックでネットワークアノマリーが示されています。 | ASP SDK | |
2521 | ストリームゲートウェイとの TLS ハンドシェイクフェーズ中に 3 回の再接続試行に失敗した後、クライアントは切断されました。 | ASP SDK | |
2522 | VPN 環境で接続エラーが発生しました。 | ASP SDK | |
2523 | クライアントは GM/T プロトコルスイートを使用して接続しようとしています。サーバー構成を確認するか、互換性のある接続方法を選択してください。 | ASP SDK | |
2701 | クライアント側のネットワークの問題が発生しました。 | ASP SDK | |
2702 | クライアントとストリームゲートウェイ間の SSL ハンドシェイクがタイムアウトしました。 | ASP SDK | |
2703 | クライアントとストリームゲートウェイ間の「SayHello」ハンドシェイクがタイムアウトしました。 | ASP SDK | |
2704 | 接続確立リクエストに対する ASP サーバーの応答がタイムアウトしました。 考えられる原因:ASP サーバーが応答しない、ネットワークアノマリー、インスタンスのフリーズ、または高いメモリ/CPU 使用量。 | ASP SDK | |
2705 | ASP クライアントが最初のフレームを待機中にタイムアウトしました。 考えられる原因:ASP サーバーが応答しない、画面キャプチャまたは GPU ドライバーの問題でフレームが生成されない、ネットワークアノマリー、または高いメモリ/CPU 使用量。 | ASP SDK | |
2706 | クライアントのローカル CPU またはメモリ使用量が高いと、接続に失敗する可能性があります。 | ASP SDK | |
2707 | ASP サーバーがゲスト OS から最初の画面キャプチャフレームを取得中にタイムアウトしました。 | ASP SDK | |
2708 | SDK スレッドがスタックしているため、接続に失敗しました。 | ASP SDK | |
クライアント側の論理エラー | |||
5100 | %s から ASP サーバーへの接続がタイムアウトしました。 | アプリ側 | クライアント側が指定された時間内に「接続済み」イベントを受信しませんでした。 |
5102 | %s からのデータ取得がタイムアウトしました。 | アプリ側 | クライアント側は「接続済み」イベントを受信しましたが、指定された時間内に「表示」イベントを受信しませんでした。 |
5004 | 無効な起動パラメーター。 | アプリ側 | クライアント側に無効な起動パラメーターが渡されました。これは通常、開発中に発生します。 |
5200 | クライアントの再接続がタイムアウトしました。 | アプリ側 | |
8. よくある質問
クラウドフォンの再起動
クラウドフォンを再起動するには、RebootAndroidInstancesInGroup API を呼び出します。このアクションにより、クライアントは一時的にクラウドフォンから切断されます。再起動が完了したら、クライアントから再接続する必要があります。
パブリック Maven
現在、パブリック Maven ホスティングはサポートされていません。SDK を統合するには、AAR ライブラリを独自の Maven リポジトリにアップロードできます。
一般的な ADB コマンド
機能 | コマンド |
戻るボタン | input keyevent KEYCODE_BACK |
ホームボタン | 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 |