Meet eCDN On-Premises API を使用する

このページでは、Google Meet ライブ ストリーミングで Google Meet エンタープライズ コンテンツ配信ネットワーク(eCDN)On-Premises API を使用する方法について説明します。

ここで説明する API ソリューションを使用すると、お客様はプライベート IP 情報を Google に公開することなく、Meet eCDN のすべての機能を使用できます。 プライベート IP アドレス情報の代わりに ID を渡す、新しいオンプレミス ウェブサービスを独自のネットワークで定義できます。

Meet eCDN の概要

eCDN は Meet に組み込まれており、Google Workspace 管理者が設定すると、ライブ ストリーミング中に自動的に開始されます。Meet eCDN を有効にすると、ローカル ネットワーク内のライブ ストリーミング視聴者は、ピアツーピア(P2P)共有を通じて、ライブ ストリーミング メディアをネットワーク内の他のピアと共有できます。ほとんどのデバイスは、近くのピアからライブ ストリーミング メディアを受信するため、Google のサーバーから取得する必要はありません。これにより、視聴者が使用する合計帯域幅が削減されます。Meet eCDN の設定と使用について詳しくは、大規模なライブ ストリーミングをホストするをご覧ください。

eCDN では、Meet ライブ ストリーミングの視聴者をピアリング グループに分類する必要があります。ピアリング グループは、メディアを相互に共有できるノードの集まりです。ピアリング グループ内のデバイスは、ピアリングが許可されるか、ピアリングがブロックされます。許可されたデバイスは、同じピアリング グループ内の他のデバイスにのみ接続できます。ピアリング グループについて詳しくは、 大規模なライブ ストリーミングをホストする前にをご覧ください。

API を使用するケース

eCDN は、randomsubnetcustom rules など、いくつかの異なるピアリング ポリシーを使用してピアリング グループを形成できます。後者は、各ピアノードのプライベート IP アドレスをピアリング グループにマッピングするために、プライベート ネットワーク範囲のテーブルを Google の eCDN トラッカー サーバーと共有します。custom rules ポリシーは推奨されるソリューションであり、ほとんどの本番環境に適しています。

ただし、custom rules ポリシーでは、プライベート ネットワーク構造の大部分を Google と共有する必要があります。また、個々のユーザーは、eCDN の使用中にローカルで検出されたプライベート IP アドレスを Google に公開します。組織によっては、セキュリティ ガイドラインでプライベート IP 情報の共有が許可されない場合があります。

Meet eCDN On-Premises API を使用して開発する

Meet eCDN On-Premises API は、組織のネットワークにローカルで実装してホストできるウェブサーバー仕様を提供します。API と互換性のあるカスタム ウェブサービスを構築して、プライベート IP 情報に依存するすべてのタスクを実行できるため、情報は Google と共有されません。

この API は、通常 eCDN トラッカー サーバーによって処理される、プライベート IP アドレスのマッチングの 2 つの重要なステップを包含しています。プライベート IP アドレス をピアリング グループにマッピングすることと、Session Description Protocol (SDP)のオファーとアンサーのデータ交換です。

ウェブサービスが完成したら、管理コンソールOn-premises serviceピアリング ポリシーを使用するように構成し、カスタム ウェブサービスの URL を含める必要があります。

要件

組織でこれらの要件を有効にする必要がある場合は、Google Workspace 管理者にお問い合わせください。

  • HTTPS を使用するウェブサーバーであれば、この API を実装できます。

  • 混合コンテンツのエラーを防ぐには、HTTPS を使用します。

  • JSON データを受け入れて返します。ブラウザでサポートされているコンテンツ エンコードを使用します。

  • /vn ルートでエンドポイントを提供します。ここで n は選択した API バージョンです。例: /v1/get-peering-group

  • Meet ライブ ストリーミングの視聴者は、Google 管理コンソールでウェブサービスの URL を確認できます。URL は、組織全体、組織部門ごと、またはグループごとに設定できます。視聴者が割り当てられたサービスのインスタンスに接続できることを確認してください。詳しくは、 管理コンソールを構成するをご覧ください。

  • サービスは 2 秒以内にレスポンスを返す必要があります。そうしないと、eCDN クライアントがシャットダウンし、視聴者は通常の eCDN 以外のユーザーとしてライブイベントを視聴し続けるため、帯域幅を節約できません。

  • サービスは、次のクロスオリジン リソース シェアリング(CORS)ヘッダーを設定する必要があります。

    • Access-Control-Allow-Origin: meet.google.com
    • Access-Control-Allow-Headers: GET, POST, OPTIONS
    • Access-Control-Allow-Credentials: true

プライベート IP アドレスをピアリング グループにマッピングする

eCDN クライアントは、eCDN トラッカー サーバーに再接続しようとするたびに呼び出しを行います。デバイスがプライベート IP アドレスを検出したら、そのアドレスを適切なピアリング グループにマッピングする必要があります。プライベート IP アドレスをネットワーク上のサーバーに送信し、get-peering-group() メソッドを使用してピアリング グループに手動で解決する必要があります。レスポンスでピアリング グループ ID が返されます。 Google と通信する場合、プライベート IP アドレスの代わりに、結果のピアリング グループ ID が渡されます。

プライベート IP アドレスがピアリング グループにマッピングされる方法。
図 1.プライベート IP アドレスをピアリング グループにマッピングする。

次のコードサンプルは、get-peering-group() メソッドの呼び出し方法と、考えられるエラー レスポンス、想定されるレスポンス本文を示しています。

