設定可能なTURNサーバー
概要
- この機能は アドオン機能.
- Client SDK: あなたの アプリID はあなたの APIキー.
セッション内の各クライアントに対して、以下の方法でTURNサーバーの使用方法をカスタマイズすることができます:
クライアントが使用するTURNサーバーのリストを追加することができます。
クライアントがお客様の TURN サーバーを独占的に使用するか、または Vonage TURN サーバーに加え Vonage TURN サーバーに加え
独自のTURNサーバーを追加することで、以下のような制限のあるネットワーク環境でもユーザーが接続できるようになります。 Vonage TURNサーバーはブロックされる可能性があります。
Vonage TURNサーバーをオーバーライドし、独自のTURNサーバーのみを使用することを選択した場合、以下のことが可能です。 メディアストリームがネットワークを離れることがないようにすることができます。
OpenTok.js(ウェブクライアント用)、iOS SDKまたはAndroid SDKを使用して、セッションに接続する各クライアントに独自のTURNサーバーを追加できます。 (ウェブクライアント用)、iOS SDK、またはAndroid SDKを使用します。カスタムTURNサーバーAPI はこれらのクライアントSDKのバージョン2.13.0で追加されました。
また IPプロキシ アドオン機能で 独自のプロキシサーバーを使用して ノンメディア Video APIコールなどのトラフィック、 WebSocket 接続、ログ・トラフィックなど。
OpenTok.js (v2.13.0+)
について options パラメーターの OT.initSession() メソッドには、文書化されていない iceConfig
プロパティを含む。このプロパティには以下のプロパティが含まれる:
includeServers(String) - 以下のように設定する。'custom'で提供されたカスタム TURNサーバーを使用します。customServers配列に設定します。これを'all'(デフォルト)と クライアントは、Vonage TURNサーバーとともに、提供されたカスタムTURNサーバーの両方を使用します。transportPolicy(String) - 以下のように設定する。'all'(デフォルト)、クライアントは すべてのICEトランスポートタイプ(host、srflx、TURNなど)を使用してメディア接続を確立します。設定 これを'relay'TURN経由での接続を常に強制し、他のすべてのICE候補を無視する。 候補を無視する。customServers(Array) - カスタム TURN サーバーを定義するオブジェクトの配列を設定します。 各オブジェクトは1つのカスタムTURNサーバーに対応し、以下のプロパティを含みます:urls(文字列または文字列の配列) - 文字列または文字列の配列。 は、TURNサーバーがサポートするURLである(URLは1つだけである場合もある)。username(String) - このオブジェクトで定義されているTURNサーバーのユーザー名。credential(String) - このオブジェクトで定義されたTURNサーバーのクレデンシャル文字列。 オブジェクトで定義されている
注: クライアントが指定したTURNサーバのみを使用するようにするには(Vonage TURNサーバを使用しないようにするには
VonageのTURNサーバーは使用しない)。 includeServers プロパティ 'custom'を設定する。
transportPolicy プロパティ 'relay'を設定する。 customServers プロパティで
TURNサーバーをリストアップします。
カスタムTURN認証情報を動的に更新するには Session.setIceConfig() メソッドを使用する。
次の例は、クライアントにTURNサーバーを設定する方法を示している:
const session = OT.initSession(projectId, sessionId, {
iceConfig: {
includeServers: 'custom',
transportPolicy: 'relay',
customServers: [
{
urls: [
'turn:123.124.125.126:3478?transport=udp',
'turn:123.124.125.126:3478?transport=tcp'
],
username: 'webrtc',
credential: 'foO0Bar1'
},
{
urls: [
'turns:turntls.example.com:3478?transport=tcp'
],
username: 'webrtc',
credential: 'foO0Bar2',
},
],
},
});
アンドロイドSDK
について Session.Builder クラスには、クライアントのTURNサーバーの使い方を設定するための2つのメソッドがあります:
Session.Builder.setCustomIceServers()- このメソッドをコールして、クライアントのカスタムTURN サーバーのリストを追加します。Session.Builder.setIceRouting()- このメソッドを呼び出して、クライアントのICE オプションを追加します。
つの新しいメソッドに加えて、2つの新しい列挙型がTURNサーバーのオプションを定義している:
IncludeServers- カスタムサーバのみ、またはVonageサーバとカスタムサーバの両方を使用するオプションを含みます。 Vonageサーバーとカスタムサーバーの両方を使用するオプションが含まれています。TransportPolicy- 使用するルーティング方法を記述する。
注: クライアントが指定したTURNサーバのみを使用するようにするには(Vonage TURNサーバは使用しない セッションオブジェクトを作成するために使用する Session.Builder オブジェクトの以下のメソッドを呼び出します。 オブジェクトの以下のメソッドを呼び出します:
setCustomIceServers()- IceServer オブジェクトのリストを渡す。 (カスタム TURN サーバーに対応) のリストをserverListパラメータに を渡すIncludeServers.TURNとしてconfigパラメータが必要だ。setIceRouting()- パス・インTransportPolicy.Relay.
次の例は、クライアントにTURNサーバーを設定する方法を示している:
List<IceServer> serverList = new IceServer(
'turn:123.124.125.126:3478?transport=udp', // TURN server URL
'webrtc', // Username
'foO0Bar1' // Credential
);
mSession = new Session.Builder(this, apiKey, sessionId)
.setCustomIceServers(serverList, IncludeServers.Custom)
.setIceRouting(TransportPolicy.TURN)
.build();
mSession.setSessionListener(this);
mSession.connect(token);
iOS SDK
OTSessionオブジェクトを初期化するときに OTSessionSettings.iceConfig
プロパティを使用して、クライアントのカスタム TURN サーバー設定を定義します。
OTSessionICEConfig クラスは OTSessionSettings.iceConfig 財産である。
注: クライアントが指定したTURNサーバのみを使用するようにするには(Vonage TURNサーバを使用しないようにするには
VonageのTURNサーバーは使用しない)ようにするには [OTSessionSettings addICEServerWithURL:] メソッドの
メソッドを設定します。次に
オブジェクトの以下のプロパティを設定します:
includeServers- これを OTSessionICEIncludeServersCustom に設定します。transportPolicy- OTSessionICETransportRelayに設定する。
を設定することができます。 OTSessionICEConfig.filterOutLanCandidates プロパティは
プロパティで、中継セッションで同じローカルネットワーク上のクライアントにサブスクライブしないようにします、
これは、iOS 14+でアプリがユーザーに許可を求める結果となる。
この機能は はない。 設定可能なTURNアドオンが必要です。
詳しくは 本題.
次の例は、クライアントにTURNサーバーを設定する方法を示している:
OTSessionICEConfig *myICEServerConfiguration = [[OTSessionICEConfig alloc] init];
myICEServerConfiguration.includeServers = OTSessionICEIncludeServersCustom;
myICEServerConfiguration.transportPolicy = OTSessionICETransportForceTurn
NSError *error = nil;
[myICEServerConfiguration addICEServerWithURL:@"turn:123.124.125.126:3478?transport=udp"
userName:@"webrtc"
credential:@"foO0Bar1"
error:&error];
OTSessionSettings *settings = [[OTSessionSettings alloc] init];
settings.iceConfig = myICEServerConfiguration;
_session = [[OTSession alloc] initWithApiKey:kApiKey
sessionId:kSessionId
delegate:self
settings:settings];
Windows SDK
IceConfig クラスを使用して、クライアントが使用するカスタム ICE 構成を設定します。 を設定します。
について IceConfig() コンストラクタ・メソッドには以下のパラメータがある:
customIceServers-- クライアントが使用するカスタムTURNサーバーを表すIceServerオブジェクトのリスト。 オブジェクトのリスト。それぞれの IceServer に対して カスタムTURNサーバーのURL、ユーザー名、認証文字列を設定する。transportPolicy-- の値を設定する。ICETransportを列挙する:All-- クライアントはすべてのICE候補タイプ(ホスト、srflx、リレーなど)を使用する。 を使用してメディア接続を確立する。Relayed-- クライアントは常にTURNを介して接続を強制し、他のICE候補を無視する。 他のすべてのICE候補を無視する。
includeServers-- の値を設定する。IncludeServersを列挙する:All-- クライアントはVonage TURNサーバーを使用します。 クライアントはVonage TURNサーバーを使用します。Custom-- クライアントは、あなたが提供したカスタムTURNサーバーだけを使用します。
Session.Builder クラスには IceConfig プロパティを設定します。この
を IceConfig オブジェクトに設定します。
次の例は、クライアントに TURN サーバーを設定する方法を示しています:
macOS SDK
タイプ otc_custom_ice_config は、以下のメンバーを含む構造体を定義している:
num_ice_servers-- ICEサーバーの数ice_url-- ICEサーバーのURLを指定する文字列の配列。ice_user-- TURNサーバーのユーザー名を指定する文字列の配列。ice_credential-- TURNサーバーのクレデンシャル文字列を指定する文字列の配列。 を指定する文字列の配列。 を呼び出す。otc_session_settings_set_custom_ice_config()関数に渡して を渡します。otc_custom_ice_configインスタンスだ:
otc_session_settings_set_custom_ice_config(session_settings,
&ice_config);
次の例は、クライアントにTURNサーバーを設定する方法を示している:
// Provide the ICE configuration here.
struct otc_custom_ice_config ice_config;
ice_config.num_ice_servers = 1;
ice_config.ice_url = (char **)malloc(sizeof(char *) * ice_config.num_ice_servers);
ice_config.ice_url[0] = strdup("turn:123.124.125.126:3478?transport=udp");
ice_config.ice_user = (char **)malloc(sizeof(char *) * ice_config.num_ice_servers);
ice_config.ice_user[0] = strdup("webrtc");
ice_config.ice_credential = (char **)malloc(sizeof(char *) * ice_config.num_ice_servers);
ice_config.ice_credential[0] = strdup("foO0Bar1");
ice_config.force_turn = OTC_TRUE;
ice_config.use_custom_turn_only = OTC_FALSE;
otc_session_settings *session_settings = otc_session_settings_new();
if (session_settings != NULL) {
otc_session_settings_set_custom_ice_config(session_settings,
&ice_config);
}
otc_session *session = NULL;
session = otc_session_new_with_settings(API_KEY,
SESSION_ID,
&session_callbacks,
session_settings);
if (session == NULL) {
printf("Could not create session successfully");
return EXIT_FAILURE;
}
otc_session_connect(session, TOKEN);
Linux SDK
タイプ otc_custom_ice_config は、以下のメンバーを含む構造体を定義している:
num_ice_servers-- ICEサーバーの数ice_url-- ICEサーバーのURLを指定する文字列の配列。ice_user-- TURNサーバーのユーザー名を指定する文字列の配列。ice_credential-- TURNサーバーのクレデンシャル文字列を指定する文字列の配列。 を指定する文字列の配列。
に電話する。 otc_session_settings_set_custom_ice_config() 関数に渡して
を渡します。 otc_custom_ice_config インスタンスだ:
otc_session_settings_set_custom_ice_config(session_settings,
&ice_config);
次の例は、クライアントにTURNサーバーを設定する方法を示している:
// Provide the ICE configuration here.
struct otc_custom_ice_config ice_config;
ice_config.num_ice_servers = 1;
ice_config.ice_url = (char **)malloc(sizeof(char *) * ice_config.num_ice_servers);
ice_config.ice_url[0] = strdup("turn:123.124.125.126:3478?transport=udp");
ice_config.ice_user = (char **)malloc(sizeof(char *) * ice_config.num_ice_servers);
ice_config.ice_user[0] = strdup("webrtc");
ice_config.ice_credential = (char **)malloc(sizeof(char *) * ice_config.num_ice_servers);
ice_config.ice_credential[0] = strdup("foO0Bar1");
ice_config.force_turn = OTC_TRUE;
ice_config.use_custom_turn_only = OTC_FALSE;
otc_session_settings *session_settings = otc_session_settings_new();
if (session_settings != NULL) {
otc_session_settings_set_custom_ice_config(session_settings,
&ice_config);
}
otc_session *session = NULL;
session = otc_session_new_with_settings(API_KEY,
SESSION_ID,
&session_callbacks,
session_settings);
if (session == NULL) {
printf("Could not create session successfully");
return EXIT_FAILURE;
}
otc_session_connect(session, TOKEN);
リアクト・ネイティブSDK
について options の支柱である。 OTSession コンポーネントには iceConfig
プロパティを含む。このオブジェクトには以下のプロパティが含まれます:
includeServers(String) - 以下のように設定する。'custom'で提供されたカスタム TURNサーバーを使用します。customServers配列に設定します。これを'all'(デフォルト)と クライアントが提供するカスタムTURNサーバーとOpenTok TURNサーバーの両方を使用します。transportPolicy(String) - 以下のように設定する。'all'(デフォルト)、クライアントは すべてのICEトランスポートタイプ(host、srflx、TURNなど)を使用してメディア接続を確立します。設定 これを'relay'TURN経由での接続を常に強制し、他のすべてのICE候補を無視する。 候補を無視する。customServers(Array) - カスタム TURN サーバーを定義するオブジェクトの配列を設定します。 各オブジェクトは1つのカスタムTURNサーバーに対応し、以下のプロパティを含みます:urls(文字列または文字列の配列) - 文字列または文字列の配列。 は、TURNサーバーがサポートするURLである(URLは1つだけである場合もある)。username(String) - このオブジェクトで定義されているTURNサーバーのユーザー名。credential(String) - このオブジェクトで定義されたTURNサーバーのクレデンシャル文字列。 オブジェクトで定義されている
注: クライアントが指定したTURNサーバのみを使用するようにするには(OpenTok TURNサーバは使用しない
OpenTok TURN サーバーは使わない): TURN サーバーに includeServers プロパティ 'custom'を設定する。
transportPolicy プロパティ 'relay'を設定する。 customServers プロパティで
TURNサーバーをリストアップします。
次の例は、クライアントにTURNサーバーを設定する方法を示している:
<OTSession
applicationId="your-application-id"
sessionId="your-session-id"
token="your-session-token"
options={{
iceConfig:{
transportPolicy: 'all',
includeServers: 'all',
customServers: [
{
urls: [
'turn:123.124.125.126:3478?transport=udp',
'turn:123.124.125.126:3478?transport=tcp'
],
username: 'webrtc',
credential: 'foO0Bar1'
},
],
}
}}
>
<OTPublisher style={{ width: 600, height: 400 }}/>
<OTSubscriber style={{ width: 600, height: 400 }} />
</OTSession>
既知の問題
クライアントが常にTURNサーバーを使用するように設定した場合 中継セッションそのため は、自身のストリーム(自身がパブリッシュするストリーム) をサブスクライブできない。
よくあるご質問
設定可能なTURN APIはHTTPトラフィックの問題に対応していますか?
いいえ。設定可能なTURNは、メディア・トラフィックのみの信頼できるエンドポイントへの接続に関する顧客の懸念を払拭します。 メディア・トラフィックに限ります。
HTTPトラフィックの場合、顧客は以下のいずれかを行う必要がある:
vonageとopentokのドメイン名をホワイトリストに登録:
- *.opentok.com
- *.tokbox.com
- *.vonage.com
Vonage Video API用に提供されたIPアドレスブロックをホワイトリストに登録します。
クライアントのWebプロキシ設定を使用して、すべてのVonage HTTPSトラフィックをプロキシする をプロキシします。プロキシ要件のセクションを参照してください。 これ.
利用可能なTURNターゲット間のメディアパスはどのように選択されているのか。往復の待ち時間を考慮しているのか、ターゲットをリストアップした順番に影響されているのか、それともランダムなのか。
TURNサーバーの順番は、提供されたリストに基づいて保証されるものではありません。その代わり、メディアが流れ始めると メディアが流れ始めると、ICEの実装は、どの候補/サーバーが最良の接続性を持ち、最初にネゴシエーションに成功したかを選択する。 を選択する。
TURNサーバーのURLが複数のIPアドレスにマッピングされている場合、セッションのために特定のTURNサーバーはどのように選択されますか?これはランダムですか?
ChromeやFirefoxで使用されているものを含め、ほとんどの実装では、DNSルックアップによって返された最初のIPを使用する。 この結果、通常はランダムなラウンドロビン選択となる。
TCPとUDPの両方のTURNサーバーが提供され、到達可能な場合、UDPターゲットを優先し、必要な場合のみTCPにフォールバックすることは可能か?
UDPのリレー候補はTCPのリレー候補よりも優先される。 の方が優先される。以下を参照のこと。 RFC 8445 を参照してください。渡されたICEサーバーの順番はこれに影響しない。
1つのクライアントで、異なるストリームに異なるメディアパスを使用できますか?
Vonageは個々のメディアストリームを個別に扱うため、これは予想された動作です。
コンフィギュラブルTURN APIはメディアパスの選択においてどの程度のコントロールが可能ですか?
メディアパスの選択は、WebRTC内部のICE(Interactive Connectivity Establishment)によって処理されます。 この動作を変更する方法はない。コンフィギュラブルTURN APIは、クライアントからWebRTCに提供される は、クライアントがWebRTCに提供するICEサーバーのリストを変更するのに役立つだけで、選択プロセスには影響しない。
UDP経由でVonage Media Serverへ直接接続する方が常に好ましいですか?
はい、Vonage Media Serverへの直接接続が常に望ましいです。TURN Vonage Media Serverへの接続に失敗した場合、または "Force TURN "オプションがConfigurable TURN APIで使用された場合、TURNの使用に切り替わります。 オプションが使用されている場合です。
ロードバランシングのために、同じタイプの複数のTURNサーバーを使用できますか?
クライアントがランダムにサーバーを選ぶことになり、そのサーバーは接続期間中に変わる可能性があるため、これは推奨されません。
カスタムTURNサーバーの負荷分散方法は?
詳細はお問い合わせください。
TURNサーバーはメディアの暗号化を解除できますか?
TURNサーバーは、DTLS-SRTPを使用して交換されるSRTPキーにアクセスでき ない。 接続のエンドポイントのみが利用できる。
セッション中にTURNサーバーがクラッシュした場合の原因と復旧方法
TURNサーバーが使用中にクラッシュした場合、クライアントの接続は切断されます。 クライアントはICE再起動を使用して接続の再確立を試みます。
TURNサーバーのテスト方法は?
TURNサーバーをテストするには、次のいずれかを使用します。 トリクルアイスのテストページ または turnutils_uclient.