tencent cloud

Android

PDF
フォーカスモード
フォントサイズ
最終更新日: 2025-12-24 10:30:37

業務プロセス

本節では、オンラインクレーンゲームにおける一般的な業務プロセスをまとめ、シーン全体の実現プロセスをよりよく理解できるようにします。
オンラインクレーンゲーム Real-Time Communication Engine(RTC Engine) 配信
オンラインクレーンゲーム RTMP プッシュ型配信
下図は、オンラインクレーンゲーム RTC Engine プッシュ型配信のシーケンス図を示しており、ネットワークカメラの RTC Engine プッシュ型配信やユーザープル型配信などのプロセスが含まれています。



下図は、オンラインクレーンゲーム RTMP プッシュ型配信のシーケンス図を示しており、ネットワークカメラの RTMP プッシュ型配信やユーザープル型配信などのプロセスが含まれています。




導入準備

ステップ1:サービスの開通

オンラインクレーンゲームのシーンでは、通常、Tencent CloudのRTC Engine有料PaaSサービスを利用して構築する必要があります。その中で、RTC Engine はリアルタイム音声動画インタラクション機能を提供します。実際のビジネスニーズに応じて、上記のサービスを自由に選択して開通できます。
1. RTC Engineコンソールにログインし、アプリケーションページでアプリケーションを作成をクリックすると、必要に応じて RTC Engine アプリケーションのバージョンをアップグレードできます。例えば、フラッグシップ版ではより多くの付加価値機能サービスが利用可能になります。

説明:
テスト環境と本番環境に別々のアプリケーションを作成することをお勧めします。RTC Engineサービスを初めて開通すると、無料の10000 分試用パッケージが提供されます。
RTC Engine 月額プラン(体験版、軽量版、標準版、プロフェッショナル版)は、さまざまな付加価値機能サービスを利用できます。詳細は月額プランの説明をご参照ください。
2. アプリケーションの作成が完了したら、アプリケーション > アプリケーション総覧でそのアプリケーションの基本情報を確認できます。その中で、SDKAppIDSDKSecretKeyを適切に保管し、今後の使用に備えてください。同時に、秘密鍵の漏洩による不正なトラフィック使用を防ぐため注意が必要です。


ステップ2:SDKをインポート

RTC Engine SDKはmavenCentralリポジトリに公開されており、gradleを設定することで自動的にダウンロードと更新が可能です。
1. dependenciesに適切なバージョンのSDKの依存関係を追加します。
// RTC Engine 簡易版 SDKは、RTCとライブストリーミング再生の二つの機能を含みます
dependencies {
implementation 'com.tencent.liteav:LiteAVSDK_TRTC:latest.release'
}
説明:
自動ロード(aar)のソリューションでは、repositoriesにmavenCentralリポジトリを追加していることを確認する必要があります。
2. defaultConfigで、Appで使用するCPUアーキテクチャを指定します。
defaultConfig {
ndk {
abiFilters "armeabi-v7a", "arm64-v8a"
}
}

ステップ3:プロジェクト設定

1. 権限設定。
AndroidManifest.xmlでAppの権限を設定します。オンラインクレーンゲームシーンでは、LiteAVSDKに以下の権限が必要です。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera.autofocus" />
注意:
android:hardwareAccelerated="false"を設定しないでください。ハードウェアアクセラレーションをオフにすると、相手のビデオストリームがレンダリングできなくなります。
LiteAVSDK には権限申請ロジックが組み込まれていないため、適切な権限を自身で宣言する必要があります。一部の権限(ストレージ、録音、カメラなど)は実行時に動的に申請する必要があります。
AndroidプロジェクトのtargetSdkVersionが31の場合、または対象デバイスがAndroid 12以降のシステムバージョンに関連する場合、公式ではコード内でandroid.permission.BLUETOOTH_CONNECT権限を動的に申請する必要があり、Bluetooth機能を正常に使用するために必要です。詳細はAndroid公式説明をご参照ください。
2. 難読化設定。
SDK内部でJavaのリフレクション機能を使用しているため、proguard-rules.proファイルに SDK関連クラスを難読化除外リストに追加する必要があります。
-keep class com.tencent.** { *; }

ステップ4:認証と許可

