tencent cloud

シナリオソリューション

PDF
フォーカスモード
フォントサイズ
最終更新日: 2025-11-27 20:50:52

シナリオ概要

シナリオ紹介

1V1オーディオ・ビデオ通話とは、WeChat通話のような使用頻度が高い使用シナリオの一種であり、Real-Time Communicationボイス通話の遅延は300ms以下で、パケットロス耐性は80%を超え、ネットワークジッターに対する耐性は1000msを超え、回線品質低下環境下でもボイス通話の流暢さと安定性を保証します。ビデオ通話は、720p、1080p、2Kおよび2K+(特定のデバイス)の高解像度画質をサポートし、高品質のビデオ通話サービスを提供します。Chatが提供する豊富な通話シグナル管理インターフェースと組み合わせることで、様々なアプリケーションシナリオに容易に対応できます。さらに、オーディオ・ビデオ通話用のシナリオコンポーネントも提供しており、直接利用可能で、開発コストを最大限に削減できます。詳細はコンポーネント紹介を参照してください。




シナリオのプレイ

1V1オーディオ・ビデオ通話シナリオには、基本的なWeChatのような通話アプリケーションだけでなく、さまざまな利用方法を派生できます。以下、いくつかの一シナリオでの利用方法について簡単に紹介します。

ゲームソーシャル

ゲーム分野では、オーディオ・ビデオ通話を通じてプレイヤー間でリアルタイムインタラクションを行い、ゲーム体験を向上させることができます。プレイヤーはゲーム内で友達とボイスやビデオチャットを行い、ゲームの感想や技術を共有したり、一緒にゲームのルールを立てたりすることができます。現在、オーディオ・ビデオ通話はボイスチャットオンラインゲームなどのゲームソーシャルプレイに広く応用されています。

オンラインカスタマーサービス

1V1オーディオ・ビデオ通話は、顧客がカスタマーサービス担当者とリアルタイムでコミュニケーションを取り、問題を解決することができます。従来のテキストベースのカスタマーサービスと比較して、オーディオ・ビデオ通話は顧客が問題をより直感的に説明できるようにし、カスタマーサービス担当者も顧客のニーズをより明確に理解し、問題解決の効率を向上させることができます。例えば、紛争処理や保険相談などは、非常に適した使用シナリオです。

オンライン診療

医療分野において、1V1オーディオ・ビデオ通話により、患者は医師と遠隔診療を行うことができます。患者はオーディオ・ビデオ通話を通じて医師に症状を説明することができ、医師も患者の説明に基づいて初期診断を行うことができます。この方法は患者の時間と精力を節約するだけでなく、医師がより多くの患者にサービスを提供し、医療リソースの利用率を向上させることができます。

金融監査

金融分野では、1V1オーディオ・ビデオ通話は、身元認証、リスク評価などの段階で使用できます。オンラインでの資産管理、口座開設、面接署名などの業務を行う際には、国の規制などに対応するための要求に応じて、録音および録画サービスを提供し、取引記録のビデオをアーカイブして、検査のために保管する必要があります。オーディオ・ビデオ通話は金融監査分野での応用が成熟しており、監査効率を高めるだけでなく、詐欺リスクを低減することもできます。

実装方法

通常、基本的な1V1オーディオ・ビデオ通話シナリオを実装するには、複数の機能モジュールに関わる必要があります。実装方針は大まかに三つの部分に分けることができます:通話シグナル制御オーディオ・ビデオ通話通話機能制御。各部分のキーアクションと機能ポイントは以下の表の通りです。
機能モジュール
主要なアクションと機能ポイント
通話シグナル制御
発信、応答、拒否、切断
オーディオ・ビデオ通話
ボイス通話、ビデオ通話
通話機能の制御
マイク/カメラ/スピーカーのオン・オフ、スピーカーとハンズフリーの切り替え、カメラの切り替え、ウィンドウサイズの切り替え、ネットワーク状態の提示、通話時間の統計
オーディオ・ビデオ通話シナリオの完全な実装は通常、Real-Time CommunicationとChatの組み合わせに依存します。Real-Time Communicationモジュールはオーディオ・ビデオ通信およびデバイス状態を制御する役割を担当し、Chatモジュールはシグナル伝送およびメッセージをプッシュする役割を担当します。オーディオ・ビデオ通話シナリオの主要なアーキテクチャは下記の通りです。




