すべてのプロダクト
Search
ドキュメントセンター

Cloud Phone:Android SDK

最終更新日:Jun 25, 2026

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.aarapp/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 インスタンス間でシームレスに切り替えることができます。このモードを実装するには、以下の手順に従います。

  1. セクション 2.1 の説明に従って、StreamView インスタンスを定義および初期化します。

  2. IAspEngine を使用して接続を確立します。パラメーターは、セクション 4.1Config 定義と一致している必要があります。

    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);
  3. IAspEngineStreamView にバインドします。この呼び出しは、指定された View 上にストリームをレンダリングします。

    mStreamView.bindASPEngine(engine);
  4. 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)

パフォーマンスデータを提供するために定期的に呼び出されます。最新のメトリックを含む StatisticsInfo オブジェクトを返します。

システム権限リクエストコールバックプロキシIRequestSystemPermissionListener

インターフェイスの説明:

API

説明

bool OnRequestSystemPermission(SystemPermission permission)

SDK がシステム権限をリクエストする必要があるときに呼び出されます。permission パラメーターは、必要な権限の種類を示します。

コールバックの登録と登録解除のサンプルコード:

// 接続コールバックをリッスンします。
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 の可用性チェックを強制するかどうかを指定します。このチェックはデフォルトで有効です。

この値が true に設定されており、接続確立時に VDAgent が利用できない場合、エラーが報告されて現在の接続が終了します。

内部デバッグ目的の場合を除き、このパラメーターを false に設定することは推奨されません。

enableRTC(boolean enabled)

ストリーミングデータの送信に RTC を使用するかどうかを指定します。デフォルトでは RTC が使用されます。

enableDesktopMode(boolean enabled)

デスクトップモードを有効または無効にします。有効にすると、すべてのタッチ入力がマウスイベントに変換され、サーバーに送信されます。クラウドフォンでは、これを false に設定することをお勧めします。

scaleStreamVideo(ScaleType scaleType)

ビデオストリームのスケーリング動作を指定します。ScaleType の有効な値については、enum 型 5.1 ScaleType をご参照ください。

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

ビデオストリームの解像度を設定します。 fps (フレームレート) パラメーターは現在サポートされていません。

boolean sendKeyEvent(KeyEvent event)

および

sendKeyboardEvent(KeyEvent event, IRemoteResult result)

キーボードイベントをリモートセッションに送信します。

boolean simulateMouseClick(boolean leftButton)

リモートセッションでマウスクリックをシミュレートします。左クリックの場合はパラメーターを true に、右クリックの場合は false に設定します。

boolean enableMouseMode(boolean enabled)

マウスモードを有効または無効にします。

boolean sendMouseEvent(MotionEvent motionEvent)

および

sendMouseEvent(MotionEvent motionEvent, IRemoteResult result)

マウスイベントをリモートセッションに送信します。

reconnect(String connectionToken)

予期せぬ切断後にセッションに再接続します。

このメソッドは通常、reason=2200 による切断を処理するために使用されます。再接続するには、アプリケーションは OpenAPI を呼び出してクラウドフォン用の新しい接続トークンを取得し、それをこのメソッドに渡す必要があります。

boolean setMediaStreamPlayer(MediaStreamPlayer player)

SDK のデフォルトのメディアエンジンを、アプリケーションが提供するカスタムエンジンに置き換えます。このメソッドは、ストリーミングを開始する前、またはストリームが切断された後に呼び出す必要があります。

void setAlignStreamResolutionWithSurfaceSize(boolean aligned)

ストリーミングの開始時に、ストリームの解像度をクライアント側の SurfaceView のサイズに自動的に合わせる機能を有効または無効にします。この機能はデフォルトで有効になっています。クラウドフォンでは、この機能を無効にすることを推奨します。

void mute(boolean muted)

ミュートモードを有効または無効にします。

void enableStatistics(boolean enabled)

