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

Cloud Phone:Android SDK

最終更新日:Dec 05, 2025

Alibaba Cloud Workspace SDK for Android は、Android クライアントからクラウドコンピュータ、クラウドアプリ、クラウドフォンに接続するためのオープンインターフェイスを提供します。 SDK を統合することで、ビジネスニーズに合わせてカスタマイズされた Android クライアントを効率的にカスタマイズおよびデプロイできます。

1. クイックスタート

1.1 SDK とデモを入手する

方法

説明

ドキュメント、SDK、クライアントプログラムを含むすべてのプラットフォームリソースは、お客様または組織の内部使用に限定されます。 Alibaba Cloud からの事前の書面による同意なしに、第三者または他の組織と不正に共有することは禁止されています。

環境要件

Android バージョン:Android 5.1 以降

AAR パッケージを使用して SDK を統合する

  • ダウンロードした aspengine-third-release.aar、aspengine-player-release.aar、および wytrace-release.aarapp/libs ディレクトリにコピーします。

  • アプリケーションモジュールの 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 ファイルに必要な権限を宣言します。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE"/>

1.2 統合プロセス

1.3 ベストプラクティス

実装の詳細については、「クラウドフォン統合のベストプラクraクティス」をご参照ください。次の図は、クラウドフォン統合プロセスの概要です。

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 Multi-StreamView モード

このモードは、単一ストリームの表示を複数の View インスタンス間でシームレスに切り替えることをサポートします。この機能を実装するには、次の手順に従います。

  1. 2.1 で説明されているように、StreamView オブジェクトを定義して初期化します。

  2. 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);
  3. IAspEngineStreamView インスタンスにバインドします。この呼び出しにより、指定された View でストリームのレンダリングが開始されます。

    mStreamView.bindASPEngine(engine);
  4. 表示を切り替えるには、IAspEngine を別の StreamView インスタンスにバインドします。これにより、新しい View がストリームのレンダリングを引き継ぐことができます。

    mStreamView.resumeASPEngine();

完全な実装については、提供されているデモアプリケーションをご参照ください。

2.6 コールバック命令

接続のコールバックプロキシ: IASPEngineListener

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

インターフェイス

説明

onConnectionSuccess(int connectionId)

クラウドフォンへの接続が成功したときに呼び出されるコールバック。接続識別子が返されます。

onConnectionFailure(int errorCode, String errorMsg)

クラウドフォンへの接続が失敗したときに呼び出されるコールバック。エラーコードとエラーメッセージが返されます。

onEngineError(int errorCode, String errorMsg)

SDK 内部例外が発生したときに呼び出されるコールバック。エラーコードとエラーメッセージが返されます。

onDisconnected(int reason)

クラウドフォン接続が終了したときに呼び出されるコールバック。切断理由が返されます。

onReconnect(int errorCode)

クラウドフォンが自動的に再接続したときに呼び出されるコールバック。再接続をトリガーしたエラーコードが返されます。

onFirstFrameRendered(long timeCostMS)

クラウドフォンからの最初のフレームがレンダリングされたときに呼び出されるコールバック。消費されたレンダリング時間が返されます。

onPolicyUpdate(String policy)

クラウドフォンポリシーが更新されたときに呼び出されるコールバック。ポリシー構成が返されます。

onSessionSuccess()

クラウドフォンとのセッションが正常に確立されたときに呼び出されるコールバック

パフォーマンスデータのコールバックプロキシ: IStatisticsListener

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

インターフェイス

説明

onStatisticsInfoUpdate(StatisticsInfo statisticsInfo)

電話のパフォーマンスデータのために呼び出されるコールバック。パフォーマンスデータオブジェクトが返されます。

システム権限をリクエストするためのコールバックプロキシ:IRequestSystemPermissionListener

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

インターフェイス

説明

bool OnRequestSystemPermission(SystemPermission permission)

システム権限リクエストを開始したときに呼び出されるコールバック。リクエストされた権限タイプが返されます。

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

