このドキュメントでは、主に、ルーム内の他のユーザーのオーディオビデオストリームのサブスクリプション方法、つまり、他のユーザーのオーディオビデオの再生方法を紹介します。以下のドキュメントでは、便宜上、「ルーム内の他のユーザー」をまとめて「リモートユーザー」と呼びます。
SDKのプロジェクトへのインポートを参照して、SDKのインポートおよびApp権限の設定を完了します。
TRTCCloudのsetDefaultStreamRecvModeインターフェースを呼び出して、サブスクリプションモードを設定できます。TRTCは2つのサブスクリプションモードを提供します:
注意:SDKのデフォルトの動作は、自動サブスクリプションであるので、setDefaultStreamRecvModeを呼び出さなくても問題ないことに注意してください。ただし、手動サブスクリプションに設定した場合は、setDefaultStreamRecvModeがenterRoomの前に呼び出された場合にのみ有効であることに注意してください。
入室を参照して現在のユーザーが入室します。正常に入室した後のみ、他のユーザーのオーディオビデオストリームをサブスクリプションできます。
インターフェイスmuteRemoteAudio("denny",true)を呼び出すことにより、リモートユーザーdennyの音声をミュートできます。次に、インターフェイスmuteRemoteAudio("denny",false)を呼び出すことにより、リモートユーザーdennyのミュートを解除できます。
// Mute user with id denny
mCloud.muteRemoteAudio("denny", true);
// Unmute user with id denny
mCloud.muteRemoteAudio("denny", false);
インターフェースstartRemoteViewを呼び出すことにより、リモートユーザーのビデオ画面を再生できますが、ユーザーのビデオ画面を運ぶためのレンダリングコントロールとして使用されるビューオブジェクトをSDKに渡す必要があることが前提です。
startRemoteViewの最初のパラメータはリモートユーザーのuserId、2番目のパラメータはリモートユーザーのストリームタイプ、3番目のパラメータは渡す必要のあるviewオブジェクトです。2番目のパラメータstreamType(ストリームタイプ)には、次の3つのオプション値があります。
stopRemoteViewインターフェースを呼び出すことにより、1つのリモートユーザーのビデオの再生を停止できます。また、stopAllRemoteViewインターフェースを介してすべてのリモートユーザーのビデオの再生を停止できます。
// dennyのカメラ画面(「ビッグストリーム」と呼ばれる)を再生します
mCloud.startRemoteView("denny", TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG,cameraView);
// dennyの画面共有画面(「サブストリーム」と呼ばれる)を再生します
mCloud.startRemoteView("denny", TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SUB,screenView);
// 低解像度画面(ビッグストリームと低解像度の両方から1つのみ選択できる)を再生します
mCloud.startRemoteView("denny", TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL,cameraView);
// dennyのカメラ画面の再生を停止します
mCloud.stopRemoteView("denny", TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG,cameraView);
// すべてのビデオ画面の再生を停止します
mCloud.stopAllRemoteView();
updateRemoteViewインターフェースを呼び出すことにより、再生中にviewオブジェクトを変更できます。これは、ビデオレンダリングコントロールを切り替えるときに役立ちます。
setRemoteRenderParamsを使用すると、画面の塗りつぶしモード、回転角度、イメージモードを設定できます。。
// dennyのビッグストリーム画面を小さなフローティングウィンドウに切り替えます(ミニウィンドウがminiFloatingViewである場合)
mCloud.updateRemoteView("denny", TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG,miniFloatingView);
// リモートユーザーdennyのビッグストリーム画面を塗りつぶしモードに設定し、左右のイメージモードを有効にします
TRTCCloudDef.TRTCRenderParams param = new TRTCCloudDef.TRTCRenderParams();
param.fillMode = TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL;
param.mirrorType = TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_DISABLE;
mCloud.setRemoteRenderParams("denny", TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG,param);
手順4と手順5では、リモートユーザーへのオーディオビデオの再生を制御できますが、十分な情報がないと以下を知ることができません:
この問題を解決するために、SDKからのいくつかのイベントコールバックを監視してください:
オーディオ状態変化通知(onUserAudioAvailable)
リモートユーザーがマイクをオンまたはオフにしたときに、onUserAudioAvailable(userId,boolean)を監視することにより、この状態の変化を検知できます。
ビデオ状態変化通知(onUserVideoAvailable)
リモートユーザーがビデオ画面をオンまたはオフにしたときに、onUserVideoAvailable(userId,boolean)を監視することにより、この状態の変化を検知できます。
リモートユーザーが画面共有画面をオンまたはオフにしたときに、onUserSubStreamAvailable(userId,boolean)を監視することにより、この状態の変化を検知できます。
ユーザーの入退室の通知(onRemoteUserEnter/LeaveRoom)
リモートユーザーが現在のルームに入るとき、onRemoteUserEnterRoom(userId)を介してユーザーのuserIdを検知できます。リモートユーザーが現在のモードを離れるとき、onRemoteUserLeaveRoom(userId, reason)を介してこのユーザーのuserIdと離れる理由を検知できます。
注意:正確にいえば、onRemoteUserEnter/LeaveRoomは、キャスターをロール(role)とするユーザーの入退室通知のみを検知できます。このように設計する理由は、ルーム内のオンライン視聴者が多い場合に、頻繁に入退室する人がいるため、ルーム内のすべてのユーザーが他のユーザーの「シグナルストーム」によって攻撃されることを回避します。
これらのイベントコールバックを使用すると、ルームにいるユーザーと、カメラとマイクをオンにしたかどうかを知ることができます。次のサンプルコードを参照してください。このサンプルコードでは、mCameraUserList、mMicrophoneUserList、およびmUserListを使用してそれぞれ以下を個別に管理します。
// リモートユーザーのビデオ状態の変化を検知し、カメラをオンにしたユーザーリストを更新します(mCameraUserList)
@Override
public void onUserVideoAvailable(String userId, boolean available) {
available?mCameraUserList.add(userId) : mCameraUserList.remove(userId);
}
// リモートユーザーのオーディオ状態の変化を検知し、マイクをオンにしたユーザーリストを更新します(mMicrophoneUserList)
@Override
public void onUserAudioAvailable(String userId, boolean available) {
available?mMicrophoneUserList.add(userId) : mMicrophoneUserList.remove(userId);
}
// リモートユーザーの入室通知を感知し、リモートユーザーリストを更新します(mUserList)
@Override
public void onRemoteUserEnterRoom(String userId) {
mUserList.add(userId);
}
// リモートユーザーの退室通知を感知し、リモートユーザーリストを更新します(mUserList)
@Override
public void onRemoteUserLeaveRoom(String userId,int reason) {
mUserList.remove(userId);
}
サービスニーズの成長につれて、3種類の「ミュート」があり、それらはすべて「ミュート」と呼ばれますが、カウントの原則は完全に異なります。
1番目:再生側はオーディオストリームのサブスクリプションを停止します
muteRemoteAudio("denny", true)関数を呼び出す場合、リモートユーザーdennyの音声を再生したくないことを意味し、このとき、SDKはdennyのオーディオデータストリームのプルを停止します。このモードでは、より多くのトラフィックを節約します。そのとき、dennyの音声をもう一度再生したい場合、SDKはオーディオデータのプルプロセスを再開する必要があるため、「ミュート」から「ミュート解除」への回復速度が遅くなります。
2番目:再生ボリュームをゼロに調整します
サービスシーンでミュート切り替えの応答時間を短縮する必要がある場合、setRemoteAudioVolume("denny", 0)を使用して、リモートユーザーdennyの再生ボリュームをゼロに設定できます。このインターフェースにはネットワーク操作が含まれないため、応答速度が非常に速くなります。
3番目:リモートユーザーが自分でマイクをオフにします
このドキュメントで説明されているすべての操作は、再生側の操作に対するものです。これらの操作の効果は、現在のユーザーにのみ有効です。たとえば、muteRemoteAudio("denny", true)を使用して、リモートユーザーdennyをミュートできますが、ルーム内の他のユーザーは依然として、dennyの音声を聞くことができます。
Dennyを完全に「シャットダウン」する場合、dennyのオーディオリリース動作に影響を与える必要があります。これについては、次のドキュメントオーディオビデオストリームのリリースで詳しく紹介します。
この記事はお役に立ちましたか?