パフォーマンスデータの収集を有効または無効にします。

mStreamView.getASPEngineDelegate().requestIFrame()

キーフレームをリクエストします。

mStreamView.getASPEngineDelegate() 配下:

registerFileTransferListener(IFileTransferListener var1)

および

unregisterFileTransferListener(IFileTransferListener var1)

および

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

ファイルのアップロードとダウンロードを管理します。実装の詳細については、デモアプリケーションをご参照ください。

mStreamView.getASPEngineDelegate() では:

addDataChannel(DataChannel var1)

および

removeDataChannel(DataChannel var1)

リモートセッションとデータを交換するためのカスタムデータチャネルを追加または削除します。実装の詳細については、デモアプリケーションをご参照ください。

mStreamView.getASPEngineDelegate()では:

addLyncChannel(LyncChannel var1)

および

removeLyncChannel(LyncChannel var1)

ADB コマンドを送信するためのチャンネルを追加または削除します。実装の詳細については、デモアプリケーションの AspAdbUtil をご参照ください。

void setToQualityFirst()

品質優先モードを設定します。このモードは最大フレームレート 30 fps をサポートし、画質は「高」に設定されます。クラウドフォンではサポートされていません。

void setToFpsFirst()

スムーズさ優先モードを設定します。このモードは最大フレームレート 60 fps をサポートし、画質は「良」に設定されます。クラウドフォンではサポートされていません。

void setToCustomPicture(int fps, int quality);

フレームレートと画質を定義できるカスタムモードを設定します。

fps パラメーターは、0 から 60 までの値を受け入れます。値が高いほど、映像がより滑らかになります。

quality パラメーターは 0~4 の値に対応しており、0 は無損失、1 は高、2 は標準、3 は低、4 は自動です。 クラウドフォンではサポートされていません。

mStreamView.getASPEngineDelegate() 配下:

registerIMEListener, unregisterIMEListener, setImeType, enableRelativeMouse, など。

クラウドフォンではサポートされていません。

4. パラメーター

4.1 Config

これらのパラメーターを使用して接続を確立します。

パラメーター

説明

StreamView.CONFIG_DESKTOP_ID

string

インスタンス ID。この値は、DescribeUserResources API によって返される ResourceId に対応します。

StreamView.CONFIG_CONNECTION_TICKET

string

接続認証チケット。 GetConnectionTicket API を呼び出して取得します。

StreamView.CONFIG_PREFER_RTC_TRANSPORT

boolean

true に設定すると、RTC チャンネルが有効になります。この設定はクラウドフォンに推奨されます。

StreamView.CONFIG_ENABLE_VDAGENT_CHECK

boolean

true に設定すると、接続時に VDAgent の可用性チェックが有効になります。この設定は、クラウドフォンに推奨されます。

StreamView.CONFIG_ENABLE_STATISTICS

boolean

true に設定するとパフォーマンス統計が有効になり、ビデオストリーム上にオーバーレイとして表示されます。この設定はクラウドフォンに推奨されます。

OSType

string

オペレーティングシステムのタイプ。クラウドフォンの場合は、android に設定する必要があります。

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 は、アプリケーションがグローバルな初期化およびクリーンアップメソッドを実装し、さまざまなメディアデータの型を扱うためのカスタム実装を提供する必要がある抽象クラスです:

image.png

ここで:

  • 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

成功時は ErrorCode.OK、失敗時はエラーコードが返されます。

6.2.2 release

カスタムメディアエンジンに関連付けられているすべてのグローバルリソースを解放します。

このメソッドは、各ストリーミングセッション中に 1 回呼び出されます。

public ErrorCode release()

戻り値

説明

ErrorCode

成功時は ErrorCode.OK、失敗時はエラーコードです。

6.2.3 enableStatistics

このメソッドを使用して、パフォーマンス統計の収集を有効または無効にします。

public void enableStatistics(boolean enabled)

パラメーター