// 接続コールバックをリッスンします。
mStreamView.getASPEngineDelegate().registerASPEngineListener(IASPEngineListener var1);
mStreamView.getASPEngineDelegate().unregisterASPEngineListener(IASPEngineListener var1);
// パフォーマンスデータコールバックをリッスンします。
mStreamView.getASPEngineDelegate().registerStatisticsListener(IStatisticsListener var1);
mStreamView.getASPEngineDelegate().unregisterStatisticsListener(IStatisticsListener var1);
// システム権限リクエストをリッスンします。
mStreamView.registerSystemPermissionListener(IRequestSystemPermissionListener listener);
mStreamView.unregisterSystemPermissionListener(IRequestSystemPermissionListener listener);

3. ビジネスインターフェイス

インターフェイス

説明

enableVDAgentCheck(boolean enabled)

接続確立時に VDAgent の可用性チェックを強制するかどうかを指定します。デフォルト値は true です。

値を true に設定すると、接続中に VDAgent が利用できない場合、エラーが報告され、接続が終了します。

内部デバッグ目的でない限り、値を false に設定しないでください。

enableRTC(boolean enabled)

ストリーミングデータ転送にリアルタイムコミュニケーション (RTC) を使用するかどうかを指定します。デフォルトでは、RTC が使用されます。

enableDesktopMode(boolean enabled)

デスクトップモードで実行するかどうかを指定します。デスクトップモードが有効な場合、すべてのタッチイベントはマウスイベントに変換されてサーバーに送信されます。クラウドフォンでは、この値を false に設定することを推奨します。

scaleStreamVideo(ScaleType scaleType)

ストリーミングビデオコンテンツのスケーリング動作を指定します。「5.1 列挙型」で有効な値を参照してください。

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

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

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)

異常切断後に再接続します。

ほとんどの場合、このメソッドを呼び出して「切断理由=2200」エラーを処理できます。アプリケーションは API 操作を呼び出して接続トークンを取得し、クラウドフォンに再接続する必要があります。

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);

カスタムフレームレートと画質を許可するカスタムモードを構成します。

この機能は、現在クラウドフォンではサポートされていません。

quality の有効な値: 0~4。0: 無損失。1: 高。2: 中。3: 標準。4: 自動。この機能は、現在クラウドフォンではサポートされていません。

mStreamView.getASPEngineDelegate() の下:

registerIMEListener、unregisterIMEListener、setImeType、enableRelativeMouse など

この機能は現在、クラウドフォンではサポートされていません。

4. パラメーター

4.1 Config

次の表に、接続を確立するために必要なパラメーターを示します。

パラメーター

説明

StreamView.CONFIG_DESKTOP_ID

文字列

インスタンス ID。DescribeUserResources によって返される ResourceId の値です。

StreamView.CONFIG_CONNECTION_TICKET

文字列

接続認証チケット。GetConnectionTicket を使用して取得します。

StreamView.CONFIG_PREFER_RTC_TRANSPORT

ブール値

RTC チャンネルを有効にします。クラウドフォンでは、この値を true に設定することを推奨します。

StreamView.CONFIG_ENABLE_VDAGENT_CHECK

ブール値

クラウドフォンに接続する際に VDAgent の可用性をチェックするかどうかを指定します。クラウドフォンでは、この値を true に設定することを推奨します。

StreamView.CONFIG_ENABLE_STATISTICS

ブール値

パフォーマンス統計をレポートするかどうかを指定します。パフォーマンス統計がレポートされる場合、追加のパフォーマンスデータがビデオストリームで提供されます。クラウドフォンでは、この値を true に設定することを推奨します。

OSType

文字列

OS タイプを指定します。クラウドフォンの場合、この値を android に設定する必要があります。

4.2 StatisticsInfo

次の表に、パフォーマンスデータの収集のためのパラメータを示します。

インターフェイス

タイプ

説明

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

次の表に、ストリーミングされたイメージコンテンツのスケーリング処理タイプを示します。

パラメータ

説明

FILL_STREAM_VIEW

ストリーミング画像を常に StreamView インスタンスのサイズに合わせて拡大します。 StreamView インスタンスのアスペクト比がストリーミング画像のアスペクト比と一致しない場合、この方法では顕著な歪みが発生する可能性があります。

FIT_STREAM_CONTENT

StreamView インスタンスのレンダリング領域を調整して、ストリーミング画像コンテンツが常に同じアスペクト比でレンダリングされるようにします。この方法を使用すると、ストリーミング画像が 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 のみを実装している場合、ストリーミングモードは「ビデオストリームのみ」に設定され、サーバーはビデオストリームデータのみを送信します。

  • アプリが IAudioPlaybackStreamHandler のみを実装している場合、ストリーミングモードはイメージストリームのみに設定されます。つまり、サーバーはイメージストリームデータのみを送信します。

アプリケーションは、MediaStreamPlayer の onCreateXXXHandler メソッドを使用することで、さまざまな種類のメディアデータに対するカスタム実装を SDK に提供できます。

    @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

このメソッドはアプリによって実装され、カスタムメディアエンジンに関連するグローバル初期化タスクを実行するために使用できます。

このメソッドは、各ストリーミングプロセスで一度実行されます。

public ErrorCode initialize()

戻り値:

説明

ErrorCode

初期化が成功した場合は ErrorCode.OK を返します。それ以外の場合は、初期化は失敗しました。

6.2.2 リリース

このメソッドはアプリによって実装され、カスタムメディアエンジンに関連するグローバル リリース タスクを実行するために使用できます。

このメソッドは、各ストリーミングプロセスで一度実行されます。

public ErrorCode release() // release メソッド

戻り値:

説明

ErrorCode

リリースが成功した場合は ErrorCode.OK を返します。それ以外の場合は、リリースは失敗しました。

6.2.3 enableStatistics

このメソッドはアプリによって実装され、パフォーマンス統計収集を有効または無効にするために使用できます。

public void enableStatistics(boolean enabled) // パフォーマンス統計収集を有効または無効にする

パラメータ:

パラメータ

タイプ

説明

enabled

boolean

True: パフォーマンスデータ収集を有効にします。

False: パフォーマンスデータ収集を無効にします。

6.2.4 onCreateVideoStreamHandler

このメソッドはアプリによって実装され、ビデオストリームデータを処理するためのメディアエンジン実装を SDK に提供するために使用されます。

このメソッドは、各ストリーミングプロセスで一度実行されます。

public IVideoStreamHandler onCreateVideoStreamHandler()

戻り値:

説明

IVideoStreamHandler

ビデオストリームデータ処理のためにアプリによって提供されるメディアエンジンによって実装されます。

アプリがビデオストリーム処理の実装を提供しない場合、null が返されます。この場合、ビデオストリームデータは処理されません。

6.2.5 onCreateAdaptiveGraphicStreamHandler

このメソッドはアプリによって実装され、SDK にアダプティブグラフィックストリームデータを処理するためのメディアエンジン実装を提供するために使用されます。

このメソッドは、各ストリーミングプロセスで一度実行されます。

public IAdaptiveGraphicStreamHandler onCreatAdaptiveGraphicStreamHandler() // アプリケーションが提供するアダプティブグラフィックストリームハンドラーを返します。

戻り値:

説明

IAdaptiveGraphicStreamHandler

アダプティブグラフィックストリーム処理のためにアプリによって提供されるメディアエンジンによって実装されます。

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

6.2.6 onCreateAudioPlaybackStreamHandler

このメソッドはアプリによって実装され、SDK にオーディオ ダウンストリーム データを処理するためのメディア エンジン実装を提供するために使用されます。

このメソッドは、各ストリーミングプロセスで一度だけ実行されます。

public IAudioPlaybackStreamHandler onCreatAudioPlaybackStreamHandler()

戻り値:

説明

IAudioPlaybackStreamHandler

オーディオ ダウンストリーム データ処理のためにアプリによって提供されるメディア エンジンによって実装されます。

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

6.2.7 onCreateCursorBitmapHandler

このメソッドはアプリによって実装され、SDK にカーソルデータ処理用のメディアエンジン実装を提供するために使用されます。

このメソッドは、各ストリーミングプロセスで一度だけ実行されます。

このメソッドによって提供されるインターフェイスは、仮想マウスモードが有効になっている場合にのみ使用されます。

public ICursorBitmapHandler onCreatCursorBitmapHandler()

戻り値:

説明

ICursorBitmapHandler

カーソルデータ処理のためにアプリによって提供されるメディアエンジンによって実装されます。

アプリがカーソルデータ処理の実装を提供しない場合は、null が返されます。この場合、カーソルデータは処理されません。

6.3 IVideoStreamHandler

このインターフェイスは、ビデオ ストリーム データを処理するための主なメソッドを定義し、その主なワークフローは以下のとおりです。

アプリがフォアグラウンドとバックグラウンドの間で切り替わると、レンダリングに使用される Surface インスタンスが破棄または再作成されます。この場合、IVideoStreamHandler.setVideoSurface メソッドが複数回呼び出されます。Surface インスタンスが破棄されると、setVideoSurface に渡される surface オブジェクトは null になります。アプリは、デコーダーとレンダリングプロセスのフォールトトレランスを適切に処理する必要があります。

Alibaba Cloud Workspace SDK が提供するイベント処理インターフェイスは、IVideoStreamHandler.setEventHandler メソッドを実装することでアプリで取得できます。 このインターフェイスを介して、アプリはカスタムメディアエンジンからの特定のビデオ処理イベントを 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;
            // SDK にビデオ イメージのフレームがレンダリングされたことを通知します。SDK は、フレーム ID に基づいてクライアント側でエンドツーエンドの待機時間を計算します。
            mHandler.callback(event);
        }
    }

6.3.1 setEventHandler

このメソッドはアプリによって実装されます。Alibaba Cloud Workspace SDK によってカスタムメディアエンジンがロードされると、SDK はこのメソッドを使用してアプリにイベントハンドラを提供します。アプリはこのハンドラを使用して、ビデオストリーム処理イベントを送信できます。

public void setEventHandler(EventHandler handler) // SDK から提供されるハンドラ。アプリは、このハンドラを使用して SDK にビデオストリーム処理イベントを送信できます。

パラメータ:

パラメータ

タイプ

説明

handler

EventHandler

SDK によって提供されるハンドラ。アプリはこのハンドラを使用して、ビデオストリーム処理イベントを SDK に送信できます。

6.3.2 addVideoTrack

このメソッドはアプリによって実装されます。ビデオストリームが作成されたときにアプリに通知します。

現在、1回のストリーミングセッション中に存在できるビデオストリームは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

このメソッドはアプリによって実装されます。ビデオストリームの準備ができたときにアプリに通知します。

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

このメソッドはアプリによって実装されます。新しいビデオフレームを受信すると、アプリに通知します。

ErrorCode setVideoSurface(int trackId, Surface surface);

パラメータ:

パラメータ

説明

trackId

int

ビデオストリームの ID。

frame

VFrame

新しく受信したビデオフレームの情報。

戻り値:

説明

ErrorCode

実行に成功した場合は ErrorCode.OK を返します。それ以外の場合は、実行に失敗しました。

6.3.7 getVideoTracks

このメソッドは、アプリケーションが実装します。SDK はこのメソッドを使用して、お使いのアプリで現在処理されているビデオ ストリームの情報を取得します。

HashMap<Integer, VProfile> getVideoTracks(); // アプリから取得した、処理中のすべてのビデオストリームに関する情報

戻り値:

説明

HashMap<Integer, VProfile>

アプリから取得した、処理中のすべてのビデオ ストリームに関する情報。

6.3.8 リリース

このメソッドはアプリによって実装されます。 SDK は、すべてのビデオ ストリームが破棄されたときにクリーンアップ操作を実行するようにアプリに通知するために、このメソッドを使用します。

ErrorCode release(); // クリーンアップ操作を実行するためのメソッド

戻り値:

説明

ErrorCode

実行に成功した場合は ErrorCode.OK を返します。それ以外の場合は、実行は失敗しました。

6.4 IAudioPlaybackStreamHandler

このインターフェイスは、オーディオストリームデータを処理するための主要なメソッドを定義し、その主なワークフローは次のとおりです。

6.4.1 initAudio

このメソッドはアプリによって実装されます。 SDK 内にオーディオチャンネルが作成されると、このメソッドを介してアプリに通知されます。

ErrorCode initAudio();

戻り値:

説明

ErrorCode

実行が成功した場合は ErrorCode.OK を返します。それ以外の場合は、実行は失敗しました。

6.4.2 deInitAudio

このメソッドは、アプリ側で実装します。SDK 内でオーディオチャンネルが破棄されると、このメソッドを通じてアプリに通知されます。

ErrorCode deInitAudio(); // オーディオの初期化を解除します。