通話シグナル制御

完全な通話プロセスに基づいて、通話シグナルは発信応答拒否切断の4つの部分に分けることができます。Chatを例に、以下ではユーザーがログイン操作を完了した後の通話シグナル制御の具体的な実装について説明します。

発信

発信シグナルは、発信開始、発信取消、発信タイムアウトのいくつかの部分に細分化でき、その呼び出しタイムラインは以下の図に示されています。



発信開始:発信側は着信側に通話招待を送る同時に、発信ページが表示され、呼出音が再生されます。着信側は招待通知を受け取り、着信ページが表示され、着信音が再生されます。
発信取消:発信側は通話招待を途中でキャンセルし、発信ページが破棄され呼出音が停止します。着信側は取消通知を受け取り、着信ページが破棄され着信音が停止します。
発信タイムアウトinviteで設定されたタイムアウト時間timeoutになっても応答がない場合、発信側と着信側両方はタイムアウト通知が送られ、発信/着信ページが破棄され、呼出音/着信音が停止します。

着信

着信側が発信側からの通話招待を受け取った後、応答操作を選択して、オーディオ・ビデオ通話を開始することができます。



通話が繋がった後、双方はすぐにオーディオ・ビデオのインタラクション通信を開始し、具体的な実装についてはオーディオ・ビデオ通話を参照してください。

拒否

拒否シグナルは、アクティブ拒否とビジー拒否の2つの部分に分けられ、その呼び出しタイムラインは以下の図に示されています。



アクティブ拒否:着信側が通話招待を受けた後、招待を拒否し、着信ページが破棄され、着信音が停止します。発信側は拒否通知を受け取り、発信ページが破棄され、呼出音が停止します。
ビジー拒否:通話招待を出した後、着信側がすでに通話中の場合、招待は拒否されます。発信側は拒否通知を受け取り、着信ページが破棄され、呼出音が停止します。
注意:
アクティブ拒否とビジー拒否は両方ともrejectシグナルを使用して実現されていますが、シグナルのカスタムデータであるdataフィールドを通じて区別する必要があります。

切断

通話中に、発信側と着信側は、いつでも切断操作を選択し、オーディオ・ビデオ通話を終了することができます。



発信側が切断する場合、発信側が退室操作を実行し、着信側がリモートからの退室通知を受け取り、退室プロセスが行われ、双方の通話が終了します。
説明:
切断操作はIMシグナル通知を使用するのではなく、TRTCリモートユーザーの退室コールバック通知を使用して実現しています。

オーディオ・ビデオ通話

オーディオ・ビデオ通話は主にReal-Time Communicationの機能に依存して実現され、ボイス通話ビデオ通話の二つの部分に分けられます。以下、これらの具体的な実装について紹介します。

ボイス通話

通話が繋がった後、通話の両方が同じTRTCルームに入り、ローカルのオーディオのキャプチャーやプッシュストリームを開始し、相手のオーディオストリームをプルして、ボイス通話を実現します。
通話の開始と終了に関するオーディオ・ビデオ関連インターフェースの呼び出しタイムラインは、以下の図に示されています。



注意:
ボイス通話モードで、TRTC入室シナリオはTRTC_APP_SCENE_AUDIOCALLを選択する必要があります。入室ロールTRTCRoleTypeを指定しないでください。
音声キャプチャーstartLocalAudioを開始する時、音質パラメータを設定できます。ボイス通話モードではTRTC_AUDIO_QUALITY_SPEECHに設定することをお勧めします。
SDKデフォルトの自動購読モードでは、ユーザーがルームに入ると、そのルームのオーディオストリームをすぐに受信し、オーディオは自動的にデコードされ再生されます。手動でプルストリームする必要はありません。

ビデオ通話

通話発信段階で、通話両方がビデオエンコードのパラメータを設定し、同時にローカルビデオのプレビューをオンにする必要があります。通話が繋がった後、通話両方が同じTRTCルームに入り、ローカルオーディオのキャプチャーとプッシュストリームを開始し、同時に相互に相手のオーディオストリームとビデオストリームをプルし、オーディオ・ビデオ通話を実現します。
通話発信、通話開始、通話終了に関するオーディオ・ビデオ関連インターフェースの呼び出しタイムラインは、以下の図に示されています。