パラメーター

説明

enabled

boolean

true

false

6.2.4 onCreateVideoStreamHandler

ビデオストリームデータを処理するためのメディアエンジン実装を提供します。

SDK は、ストリームごとにこのメソッドを 1 回実行します。

public IVideoStreamHandler onCreateVideoStreamHandler()

戻り値

説明

IVideoStreamHandler

アプリケーションがビデオストリームデータを処理するために提供するメディアエンジン実装。

アプリケーションが実装を提供しない場合は null を返します。この場合、SDK はビデオストリームデータを破棄します。

6.2.5 onCreateAdaptiveGraphicStreamHandler

アダプティブグラフィックストリームデータを処理するためのメディアエンジン実装を提供します。

SDK は、ストリーミングセッションごとにこのメソッドを 1 回呼び出します。

public IAdaptiveGraphicStreamHandler onCreateAdaptiveGraphicStreamHandler()

戻り値

説明

IAdaptiveGraphicStreamHandler

アダプティブグラフィックストリームデータを処理するためのアプリのメディアエンジン実装。

アプリが実装を提供しない場合は、null を返します。この場合、SDK はグラフィックストリームデータを処理しません。

6.2.6 onCreateAudioPlaybackStreamHandler

音声ダウンストリームデータを処理するためのメディアエンジン実装を提供します。

SDK は、ストリーミングセッションごとにこのメソッドを 1 回呼び出します。

public IAudioPlaybackStreamHandler onCreateAudioPlaybackStreamHandler()

戻り値

説明

IAudioPlaybackStreamHandler

アプリケーションによって提供される、音声ダウンストリームデータを処理するメディアエンジン実装。

アプリケーションが実装を提供しない場合、null を返します。この場合、SDK はオーディオダウンストリームデータを処理しません。

6.2.7 onCreateCursorBitmapHandler

カーソルデータ処理のためのメディアエンジンを SDK に提供します。

SDK は、ストリーミングセッションごとにこのメソッドを 1 回呼び出します。

SDK は、返されたインターフェイス実装を仮想マウスモードでのみ使用します。

public ICursorBitmapHandler onCreateCursorBitmapHandler()

戻り値

説明

ICursorBitmapHandler

カーソルデータ処理のためのメディアエンジン実装。

アプリがカーソルデータ処理を実装していない場合は、null を返します。この場合、SDK は仮想マウスモードでもカーソルデータを処理しません。

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

成功した場合は ErrorCode.OK、失敗した場合はエラーコードです。

6.3.3 setVideoSurface

ビデオレンダリング Surface の状態が変化したときに呼び出されます。

ErrorCode setVideoSurface(int trackId, Surface surface);

パラメーター

パラメーター

説明

trackId

int

ビデオストリームの ID。

surface

android.view.Surface

レンダリング用の Surface オブジェクト。

この値は、アプリがバックグラウンドに移行したとき、またはデバイスがロックされたときに、null になることがあります。

戻り値

説明

ErrorCode

成功時は ErrorCode.OK、失敗時はエラーコード。

6.3.4 playVideo

アプリケーションはこのメソッドを実装する必要があります。SDK は、ビデオストリームが再生準備完了になったときに呼び出します。

ErrorCode playVideo(int trackId);

パラメーター

パラメーター

説明

trackId

int

ビデオストリーム ID。

戻り値

説明

ErrorCode

成功時は ErrorCode.OK、失敗時はエラーコードです。

6.3.5 removeVideoTrack

指定されたビデオストリームを削除します。

ErrorCode removeVideoTrack(int trackId);

パラメーター

パラメーター

説明

trackId

int

ビデオストリームの ID。

戻り値

説明

ErrorCode

成功時は ErrorCode.OK、失敗時はエラーコードとなります。

6.3.6 pushVideoFrame

アプリケーションでこのメソッドを実装します。SDK は、新しいビデオフレームを受信したときにこのメソッドを呼び出します。

