Epic Online Services (EOS) Voice は、ユーザーのボイス チャット ルームを作成および管理するのに役立ちます。EOS Lobbies を使って Epic のサーバー上、または独自のバックエンド サービス上に EOS Voice チャットルームをホストすることができます。さらに、このインターフェースを使用して、対戦中や製品のロビーで、複数のプラットフォーム間で一対一またはグループでコミュニケーションを取ることができます。
EOS Voice で作成される接続は、認証済みのユーザー間でのみ確立され、そのユーザーに関する個人情報を公開することなく EOS Voice サーバーを通過します。EOS は、スケーリング、サービス品質、メンテナンス、マルチリージョンでのプレゼンス、および Voice サーバーの他の機構をすべて処理します。
Voice インターフェースを使用するには EOS SDK リリース 1.13 以降が必要です。
Voice は、オンライン サブシステム (OSS) および Unreal Engine4.27 リリースの VoiceChat プラグインによって完全にサポートされます。 Linux は現在 EOS Voice でサポートされていません。
Voice インターフェースを使用するには、以下の手順に従う必要があります。
- ゲームで使用する 統合方法 をレビューして決定する
- Voice のサンプル (C および C# を調べて、製品での Voice インターフェースの使用方法を習得する
- Voice インターフェースをアプリケーションに組み込む
- クライアント ポリシー を設定する
- 選択した統合方法に基づいて Voice インターフェイスを統合します。
- Voice インターフェースの ベスト プラクティス、Voice のメトリック、および 使用上の制限事項 をレビューする
Voice の統合方法
次の 2 つの方法で Voice をアプリケーションに統合することができます。
-
Voice を Lobby で使用する:EOS SDK を ゲーム クライアント に統合し、EOS Lobbies がルームの管理と承認を行うようにする。Lobbies インターフェース を使用するのに必要なのはクライアント統合のみであり、ルームの所有、検索、および招待が提供されます。
-
信頼済みサーバー アプリケーションを使用する:EOS SDK を ゲーム クライアント に統合し、SDK または Web API を 信頼済みサーバー アプリケーションに統合します。このアプローチでは、ルームの管理と承認をカスタマイズすることでデベロッパーに最大限の柔軟性が与えられますが、統合により多くの手間が必要になります。
Voice を Lobby で使用する
Voice を Lobby で使用する場合、EOS SDK をゲーム クライアントに統合し、Lobbies に信頼できるサーバー アプリケーションの役割を引き受けさせます。ロビーは roomIds
を生成し、メンバー用の tokens
を作成し、他のプレイヤーに join
、 kick
、または mute
するリクエストを承認します。
ルームのセキュリティを確保するために、ロビーは プライベートにして招待 を必要とするようにできます。
ポリシー コンフィギュレーション
userRequired を使用してゲーム クライアントの クライアント ポリシー を構成し、以下を許可します。
- Lobbies はそのクライアントに適切なアクション (
connect
、readLobby
など) を行う - Voice は
lobbyConference
アクションを行う
createRoomToken
、mute
、および kick
は、サーバー使用のみ を目的としているため、無効のままにしておく必要があります。それ以外の場合、これによりゲーム クライアントは任意の roomId
にアクセスできます。
Lobby を使用した Voice のフロー
- ゲーム クライアント が SDK を初期化 し、
EOS_HLobby
、EOS_RTC、および EOS_RTCAudio インターフェースを取得します。 - ゲーム クライアント は Connect インターフェース を使ってローカル ユーザーを承認します。
- ゲーム クライアント は
bEnableRTCRoom
フラグを有効にしたEOS_Lobby_CreateLobby
を新規ロビーを作成します。 - そのロビーが、ルーム トークンをリクエストしてトークンとメディア サーバーの URL を返します。EOS SDK はそのトークンを使用して、ボイス ルームに参加します。
- そのロビーに参加する他のユーザーには、そのボイス会議に参加するためのルーム トークンが自動的に届きます。
- ロビーの所有者は他のプレイヤーに招待を送信することができます。パブリック ロビーには、招待されていなくても検索および参加できます。
- ロビーの所有者は、他のプレイヤーを mute または kick できます。
- すべてのクライアントで EOS_RTC と EOS_RTCAudio のインターフェースを使用して、オーディオ入出力の管理、ローカル ミュート/スピーカー ステータスの変更、およびルームの退出を行うことができます。
EOS SDK の Lobbies のサンプル で、このコンフィギュレーションの実例が示されています。
Voiceを使用してルームの管理と承認をより細かく制御するには、信頼済みサーバー アプリケーションを使用した Voice のフロー を使用できます。
信頼済みサーバー アプリケーションを使用した Voice のフロー
ポリシー コンフィギュレーション
以下の設定でサーバーに クライアント ポリシー を設定します。
userRequired を無効にして、サーバーが clientId
と clientsecret
を使って Connect インターフェース での認証できる。
- Voice で
createRoomToken
、kick
、mute
を使用すると、サーバーは任意のroomId
のプレイヤー用にルームを作成し、プレイヤーを削除してトークンを取り消して、プレイヤーをミュートにできる。
信頼済みサーバー アプリケーションを使用した Voice のフロー
- ゲーム クライアント は SDK を初期化 し、ボイス ルームに入ることを信頼済みアプリケーション (専用サーバーや Web アプリケーションなど) に要求します。
- 信頼済みサーバーは、ClientId と Client Secret を使って Connect インターフェース で認証します。
- 信頼済みサーバーは、ClientId とクライアント シークレットを使用して
RoomId
を生成し、指定されたRoomId
に対するルーム トークンを EOS Voice のバックエンドにリクエストします。- 専用サーバーと EOS SDK を使用している場合は、サーバーが SDK を初期化 し、
EOS_Platform_GetRTCAdminInterface
を呼び出してEOS_HRTCAdmin
ハンドルを取得します。このハンドルは、createRoomToken
、mute
、およびkick
で使用されます。 - Web アプリケーションの場合は、EOS Client Auth トークン を取得して、代わりに Voice Web API を使用できます。
- 専用サーバーと EOS SDK を使用している場合は、サーバーが SDK を初期化 し、
- 信頼済みサーバーが、既存の通信方法を使用して、ルーム トークンとメディア サーバーの URL を各プレイヤーのゲーム クライアント アプリケーションに返します。
- クライアントとサーバーの間の通信方法は自由に選択でき、ネットワーク レプリケーション、メッセージング、HTTP、または他の既存の通信方法で実現することができます。
- ゲーム クライアント は
EOS_RTC_JoinRoom
を使用してメディア サーバーに接続し、サーバーから提供されたトークンを使用してルームに参加します。 - 他のユーザーがそのルームに参加するには、同じルームの
ProductUserId
の Token を信頼済みサーバーに要求し、そのトークンを使用してメディア サーバーに接続します。- 指定されたルームに参加できるユーザー、およびそのルームで他のユーザーを kick または mute できるユーザーを決定するための承認方法の実装は、サーバーのロジックに任されています。この統合方法では、この側面をデベロッパーがカスタマイズできます。
- Voice サーバーのサンプルでは、ルームに参加するためのパスワード、および所有者と共有して kick や mute などの操作で指定する必要があるロックを使用する実例が示されています。
- すべてのクライアントで EOS_RTC と EOS_RTCAudio のインターフェースを使用して、オーディオ入出力の管理、ローカル ミュート/スピーカー ステータスの変更、およびルームの退出を行うことができます。
EOS SDK の Voice クライアントと Voice サーバーのサンプル ((C と C#) では、このコンフィギュレーションの実例が示されています。
RTC インターフェースのハンドル
RTC 機能で使用できる 3 つのインターフェース ハンドルがあり、Platform インターフェース から取得できます。
EOS_HRTCAdmin
ハンドル
- Voice バックエンドは、ロビーによって管理される音声ルームを、デベロッパー サーバーによって管理される音声ルームとは別に保持します。Voice バックエンドは、ロビーによって管理される音声ルームを、デベロッパー サーバーによって管理される音声ルームとは別に保持します。つまり、ロビー会議の参加者をキックしたりハードミュートしたりするなどの機能は、
EOS_HRTCAdmin
インターフェイスでは実行できず、Lobbies インターフェース のみで実行可能です。 - ルーム トークンの作成、kick、mute などの管理機能で使用されます。
- 信頼済みサーバー アプリケーションでのみ使用します。ゲーム クライアントや共有コミュニティ サーバーで使用してはいけません。
EOS_Platform_GetRTCAdminInterface
を使用して取得します。
EOS_HRTC
ハンドル
EOS_HRTC
のサブインターフェースであり、ボイス特有の機能で使用されます。EOS_RTC_GetAudioInterface
を使用してEOS_HRTC
ハンドルから取得できます。
EOS_HRTCAudio
ハンドル
EOS_HRTC
の音声固有のサブ インターフェース。EOS_RTC_GetAudioInterface
を使用してEOS_HRTC
ハンドルから取得できます。
Voice インターフェースを Windows に実装する
Windows の場合、プラットフォームを作成する前に、プラットフォーム インターフェースの RTCOptions
に EOS_Windows_RTCOptions
を渡す必要があります。
C SDK のサンプル (以下にコードの断片をコピーしますが、詳細は「Voice インターフェース - C SDK」ページをご覧ください) は、Windows の場合、次のように動作します。
WindowsRtcOptions
をいう名前のEOS_Windows_RTCOptions
クラスのインスタンスを作成する- 属性を構成する
- RtcOptions.PlatformSpecificOptions
の値を
WindowsRtcOptions` のアドレスに指定する
C SDK の Windows 用サンプルコードです。
ベスト プラクティス
双方向ミュート
プラットフォームのさまざまな要件 (ブロックリストなど) を満たすために、以下を使用する必要があります。
必要に応じてプレイヤーの双方向ミュートを実装するための EOS_RTC_BlockParticipant
。
ペアレンタル コントロール
セッションで Voice を有効にする前に、ペアレンタル コントロールの設定の確認を検討してください。
使用上の制限事項
Voice にはインターフェース特有の使用率の制限があります。スロットリング、使用量制限、およびベスト プラクティスに関する全般的な情報については、「サービス使用上の制限事項」を参照してください。
機能 | サービスの制限事項 |
---|---|
最大ルーム サイズ | 16 |
1 分あたりでユーザーあたりの最大リクエスト数 | 50 |
Voice のメトリック
過去 30 日間の デベロッパー ポータル の [Your Product] > [Game Services] > [Voice] で、自身の Voice 運用メトリックにアクセスすることができます。
時間間隔 (5 分間、30 分間、1 時間、1 日間、7 日間、14 日間、30 日間など) およびプラットフォーム (Windows、PS4、PS5 など) でフィルタリングすることができます。
Voice サービスの使用を開始すると、データがグラフに自動的に入力るので、追加の設定は必要ありません。
以下のメトリックがあります。
- Connected Users per Platform (プラットフォームごとの接続ユーザー数): 選択されている時間枠内で Voice サービスに接続していたプレイヤーの数 (プラットフォーム別)。
- Voice Users Status (Voice ユーザーのステータス): Voice SDK のステータスの詳細 (接続済み、エラー、接続解除済み、など)。
- Join Room (ルーム参加): 全体的なユーザー参加エラー率。
- Join Room Errors (ルーム参加のエラー数): 特定のルーム参加エラー数とそのエラー率に関する詳細情報。
- Room Sizes (ルーム サイズ): すべてのプラットフォームにわたる、参加者数に基づくルーム サイズの分布。
- Errors (エラー数): エラー数とそのエラー率に関する詳細情報。