UserSigは、Tencent Cloudが設計したセキュリティ保護署名であり、悪意のある攻撃者によるクラウドサービスの使用権の盗用を防ぐことを目的としています。RTC Engineは入室時にこの認証資格情報を検証します。
デバッグ実行段階:クライアント側のサンプルコードコンソールの二つの方法でUserSigを計算・生成できますが、デバッグ・テスト専用です。
正式運用段階:より高いセキュリティレベルを提供するサーバー側でUserSig計算方法を推奨します。これにより、クライアント側がリバースエンジニアリングによって秘密鍵が漏洩するのを防ぎます。
具体的な実現フローは以下の通り。
1. お客様のAppは、SDKの初期化関数を呼び出す前に、まずお客様のサーバーにUserSigをリクエストする必要があります。
2. お客様のサーバーはSDKAppIDとUserIDに基づいてUserSigを計算します。
3. サーバーは計算されたUserSigをお客様のAppに返します。
4. お客様のAppは取得したUserSigを特定のAPIを介してSDKに渡します。
5. SDKはSDKAppID + UserID + UserSigをTencent Cloudサーバーに送信し、検証を行います。
6. Tencent CloudはUserSigを検証し、正当性を確認します。
7. 検証が完了すると、RTC Engine SDKにリアルタイム音声動画サービスを提供します。

注意:
デバッグ実行段階でのローカルUserSig計算方法は、オンライン環境での使用をお勧めしません。リバースエンジニアリングで容易に秘密鍵が漏洩する可能性があります。
当社は複数の言語バージョン(Java/GO/PHP/Nodejs/Python/C#/C++)のUserSigサーバー側の計算ソースコードを提供しています。詳細はUserSig計算ソースコードをご覧ください。

ステップ5:SDKを初期化

// RTC Engine SDKインスタンスを作成(シングルトンパターン)
TRTCCloud mTRTCCloud = TRTCCloud.sharedInstance(context);
// イベントリスナーを設定
mTRTCCloud.setListener(trtcSdkListener);

// SDKからの各種イベント通知(例:エラーコード、警告コード、オーディオ・ビデオの状態パラメータなど)
private TRTCCloudListener trtcSdkListener = new TRTCCloudListener() {
@Override
public void onError(int errCode, String errMsg, Bundle extraInfo) {
Log.d(TAG, errCode + errMsg);
}
@Override
public void onWarning(int warningCode, String warningMsg, Bundle extraInfo) {
Log.d(TAG, warningCode + warningMsg);
}
};

// イベントリスナーを削除
mTRTCCloud.setListener(null);
// TRTC SDKインスタンスを破棄(シングルトンパターン)
TRTCCloud.destroySharedInstance();
説明:
SDKのイベント通知を監視し、一般的なエラーのログ記録と処理を行うことをお勧めします。詳細はエラーコード表をご参照ください。

ステップ6:RTMPプッシュ型配信アドレスを生成します(RTMPプッシュ型配信)

RTMPプッシュ型配信アドレスを生成します。
rtmp://intl-rtmp.rtc.qq.com/push/ルーム番号?sdkappid=アプリケーション&userid=ユーザー名&usersig=署名
プライマリドメインはintl-rtmp.rtc.qq.comで、バックアップドメインはrtmp.rtc-web.comです。プライマリドメインの解析に問題がある場合は、バックアップドメインを使用できます。
RTMP appNameはpushです。
アドレス内のルーム番号、アプリケーション、ユーザー名、署名は業務のものに置き換える必要があります。
パラメータを簡略化するため、文字列のルーム番号のみをサポートし、64文字以内で、文字は数字、アルファベット、アンダースコアのみ使用可能です。
注意:
RTC Engineの他の端末でRTMPストリームを視聴する場合は、文字列ルーム番号で入室してください。
UserSigの生成ルールについては、UserSig関連をご参照ください(署名が有効期限内であることにご注意ください)。
例:
rtmp://intl-rtmp.rtc.qq.com/push/hello-string-room?sdkappid=140**66&userid=rtmp2&usersig=eJw1jdERBZ8qKGRj8Yp-wVbvmGMVZqS7w-mMDQL

導入プロセス

API シーケンス図





ステップ1:クレーンゲームプッシュ型配信

RTC Engine プッシュ型配信

1. クライアント側のサンプルコードコンソールの二つの方法でUserSigを計算・生成します。
2. SdkAppid、UserId、UserSig、RoomIdなどの情報をRTC Engineネットワークカメラまたはプッシュ型配信ボックスに設定してプッシュ型配信を開始します。
注意:
RTC Engine のルーム番号には、数字型のroomIdと文字列型のstrRoomIdの二種類があります。二種類のルームは相互接続されません。ルーム番号のタイプを統一することをお勧めします。
RTC Engineのユーザーロールは配信者と視聴者に分かれており、配信者のみがストリーミング権限を持ちます。入室時にはユーザーロールを指定する必要があり、指定がない場合はデフォルトで配信者ロールになります。
オンラインクレーンゲームシーンでは、入室モードとしてTRTC_APP_SCENE_VIDEOCALLを使用することをお勧めします。これにより遅延が低減されます。

RTMPプッシュ型配信

1. RTMPアドレスジェネレータを使用してRTMPプッシュ型配信アドレスを生成します。



2. RTMPプッシュ型配信アドレスをRTMPネットワークカメラまたはプッシュ型配信ボックスに設定してプッシュ型配信を開始します。

ステップ2:ユーザー入室のプル型配信

1. ユーザーがRTC Engineルームに入室します。
public void enterRoomByAudience(String roomId, String userId) {
TRTCCloudDef.TRTCParams params = new TRTCCloudDef.TRTCParams();
// 文字列ルーム番号を例とします
params.strRoomId = roomId;
params.userId = userId;
// 業務バックエンドから取得したUserSig
params.userSig = getUserSig(userId);
// お客様のSDKAppIDに置き換えてください
params.sdkAppId = SDKAppID;
mTRTCCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_VIDEOCALL);
}