注意:
ビデオ通話モードで、TRTC入室シナリオはTRTC_APP_SCENE_VIDEOCALLを選択する必要があります。入室ロールTRTCRoleTypeを指定しないでください。
入室する前にstartLocalPreviewを呼び出し、SDKはカメラのプレビューのみをオンにし、enterRoomを呼び出すまでプッシュストリームを開始しません。
音声キャプチャーstartLocalAudioを開始する時、音質パラメータを設定できます。ビデオ通話モードではTRTC_AUDIO_QUALITY_SPEECHに設定することをお勧めします。
SDKデフォルトの自動購読モードでは、音声は自動的にデコードされて再生されますが、ビデオは手動でstartRemoteViewを呼び出してリモートビデオストリームをプルしてレンダリングし再生する必要があります。

通話機能の制御

オーディオ・ビデオ通話中、一連の機能制御に関与する場合があります。例えば:マイクのオン・オフスピーカーのオン・オフカメラのオン・オフスピーカーとハンズフリーの切り替えカメラの切り替えウィンドウサイズの切り替えネットワーク状態の提示通話時間の統計、これらの機能制御および状態提示はほとんどがTRTC SDKを通じて行われます。以下、具体的な実装について項目ごとに紹介します。

マイクのオン・オフ

Android
iOS
// マイクをオンにする
mTRTCCloud.muteLocalAudio(false);
// マイクをオフにする
mTRTCCloud.muteLocalAudio(true);
// マイクをオンにする
[self.trtcCloud muteLocalAudio:NO];
// マイクをオフにする
[self.trtcCloud muteLocalAudio:YES];

スピーカーのオン・オフ

Android
iOS
// スピーカーをオンにする
mTRTCCloud.muteAllRemoteAudio(false);
// スピーカーをオフにする
mTRTCCloud.muteAllRemoteAudio(true);
// スピーカーをオンにする
[self.trtcCloud muteAllRemoteAudio:NO];
// スピーカーをオフにする
[self.trtcCloud muteAllRemoteAudio:YES];

カメラのオン・オフ

Android
iOS
// カメラを開き、イン・アウトカメラとレンダリングコントロールを指定
mTRTCCloud.startLocalPreview(isFrontCamera, videoView);
// カメラをオフにする
mTRTCCloud.stopLocalPreview();
// カメラを開き、イン・アウトカメラとレンダリングコントロールを指定
[self.trtcCloud startLocalPreview:self.isFrontCamera view:self.videoView];
// カメラをオフにする
[self.trtcCloud stopLocalPreview];

スピーカーとハンズフリーの切り替え

Android
iOS
// スピーカーに切り替える
mTRTCCloud.getDeviceManager().setAudioRoute(TXDeviceManager.TXAudioRoute.TXAudioRouteEarpiece);
// ハンズフリーに切り替える
mTRTCCloud.getDeviceManager().setAudioRoute(TXDeviceManager.TXAudioRoute.TXAudioRouteSpeakerphone);
// スピーカーに切り替える
[[self.trtcCloud getDeviceManager] setAudioRoute:TXAudioRouteEarpiece];
// ハンズフリーに切り替える
[[self.trtcCloud getDeviceManager] setAudioRoute:TXAudioRouteSpeakerphone];

カメラの切り替え

Android
iOS
// 現在がインカメラかどうかを判断
boolean isFrontCamera = mTRTCCloud.getDeviceManager().isFrontCamera();
// 前後カメラの切り替え、true: :インカメラに切り替える、; false: :アウトカメラに切り替える
mTRTCCloud.getDeviceManager().switchCamera(!isFrontCamera);
// 現在がインカメラかどうかを判断
BOOL isFrontCamera = [[self.trtcCloud getDeviceManager] isFrontCamera];
// 前後カメラの切り替え、true: :インカメラに切り替える、; false: :アウトカメラに切り替える
[[self.trtcCloud getDeviceManager] switchCamera:!isFrontCamera];

ウィンドウサイズの切り替え

Android
iOS
// ローカルプレビュー画面のレンダリングコントロールを更新
mTRTCCloud.updateLocalView(previewView);
// リモートユーザーのビデオレンダリングコントロールを更新
mTRTCCloud.updateRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, previewView);
// ローカルプレビュー画面のレンダリングコントロールを更新
[self.trtcCloud updateLocalView:self.previewView];
// リモートユーザーのビデオレンダリングコントロールを更新
[self.trtcCloud updateRemoteView:self.previewView streamType:TRTCVideoStreamTypeBig forUser:self.userId];

