tencent cloud

iOS

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は CocoaPods に公開されています。CocoaPods を通じて SDK を統合することをお勧めします。
1. CocoaPodsをインストールします。
ターミナルウィンドウで以下のコマンドを実行してCocoaPodsをインストールします。すでにCocoaPodsのインストールが完了している場合は、このステップをスキップできます。
sudo gem install cocoapods
2. Podfileファイルを作成します。
プロジェクトのパスに移動し、次のコマンドラインを入力すると、プロジェクトパスにPodfileファイルが作成されます。
pod init
3. Podfileファイルを編集します。
プロジェクトのニーズに応じて適切なバージョンを選択し、Podfileファイルを編集します。
platform :ios, '8.0'
target 'App' do

# RTC Engine 簡易版(推奨)
# インストールパッケージのサイズ増加が最小限です。Real-Time Communication(RTC)(RTC Engine)とライブプレーヤー(TXLivePlayer)の二つの機能のみをサポートしています。
pod 'TXLiteAVSDK_TRTC', :podspec => 'https://liteav.sdk.qcloud.com/pod/liteavsdkspec/TXLiteAVSDK_TRTC.podspec'

# LiteAVSDK フル機能版
# RTC(RTC Engine)、ライブプレーヤー(TXLivePlayer)、RTMPプッシュ(TXLivePusher)、オンデマンドプレーヤー(TXVodPlayer)、ショートビデオ録画・編集(UGSV)など、多数の機能を含みます。
pod 'TXLiteAVSDK_Professional', :podspec => 'https://liteav.sdk.qcloud.com/pod/liteavsdkspec/TXLiteAVSDK_Professional.podspec'

end
4. SDKを更新してインストールします。
ターミナルウィンドウで以下のコマンドを入力して、ローカルライブラリファイルを更新し、 SDKをインストールします。
pod install
または、以下のコマンドを使用してローカルライブラリのバージョンを更新します。
pod update
podコマンドの実行が完了すると、SDKが統合された.xcworkspace拡張子のプロジェクトファイルが生成され、ダブルクリックで開くことができます。
説明:
podの検索に失敗した場合は、podのローカルrepoキャッシュを更新することをお勧めします。更新コマンドは以下の通りです。
pod setup
pod repo update
rm ~/Library/Caches/CocoaPods/search_index.json

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

1. オンラインクレーンゲームシーンでは、RTC Engine SDKが App のマイクとカメラの権限を必要とします。 App のInfo.plistに以下の内容を追加し、システムが権限付与ダイアログを表示する際のマイクとカメラに関するプロンプトメッセージに対応させてください。
Privacy - Microphone Usage Description, 同時にマイク使用目的のプロンプト文を入力
Privacy - Camera Usage Description,そしてカメラ使用目的のプロンプト文を入力



2. Appがバックエンドに移行しても関連機能を実行する必要がある場合は、XCodeで現在のプロジェクトを選択し、Capabilitiesの下で設定項目 Background Modes をONに設定し、Audio、AirPlay and Picture in Pictureにチェックを入れてください。以下の図の通りです。




ステップ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インスタンスを作成(シングルトンパターン)
self.trtcCloud = [TRTCCloud sharedInstance];
// イベントリスナーを設定
self.trtcCloud.delegate = self;

// SDKからの各種イベント通知(例:エラーコード、警告コード、オーディオ・ビデオの状態パラメータなど)
- (void)onError:(TXLiteAVError)errCode errMsg:(nullable NSString *)errMsg extInfo:(nullable NSDictionary *)extInfo {
NSLog(@"%d: %@", errCode, errMsg);
}

- (void)onWarning:(TXLiteAVWarning)warningCode warningMsg:(nullable NSString *)warningMsg extInfo:(nullable NSDictionary *)extInfo {
NSLog(@"%d: %@", warningCode, warningMsg);
}

// イベントリスナーを削除
self.trtcCloud.delegate = nil;
// RTC Engine SDK インスタンスの破棄(シングルトンパターン)
[TRTCCloud destroySharedIntance];
説明:
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ルームに入室します。
- (void)enterRoomByAudienceWithUserId:(NSString *)userId roomId:(NSString *)roomId {
TRTCParams *params = [[TRTCParams alloc] init];
// 文字列ルーム番号を例とします
params.strRoomId = roomId;
params.userId = userId;
// 業務バックエンドから取得したUserSig
params.userSig = @"userSig";
// お客様のSDKAppIDに置き換えてください
params.sdkAppId = 0;
// オーディエンスロールを指定
params.role = TRTCRoleAudience;
// インタラクティブライブストリーミングシーンでルームに入室
[self.trtcCloud enterRoom:params appScene:TRTCAppSceneVideoCall];
}

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

- (void)onUserVideoAvailable:(NSString *)userId available:(BOOL)available {
// あるリモートユーザーがメインストリームのビデオ画面を公開/キャンセルしました
if (available) {
// リモートユーザーのビデオストリームをサブスクライブし、ビデオレンダリングコントロールをバインドします
[self.trtcCloud startRemoteView:userId streamType:TRTCVideoStreamTypeBig view:self.remoteView];
} else {
// リモートユーザーのビデオストリームのサブスクリプションを停止し、レンダリングコントロールを解放します
[self.trtcCloud stopRemoteView:userId streamType:TRTCVideoStreamTypeBig];
}
}
3. 視聴者がリモート画面のレンダリングモードを設定します(オプション)。
- (void)setupRemoteRenderParams {
TRTCRenderParams *params = [[TRTCRenderParams alloc] init];
// 画面ミラーリングモード
params.mirrorType = TRTCVideoMirrorTypeAuto;
// 画面フィルモード
params.fillMode = TRTCVideoFillMode_Fill;
// 画面回転角度
params.rotation = TRTCVideoRotation_0;
// リモート画面のレンダリングモードを設定
[self.trtcCloud setRemoteRenderParams:@"userId" streamType:TRTCVideoStreamTypeBig params:params];
}

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

1. ユーザーが退室します。
- (void)exitRoom {
[self.trtcCloud stopLocalAudio];
[self.trtcCloud stopLocalPreview];
[self.trtcCloud exitRoom];
}

// 退室イベントのコールバック
- (void)onExitRoom:(NSInteger)reason {
if (reason == 0) {
NSLog(@" exitRoom を能動的に呼び出して退室");
} else if (reason == 1) {
NSLog(@"サーバーによって現在のルームから退出させられました");
} else if (reason == 2) {
NSLog(@"現在のルーム全体が解散されました");
}
}
注意:
SDKが占有しているすべてのリソースが解放されると、SDKはonExitRoomコールバック通知をお客様に送信します。
お客様がenterRoomを再度呼び出すか、他のオーディオ・ビデオSDKに切り替える場合は、onExitRoomコールバックが発生するまで待ってから関連操作を実行してください。そうしないと、カメラやマイクデバイスが強制的に占有されるなどの異常な問題が発生する可能性があります。
2. ルームを解散。
サーバー側でルームを解散
RTC Engineは、サーバー側での数字型ルーム解散APIDismissRoomと、文字列型ルーム解散APIDismissRoomByStrRoomIdを提供しています。サーバー側のルーム解散インターフェースを呼び出すことで、ルーム内のすべてのユーザーをルームから退出させ、ルームを解散することができます。
クライアント側でルームを解散
クライアント側にはルームを直接解散する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コールバックが複数回トリガーされた後、視聴者のプル型配信画面が最後のフレームで固まってしまいます。このような状況に遭遇した場合、まずダッシュボードにアクセスして詳細な通話情報を確認してください。ダッシュボードに表示される特徴が配信者の複数回の入退室を示している場合、衝突によるものであるとほぼ確認できます。
解決策:現在のマシンのプッシュ型配信を停止することで問題を解決できる可能性があります。問題が解決しない場合は、同じマシンに二つの同じプッシュ型配信アドレスが設定されていないか確認してください。

ヘルプとサポート

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

フィードバック