戻り値:

タイプ

説明

ErrorCode

実行が成功した場合は ErrorCode.OK を返します。それ以外の場合は、実行は失敗しました。

6.4.3 startAudioPlayback

このメソッドはアプリによって実装されます。クラウドフォンが音声のストリーミングを開始しようとしているとき、アプリはこのメソッドによって通知されます。

ErrorCode startAudioPlayback(); // ErrorCode を返します。

戻り値:

説明

ErrorCode

実行が成功した場合は ErrorCode.OK を返します。それ以外の場合は、実行は失敗しました。

6.4.4 stopAudioPlayback

このメソッドはアプリによって実装されます。クラウドフォンが音声のストリーミングを停止すると、アプリはこのメソッドを介して通知を受け取ります。

ErrorCode stopAudioPlayback(); // 音声再生を停止する

戻り値:

説明

ErrorCode

実行に成功した場合は ErrorCode.OK を返します。それ以外の場合は、実行に失敗しました。

6.4.5 pushAudioPlaybackFrame

このメソッドはアプリによって実装されます。新しいダウンストリームオーディオフレームを受信すると、このメソッドを介してアプリに通知されます。

ErrorCode pushAudioPlaybackFrame(AFrame pbData); // 音声再生フレームをプッシュするエラーコード

パラメータ:

パラメータ

タイプ

説明

pbData

AFrame

新しく受信したオーディオ ストリームに関する情報。

戻り値:

タイプ

説明

ErrorCode

実行が成功した場合は ErrorCode.OK を返します。それ以外の場合は、実行は失敗しました。

6.4.6 updateAudioPlaybackVol

このメソッドはアプリによって実装されます。クラウドフォンのシステム音量が変更されると、このメソッドを介してアプリに通知されます。

ErrorCode updateAudioPlaybackVol(int volume); // ErrorCode updateAudioPlaybackVol(int ボリューム);

パラメータ:

パラメータ

説明

volume

int

クラウドフォンのシステム音量。有効な値: 0 ~ USHRT_MAX。0 は、クラウドフォンがミュート状態であることを示します。

戻り値:

説明

ErrorCode

実行に成功した場合は ErrorCode.OK を返します。それ以外の場合は、実行に失敗しました。

6.4.7 updateAudioPlaybackMute

このメソッドはアプリによって実装されます。クラウドフォンがミュートまたはミュート解除されると、このメソッドを介してアプリに通知されます。

ErrorCode updateAudioPlaybackMute(int mute);

パラメータ:

パラメータ

説明

mute

int

クラウドフォンをミュートするかどうかを指定します。有効な値: 1 と 0 。 1 はクラウドフォンがミュートされていることを示し、 0 はクラウドフォンがミュート解除されていることを示します。

戻り値:

説明

ErrorCode

実行が成功した場合は ErrorCode.OK を返します。それ以外の場合は、実行は失敗しました。

6.4.8 release

このメソッドはアプリによって実装されます。SDK は、オーディオ チャンネルが破棄されたときにクリーンアップ 操作を実行するようにアプリに通知するためにこれを使用します。

ErrorCode release(); // ErrorCode を返します

戻り値:

説明

ErrorCode

実行に成功した場合は ErrorCode.OK を返します。それ以外の場合は、実行は 失敗しました。

6.5 IAdaptiveGraphicStreamHandler

このインターフェイスは、イメージストリームデータを扱うための主要なメソッドを定義し、その主なワークフローは次のとおりです:

アプリで取得される画像フレームの現在のフォーマットは、Bitmap 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 リリース

このメソッドはアプリによって実装されます。 SDK は、すべてのアダプティブ グラフィック ストリームが破棄されたときにクリーンアップ操作を実行するようにアプリに通知するために、このメソッドを使用します。

ErrorCode release(); // ErrorCode を返します

戻り値:

説明

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 リリース

このメソッドはアプリによって実装されます。SDK はこれを使用して、接続が切断され、カーソル表示がキャンセルされたときにクリーンアップ操作を実行するようにアプリに通知します。

ErrorCode release(); // ErrorCode を解放します

戻り値:

種類

説明

ErrorCode

実行が成功した場合は ErrorCode.OK を返します。それ以外の場合は、実行は失敗しました。

7. エラーコード

エラーコード

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

定義済みモジュール

原因

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

2

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

ASP SDK

無効な MAGIC です。

3

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

ASP SDK

不正なデータです。

4

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

ASP SDK

バージョンが一致しません。

5

接続には Transport Layer Security ( TLS ) が必要です。

ASP SDK

TLS が必要です。

6

接続に TLS は必要ありません。

ASP SDK

TLS が適用されています。

7

%s に接続する権限がありません。

ASP SDK

権限の問題です。

8

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

ASP SDK

Xquic ハンドシェイクの失敗です。

接続が中断された場合、またはエラーが発生した場合

2000

%s のデータ取得がタイムアウトしたため、サーバーへの接続に失敗しました。

ASP SDK

通常の切断です。

2001

%s プロセスが強制的に一時停止されたため、%s をサーバーに接続できませんでした。

ASP SDK

この問題は通常、クライアントアプリが終了したときに発生します(たとえば、Android アプリがホームボタンでユーザーによって閉じられた場合)。

2002

別のユーザーが別の端末から現在の %s に接続しました。 後ほどもう一度お試しください。

ASP SDK

インスタンスは別のユーザーに引き継がれました。

2003

%s はシャットダウンまたは再起動中です(通常は管理者によって開始されます)。 後ほどもう一度お試しください。

ASP SDK

クラウドフォンは、通常は管理者によってシャットダウンまたは再起動されます。

2004

ユーザー接続が終了しました。

ASP SDK

クライアントが開始した切断、またはサーバーが開始した操作 (標準の切断または強制終了/キック)。

2005

管理者が設定した使用期間制限に達したため、%s はタイムアウトにより切断されました。

ASP SDK

管理者が設定した使用期間制限のため、%s は切断されました。

2010

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

ASP SDK

Vdagent 接続エラーです。

2011

渡された接続パラメーターが正しくありません。

ASP SDK

接続パラメーターの受け渡し時にエラーが発生しました。

2027

ストリームプルモードが切り替わりました。

ASP SDK

モードが占有モードから協調モードに、またはその逆に変更されました。

2100

クリップボードの権限が拒否されました(%s からローカルへ)。

ASP SDK

クリップボードの権限が制限されています( VM からローカルへ)。

2101

クリップボードの権限が拒否されました(ローカルから %s へ)。

ASP SDK

クリップボードの権限が制限されています(ローカルから VM へ)。

2200

%s は再接続を試行しています...

ASP SDK

ネットワークの問題により切断されました。ASP SDK は再接続中です。

2201

デバイスでネットワーク異常が発生したため、%s が切断されました。

ASP SDK

ネットワークの問題により切断されました。イメージの制約により、ASP SDK は再接続をサポートしていません。アプリが再接続を開始します。

2202

%s の再接続がタイムアウトしました。 デバイスのネットワークを確認してから、もう一度お試しください。

ASP SDK

ASP SDK 再接続タイムアウトです。

クライアント側のロジックエラー

5100

%s から ASP サーバーへの接続がタイムアウトしました。 後ほどもう一度お試しください。

アプリ側

クライアントは、指定された時間内に接続イベントを受信しませんでした。

5102

タイムアウトエラーのため、%s のデータを取得できませんでした。 後ほどもう一度お試しください。

アプリ側

クライアントは接続イベントを受信しましたが、指定された時間内に表示イベントを受信しませんでした。

5004

クライアントでエラーが発生しました。 クライアントをもう一度開いてください。

アプリ側

クライアントに渡された起動パラメーターが正しくありません(通常は開発中に発生します)。

5200

クライアントの再接続がタイムアウトしました。 後ほどもう一度お試しください。

アプリ側

8. よくある質問

クラウドフォンを再起動するにはどうすればよいですか?

クラウドフォンを再起動するには、RebootAndroidInstancesInGroup API 操作を呼び出します。クラウドフォンへのアクティブなクライアント接続は、再起動中に一時的に切断されることに注意してください。再起動が完了したら、クライアント側から再接続するだけです。

Maven サポート

パブリック Maven ホスティングは現在利用できません。ただし、お客様は AAR ライブラリを独自の Maven リポジトリにアップロードすることで、SDK を手動で統合できます。

一般的な 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