ErrorCode pushVideoFrame(int trackId, VFrame frame);

パラメーター

パラメーター

説明

trackId

int

ビデオストリームの ID。

frame

VFrame

受信したビデオフレーム。

戻り値

説明

ErrorCode

成功時は ErrorCode.OK、失敗時はエラーコード。

6.3.7 getVideoTracks

現在処理中のすべてのビデオストリームに関する情報を返します。

HashMap<Integer, VProfile> getVideoTracks();

戻り値

説明

HashMap<Integer, VProfile>

処理中のすべてのビデオストリームに関する情報を含む HashMap。

6.3.8 release

このメソッドはアプリケーションによって実装されます。すべてのビデオストリームが破棄されたときに呼び出され、アプリケーションがクリーンアップを実行できるようにします。

ErrorCode release();

戻り値

説明

ErrorCode

成功時は ErrorCode.OK、失敗時はエラーコード。

6.4 IAudioPlaybackStreamHandler

このインターフェイスは、音声ストリームデータを処理するためのメソッドを提供します。ワークフローは次のとおりです。

6.4.1 initAudio

音声チャネルが作成されたときに呼び出されます。

ErrorCode initAudio();

戻り値

説明

ErrorCode

成功時は ErrorCode.OK 、失敗時はエラーコード。

6.4.2 deInitAudio

音声チャネルが破棄されたときに呼び出されます。

ErrorCode deInitAudio();

戻り値

説明

ErrorCode

成功時は ErrorCode.OK、失敗時はエラーコード。

6.4.3 startAudioPlayback

クラウドフォンが音声ストリームの送信を開始する前に呼び出されます。

ErrorCode startAudioPlayback();

戻り値

説明

ErrorCode

成功した場合はErrorCode.OK、失敗した場合はエラーコード。

6.4.4 stopAudioPlayback

アプリケーションはこのメソッドを実装します。SDK は、クラウドフォンが音声ストリームの送信を停止したときにこのメソッドを呼び出します。

ErrorCode stopAudioPlayback();

戻り値

説明

ErrorCode

成功時は ErrorCode.OK、失敗時はエラーコードです。

6.4.5 pushAudioPlaybackFrame

アプリケーションはこのメソッドを実装します。SDK は、新しいダウンストリーム音声フレームが受信されたときにこのメソッドを呼び出します。

ErrorCode pushAudioPlaybackFrame(AFrame pbData);

パラメーター

パラメーター

説明

pbData

AFrame

受信したダウンストリーム音声フレーム。

戻り値

説明

ErrorCode

成功時は ErrorCode.OK、失敗時はエラーコード。

6.4.6 updateAudioPlaybackVol

クラウドフォンのシステムボリュームが変更されたときに呼び出されます。

ErrorCode updateAudioPlaybackVol(int volume);

パラメーター

パラメーター

説明

volume

int

値の範囲は 0 (無音) から USHRT_MAX です。

戻り値

説明

ErrorCode

成功した場合は ErrorCode.OK、失敗した場合はエラーコードです。

6.4.7 updateAudioPlaybackMute

クラウドフォンがミュートまたはミュート解除されたときに呼び出されます。

ErrorCode updateAudioPlaybackMute(int mute);

パラメーター

パラメーター

説明

mute

int

ミュート状態を示します。値 1 はクラウドフォンがミュートされていることを、0 はミュートが解除されていることを意味します。

戻り値

説明

ErrorCode

成功すると ErrorCode.OK、失敗するとエラーコードになります。

6.4.8 release

このメソッドはアプリケーションによって実装されます。音声チャネルが破棄されたときに呼び出され、アプリケーションがクリーンアップを実行できるようにします。

ErrorCode release();

戻り値

説明

ErrorCode

成功した場合は ErrorCode.OK、失敗した場合はエラーコード。

6.5 IAdaptiveGraphicStreamHandler