POST /v1/get-peering-group
Content-Type: application/json

Request body:
{
  "availableIPs": []{
    "format": "ipv4"|"ipv6",
    "address": "DETECTED_ADDRESS"
  }
}

Error response:
{
  "result": null,
  "error": "ERROR_MESSAGE"
}

Response body:
{
  "allowed": boolean,
  "result": string,
  "error": null
}

次の表に、想定されるレスポンス形式を示します。

HTTP ステータス エラー 許可 結果 クライアントの反応
200 null true 空でない文字列 クライアントは指定されたピアリング グループに分類され、eCDN トラッカー サーバーへの接続に進みます。
200 null false 空でない文字列 クライアントは指定されたピアリング グループによってブロックされたものとしてマークされ、Meet 品質管理ツール(MQT)に表示され、eCDN セッションを終了します。
200 null 空の文字列 クライアントは eCDN セッションを終了します。
200 空でない文字列 クライアントは eCDN セッションを終了します。
302(検出) クライアントは、レスポンス本文の Location ヘッダーで指定された新しい URL にリダイレクトされます。
その他のステータス コード クライアントは eCDN セッションを終了します。

従来のレスポンス形式

allowed フィールドは、以前のバージョンのレスポンス形式には含まれていませんでした。代わりに、result の特別な予約値によって、視聴者の IP アドレスがピアリングからブロックされるかどうかが決まります。

Legacy response body:
{
  "result": string,
  "error": null,
}

レスポンス メッセージで allowed フィールドが設定されていない場合の想定されるレスポンス形式を次の表に示します。

HTTP ステータス エラー 結果 クライアントの反応
200 null 空でない文字列 クライアントはピアリング グループに分類され、eCDN トラッカー サーバーへの接続に進みます。
200 null NOT_FOUND クライアントは eCDN セッションを終了します。
200 null BLOCKED クライアントは eCDN セッションを終了します。
200 空でない文字列 クライアントは eCDN セッションを終了します。
302(検出) クライアントは、レスポンス本文の Location ヘッダーで指定された新しい URL にリダイレクトされます。
その他のステータス コード クライアントは eCDN セッションを終了します。

SDP のオファーとアンサーのデータ交換

WebRTC 接続を開始するには、デバイスはプライベート IP 情報を含む SDP のオファーとアンサー(Interactive Connectivity Establishment(ICE)候補を含む)を交換する必要があります。これは、WebRTC シグナリング プロセスの一部として行われます。

クライアントは、Meet eCDN On-Premises API を使用して、ネットワーク内の ICE 候補を encrypt-sdp() メソッドで暗号化する必要があります。このメソッドは、Google に公開されない鍵を使用します。暗号化された SDP オファーは、eCDN トラッカー サーバーを使用してピアに送信されます。クライアント ピアは、decrypt-sdp() メソッドを使用して、受信した情報をネットワーク内で復号します。その後、Google は接続されたピア間でオファーとアンサーを転送します。

Meet eCDN On-Premises API を使用して接続が確立されると、eCDN は通常どおり動作します。ピアは通常のピアリング ネットワークを介してメディアをルーティングし、メディア トラフィックは API を通過したり使用したりしません。

SDP オファーとアンサーのデータの暗号化と復号の方法。
図 2.SDP のオファーとアンサーのデータを暗号化および復号する。

次のコードサンプルは、encrypt-sdp() メソッドの呼び出し方法と、考えられるエラー レスポンス、想定されるレスポンス本文を示しています。

POST /v1/encrypt-sdp
Content-Type: application/json

Request body:
{
  "data": "SDP_DATA"
},

Error response:
{
  "result": null,
  "error": "ERROR_MESSAGE"
}

Response body:
{
  "result": "ENCRYPTED_DATA_STRING",
  "error": null
}

次のコードサンプルは、decrypt-sdp() メソッドの呼び出し方法と、考えられるエラー レスポンス、想定されるレスポンス本文を示しています。

POST /v1/decrypt-sdp
Content-Type: application/json

Request body:
{
  "data": "ENCRYPTED_DATA_STRING"
},

Error response:
{
  "result": null,
  "error": "ERROR_MESSAGE"
}

Response body:
{
  "result": "SDP_DATA",
  "error": null
}

次の表に、想定されるレスポンス形式を示します。

HTTP ステータス エラー ピアリング グループ ID クライアントの反応
200 null 空でない文字列 クライアントは、適切にエンコードまたはデコードされた SDP データが使用されることを想定しています。
200 空でない文字列 null クライアントは eCDN セッションを終了します。
302(検出) クライアントは、レスポンス本文の Location ヘッダーで指定された新しい URL にリダイレクトされます。
その他のステータス コード 任意の値 任意の値 クライアントは eCDN セッションを終了します。

管理コンソールを構成する

Meet eCDN On-Premises API を使用するには、 管理コンソールで eCDN を構成して、 カスタム ウェブサービスの URL を含める必要があります。

eCDN を設定するには、On-premises service を使用してピアリング ポリシーを作成し、IP 情報をピアリング グループに手動で照合します。デフォルトの 443 を使用していない場合は、ポート番号を含めることもできます。URL は WEB_SERVICE.example.com:8080 の形式にする必要があります。ここで、WEB_SERVICE はウェブサービス名です。

ピアリング ポリシーの設定について詳しくは、ネットワーク グループを構成するをご覧ください。