ネットワーク状態の提示

Android
iOS
@Override
public void onNetworkQuality(TRTCCloudDef.TRTCQuality localQuality, ArrayList<TRTCCloudDef.TRTCQuality> remoteQuality) {
if (remoteQuality.size() > 0) {
switch (remoteQuality.get(0).quality) {
case TRTCCloudDef.TRTC_QUALITY_Excellent:
Log.i(TAG, "相手のネットワーク状態がとてもいい");
break;
case TRTCCloudDef.TRTC_QUALITY_Good:
Log.i(TAG, "相手のネットワーク状態が比較的良い");
break;
case TRTCCloudDef.TRTC_QUALITY_Poor:
Log.i(TAG, "相手のネットワーク状態が普通");
break;
case TRTCCloudDef.TRTC_QUALITY_Bad:
Log.i(TAG, "相手のネットワーク状態が不安定");
break;
case TRTCCloudDef.TRTC_QUALITY_Vbad:
Log.i(TAG, "相手のネットワーク状態がかなり悪い");
break;
case TRTCCloudDef.TRTC_QUALITY_Down:
Log.i(TAG, "相手のネットワーク状態が極めて悪い");
break;
default:
Log.i(TAG, "未定義");
break;
}
}
}
#pragma mark - TRTCCloudDelegate
- (void)onNetworkQuality:(TRTCQualityInfo *)localQuality remoteQuality:(NSArray<TRTCQualityInfo *> *)remoteQuality {
if (remoteQuality.count > 0) {
switch(remoteQuality[0].quality) {
case TRTCQuality_Unknown:
NSLog(@"未定義");
break;
case TRTCQuality_Excellent:
NSLog(@"相手のネットワーク状態がとてもいい");
break;
case TRTCQuality_Good:
NSLog(@"相手のネットワーク状態が比較的良い");
break;
case TRTCQuality_Poor:
NSLog(@"相手のネットワーク状態が普通");
break;
case TRTCQuality_Bad:
NSLog(@"相手のネットワーク状態が不安定");
break;
case TRTCQuality_Vbad:
NSLog(@"相手のネットワーク状態がかなり悪い");
break;
case TRTCQuality_Down:
NSLog(@"相手のネットワーク状態が極めて悪い");
break;
default:
break;
}
}
}
注意:
localQualityのuserIdフィールドが空の場合、ローカルユーザーのネットワーク品質評価結果を表します。
remoteQualityはリモートユーザーのネットワーク品質評価結果を表し、その結果はリモートとローカルの両方の影響を受けます。

通話時間の統計

TRTCリモートユーザーの入室時間を通話時間の統計の開始時間、ローカルユーザーの退室時間を通話時間の統計の終了時間にすることをお勧めします。
Android
iOS
// 通話開始時間
long callStartTime = 0;
// 通話終了時間
long callFinishTime = 0;
// 通話の持続時間(秒)
long callDuration = 0;
// リモートユーザー入室コールバック
@Override public void onRemoteUserEnterRoom(String userId) { callStartTime = System.currentTimeMillis(); }
// ローカルユーザー退室コールバック
@Override public void onExitRoom(int reason) { callFinishTime = System.currentTimeMillis();
callDuration = (callFinishTime - callStartTime) / 1000; }
// 通話開始時間
@property (nonatomic, assign) NSTimeInterval callStartTime;
// 通話終了時間
@property (nonatomic, assign) NSTimeInterval callFinishTime;
// 通話の持続時間(秒)
@property (nonatomic, assign) NSInteger callDuration;
// リモートユーザー入室コールバック
- (void)onRemoteUserEnterRoom:(NSString *)userId {
self.callStartTime = [[NSDate date] timeIntervalSince1970];
}
// ローカルユーザー退室コールバック
- (void)onExitRoom:(NSInteger)reason {
self.callFinishTime = [[NSDate date] timeIntervalSince1970];
self.callDuration = (NSInteger)(self.callFinishTime - self.callStartTime);
}
注意:
強制終了やネットワークの切断などの異常終了が発生した場合、クライアントでは関連する時間を統計できない可能性があります。これにより、サーバー側イベントコールバックで入退室イベントを監視し、この通話の時間を統計することができます。