// 入室結果イベントのコールバック
@Override
public void onEnterRoom(long result) {
if (result > 0) {
// result は入室にかかった時間(ミリ秒)を表します
Log.d(TAG, "Enter room succeed");
} else {
// result は入室失敗時のエラーコードを表します
Log.d(TAG, "Enter room failed");
}
}
2. ユーザーがアンカーのオーディオ・ビデオストリームをサブスクライブします。
@Override
public void onUserAudioAvailable(String userId, boolean available) {
// あるリモートユーザーが自身のオーディオを公開/キャンセルしました
// 自動サブスクリプションモードでは、何も操作する必要はなく、SDKが自動的にリモートユーザーのオーディオを再生します
}

@Override
public void onUserVideoAvailable(String userId, boolean available) {
// あるリモートユーザーがメインストリームのビデオ画面を公開/キャンセルしました
if (available) {
// リモートユーザーのビデオストリームをサブスクライブし、ビデオレンダリングコントロールをバインドします
mTRTCCloud.startRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, TXCloudVideoView view);
} else {
// リモートユーザーのビデオストリームのサブスクリプションを停止し、レンダリングコントロールを解放します
mTRTCCloud.stopRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG);
}
}
3. 視聴者がリモート画面のレンダリングモードを設定します(オプション)。
TRTCCloudDef.TRTCRenderParams params = new TRTCCloudDef.TRTCRenderParams();
params.mirrorType = TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_AUTO; // 画面ミラーモード
params.fillMode = TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL; // 画面フィルモード
params.rotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0; // 画面回転角度
// リモート画面のレンダリングモードを設定
mTRTCCloud.setRemoteRenderParams(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, params)

ステップ3:ユーザーの退室

1. ユーザーが退室します。
public void exitRoom() {
mTRTCCloud.stopLocalAudio();
mTRTCCloud.stopLocalPreview();
mTRTCCloud.exitRoom();
}

// 退室イベントのコールバック
@Override
public void onExitRoom(int reason) {
if (reason == 0) {
Log.d(TAG, "exitRoomを能動的に呼び出して退室");
} else if (reason == 1) {
Log.d(TAG, "サーバーによって現在のルームから退出させられました");
} else if (reason == 2) {
Log.d(TAG, "現在のルーム全体が解散されました");
}
}
注意:
SDKが占有しているすべてのリソースが解放されると、SDKはonExitRoomコールバック通知をお客様に送信します。
お客様がenterRoomを再度呼び出すか、他のオーディオ・ビデオSDKに切り替える場合は、onExitRoomコールバックが発生するまで待ってから関連操作を実行してください。そうしないと、カメラやマイクデバイスが強制的に占有されるなどの異常な問題が発生する可能性があります。
2. ルームを解散。
サーバー側でルームを解散
RTC Engineは、サーバー側での数字型ルーム解散API [DismissRoom] と文字列型ルーム解散API DismissRoomByStrRoomId を提供しています。サーバー側のルーム解散インターフェースを呼び出すことで、ルーム内のすべてのユーザーをルームから退室させ、ルームを解散することができます。
クライアント側でルームを解散
クライアント側にはルームを直接解散するAPIがなく、各クライアントがexitRoomを呼び出して退室する必要があります。ルーム内のすべての配信者と視聴者が退室すると、RTC Engineのルームライフサイクルルールに従ってルームは自動的に解散されます。詳細はRTC Engine 退室をご参照ください。

異常処理

異常エラー処理