このインターフェイスは、画像ストリームデータを処理するためのメソッドを提供します。ワークフローは次のとおりです。

アプリケーションは、画像フレームを ARGB8888 ビットマップとして受信します。

各ストリーミングセッションは、最大 1 つの画像ストリームをサポートします。

6.5.1 setAdaptiveGraphicSurface

画像レンダリングに使用される Surface の状態が変更されたときに呼び出されます。

ErrorCode setAdaptiveGraphicSurface(Surface surface);

パラメーター

パラメーター

説明

surface

android.view.Surface

画像レンダリング用の Surface です。

このオブジェクトは、アプリがバックグラウンドに入るか、画面がロックされたときに null になることがあります。

戻り値

説明

ErrorCode

成功時は ErrorCode.OK、失敗時はエラーコード

6.5.2 invalidateAdaptiveGraphicSurface

新しいアダプティブグラフィックフレームデータが利用可能になったときに呼び出されます。

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

パラメーター

パラメーター

説明

region

Region

アダプティブグラフィックフレームの描画エリア。

buffer

byte[]

アダプティブグラフィックフレームデータ。

format

BitmapFormat

アダプティブグラフィックフレームのフォーマット。デフォルトは ARGB8888 です。

戻り値

説明

ErrorCode

成功時は ErrorCode.OK、失敗時はエラーコード。

6.5.3 release

画像ストリームが破棄されたときにクリーンアップを実行するために呼び出されます。

ErrorCode release();

戻り値

説明

ErrorCode

成功した場合は ErrorCode.OK、失敗した場合はエラーコードを示します。

6.6 ICursorBitmapHandler

このインターフェイスは、カーソルデータを処理するための主要なメソッドを定義します。仮想マウスモードでカーソル画像を描画するには、アプリケーションがこのインターフェイスの実装を SDK に提供する必要があります。主なワークフローは次のとおりです。

6.6.1 setCursorBitmap

クラウドフォンのカーソルグラフィックが変更されたときに呼び出されます。

ErrorCode setCursorBitmap(CursorBitmap bitmap);

パラメーター

パラメーター

説明

bitmap

CursorBitmap

クラウドフォンからのカーソルグラフィックデータ。

戻り値

説明

ErrorCode

成功時は ErrorCode.OK、失敗時はエラーコード。

6.6.2 unsetCursorBitmap

クラウドフォンのカーソルが非表示になったときに呼び出されます。

ErrorCode unsetCursorBitmap();

戻り値

説明

ErrorCode

成功した場合は ErrorCode.OK、失敗した場合はエラーコードです。

6.6.3 setCursorPosition

クラウドフォン内のカーソル位置を設定します。

ErrorCode setCursorPosition(float x, float y);

パラメーター

パラメーター

説明

x

float

カーソルの x 座標。

y

float

カーソルの y 座標。

戻り値

説明

ErrorCode

成功時は ErrorCode.OK、失敗時はエラーコード。

6.6.4 release

接続が切断され、カーソルが消えた後にクリーンアップを実行するために呼び出されます。

ErrorCode release();

戻り値

説明

ErrorCode

成功時には ErrorCode.OK、失敗時にはエラーコードを返します。

エラーコード

エラーコード

エラーメッセージ (%s はクラウドフォンまたはクラウドアプリを表します)

モジュール

原因

エラーコード 2~26 は、主にネットワークの問題に関連しています。

2

%s への接続に失敗しました。

ASP SDK

無効な MAGIC 値。

3

%s への接続に失敗しました。

ASP SDK

無効なデータ。

4

クライアントとサーバーのバージョンが一致しません。

ASP SDK

バージョンの不一致。

5

TLS 接続が必要です。

ASP SDK

サーバーは TLS 接続を要求していますが、クライアントは開始しませんでした。

6

予期しない TLS 接続。

ASP SDK

接続に TLS は必要ありませんが、使用されました。

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