詳細設定

クラウド録画

1V1オーディオ・ビデオ通話シナリオでは、多くの場合、当局の登録および後期の審査のために、通話内容を録音・録画・保存する必要があります。TRTC最新アップグレードのクラウド録画は、CSSの能力に依存せず、CSSへのリレー転送を必要とせず、TRTC内部のリアルタイム録画クラスターを使用してオーディオ・ビデオを記録し、より完全な録画体験を提供します。
シングルストリーム録画:TRTCのクラウド録画機能を通じて、部屋内の通話両者のオーディオ・ビデオストリームを独立したファイルに録画することができます。



ミックス録画:同じ部屋のすべてのオーディオ・ビデオメディアストリームを一つのファイルにミックス録画します。



説明:
TRTCクラウド録画の具体的な紹介及び利用ガイドは、TRTCクラウド録画説明を参照してください。

ビデオ顔加工エフェクト

ビデオ通話シナリオ中、顔加工は高頻度で使用される機能です。顔加工はユーザーの顔を美しくするだけでなく、いくつかのステッカーエフェクトを通じて通話のインタラクティビティーを面白くすることもできます。TRTCはTencent Effectとの統合だけでなく、同時にVolcano Beauty、FaceUnityなど、市場で主流のサードパーティー顔加工製品へのアクセスもできます。

顔加工へのアクセスの流れ





API呼び出しタイムライン





顔加工製品の比較

顔加工タイプ
顔加工効果
アクセスコスト
費用コスト
バーチャルデジタルヒューマン
対応ターミナル
基本効果は良好、高度なエフェクト、デカ目や小顔などの効果が顕著
若干低い
普通
対応
Android/iOS/PC/Flutter/Web/ミニプログラム
基本効果は良好、高度なエフェクト、デカ目や小顔などは普通
若干高い
普通
対応
Android/iOS/PC/Untiy
基本効果は良好、高度なエフェクト、デカ目や小顔などは若干良好
若干高い
若干高い
対応
Android/iOS/PC/Linux

オフラインメッセージプッシュ

オーディオ・ビデオ通話シナリオでは、通常、オフラインメッセージプッシュ機能を使用する必要があります。これにより、Appがオフラインの場合でも、着信側のユーザーが新しいメッセージを受け取ることができます。
Chatは、完全なAndroidオフラインプッシュ統合ガイドiOSオフラインプッシュ統合ガイドを提供しています。主な手順は以下の通りです。
Androidオフラインプッシュ
iOSオフラインプッシュ
1. アプリケーションをプッシュプラットフォームに登録。
2. IMコントロールパネルを設置。
3. オフラインプッシュのジャンプ画面を設置。
4. ベンダーのプッシュルールを設置。
5. ベンダーのプッシュSDKを統合。
6. フロントエンドとバックエンドの状態同期。
7. オフラインプッシュメッセージを送信。
8. オフラインプッシュメッセージを解析。
1. APNs/VoIP Push証明書を申請。
2. 証明書をIMコントロールパネルにアップロード。
3. アプリがAppleのバックエンドにtokenをリクエスト。
4. IM SDKにログイン後、tokenをTencent Cloudにアップロード。
5. オフラインプッシュメッセージを送信。
6. オフラインプッシュメッセージを解析。

プランに含まれる製品

システムレベル
製品名
シナリオ用途
アクセス層
低遅延、高品質のオーディオ・ビデオリアルタイムインタラクションソリューションを提供することは、オーディオ・ビデオ通話シナリオの基本的な基盤能力です。
アクセス層
シグナル伝送において高い信頼性と安定性を提供し、カスタムメッセージの送受信を実現し、オーディオ・ビデオ通話シナリオの通話シグナル制御を実現します。
アクセス層
顔加工、フィルター、美容メイク、趣味ステッカー、Moji絵文字、バーチャルキャラクターなどのリアルタイムエフェクト処理機能を提供します。
クラウドサービス
オーディオ・ビデオメディアに対して、制作・アップロード、保存、トランスコード、MPS、メディアAI、再生デリバリー、著作権保護などの一体化された高品質メディアサービスを提供します。
データストレージ
オーディオ・ビデオ録画ファイル、音オーディオ・ビデオクリップファイルのストレージサービスを提供します。


ヘルプとサポート

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

フィードバック