RTC Engine SDKが回復不能なエラーに遭遇すると、onErrorコールバックでエラーをスローします。詳細はRTC Engineエラーコード表をご参照ください。
1. UserSig 関連。
UserSig の検証に失敗すると、入室に失敗します。UserSig 生成と検証を参照して検証することができます。
列挙
説明
ERR_TRTC_INVALID_USER_SIG
-3320
入室パラメータ UserSig が正しくありません。TRTCParams.userSig が空でないか確認してください。
ERR_TRTC_USER_SIG_CHECK_FAILED
-100018
UserSig の検証に失敗しました。パラメータ TRTCParams.userSig が正しく入力されているか、または有効期限が切れていないか確認してください。
2. 入退室関連。
入室に失敗した場合は、まず入室パラメータが正しいか確認してください。また、入室・退室インターフェースは必ずペアで呼び出す必要があり、入室に失敗した場合でも退室インターフェースを呼び出す必要があります。
列挙
説明
ERR_TRTC_CONNECT_SERVER_TIMEOUT
-3308
入室リクエストがタイムアウトしました。ネットワーク接続が切断されているか、VPNが有効になっているか確認してください。4Gに切り替えてテストすることもできます。
ERR_TRTC_INVALID_SDK_APPID
-3317
入室パラメータ sdkAppId が正しくありません。TRTCParams.sdkAppId が空でないか確認してください
ERR_TRTC_INVALID_ROOM_ID
-3318
入室パラメータ roomId が正しくありません。TRTCParams.roomId または TRTCParams.strRoomId が空でないか確認してください。roomId と strRoomId は混在して使用できませんのでご注意ください。
ERR_TRTC_INVALID_USER_ID
-3319
入室パラメータ userId は が正しくありません。TRTCParams.userId が空でないか確認してください。
ERR_TRTC_ENTER_ROOM_REFUSED
-3340
入室リクエストが拒否されました。enterRoom を連続して呼び出して同じIdのルームに入ろうとしていないか確認してください。
3. デバイス関連。
デバイス関連のエラーを監視し、関連するエラーが発生した場合にユーザーにUIで通知することができます。
列挙
説明
ERR_CAMERA_START_FAIL
-1301
カメラの起動に失敗しました。例:WindowsまたはMacデバイスではカメラの設定プログラム(ドライバー)に異常がある場合があります。デバイスを無効化して再有効化する、またはマシンを再起動する、または設定プログラムを更新してください。
ERR_MIC_START_FAIL
-1302
マイクの起動に失敗しました。例:WindowsまたはMacデバイスでは、マイクの設定プログラム(ドライバー)に異常がある場合があります。デバイスを無効化して再有効化する、またはマシンを再起動する、または設定プログラムを更新してください。
ERR_CAMERA_NOT_AUTHORIZED
-1314
カメラデバイスが未承認です。通常はモバイルデバイスで発生し、権限がユーザーによって拒否された可能性があります。
ERR_MIC_NOT_AUTHORIZED
-1317
マイクデバイスが未承認です。通常はモバイルデバイスで発生し、権限がユーザーによって拒否された可能性があります。
ERR_CAMERA_OCCUPY
-1316
カメラ現在使用中です。他のカメラの使用を試みてください。
ERR_MIC_OCCUPY
-1319
マイクが使用中です。例えば、モバイルデバイスが通話中の場合、マイク起動に失敗します。

視聴者のプル型配信時の黒画面

RTMPクレーンゲームのプッシュ型配信シーンでは、RTMPプッシュ型配信でRTC Engineルームに入る機能が利用され、プッシュ型配信操作に成功しました。しかし、RTC Engineのルーム内で正常にプッシュ型配信ができませんでした。問題を調査した結果、プッシュ型配信設定にBフレームが含まれていることが判明し、RTC EngineのルームはBフレームを含むシーンをサポートしていないため、RTMPプッシュ型配信内容を受信できませんでした。プッシュ型配信設定の参考は以下の通り。


視聴者のプル型配信画面がフリーズします/プル型配信時にサードパーティの画面が表示されます

クレーンゲームのシーンでは、RTC Engineの視聴者がルームに入り、プル型配信を行ってしばらくすると、自動的にプル型配信のフリーズ問題が発生します。特にpeer-joinやonUserVideoAvailableコールバックが複数回トリガーされた後、視聴者のプル型配信画面が最後のフレームで固まってしまいます。このような状況に遭遇した場合、まずダッシュボードにアクセスして詳細な通話情報を確認してください。ダッシュボードに表示される特徴が配信者の複数回の入退室を示している場合、衝突によるものであるとほぼ確認できます。
解決策:現在のマシンのプッシュ型配信を停止することで問題を解決できる可能性があります。問題が解決しない場合は、同じマシンに二つの同じプッシュ型配信アドレスが設定されていないか確認してください。

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック