Kinesis Video Streams with WebRTC を解説!Zoomのようなリアルタイム通信ができる⁉︎😎

Kinesis Video Streams with WebRTC を解説!Zoomのようなリアルタイム通信ができる⁉︎😎

こんにちは!

今回は Kinesis Video Streams with WebRTC (以下、WebRTC)の解説と実際にやってみた系の記事となります。ぜひ参考にしてください。

想定する読者

  • WebRTC を使ってみたいヒト
  • Kinesis Video Streams with WebRTC が気になるヒト
  • Kinesis Video Streams with WebRTC の概要を知りたいヒト

はじめに

Kinesis Video Streams には動画を収集し分析する機能と、WebRTC の機能、合わせて2つの用途があります。今回は、リアルタイム通信で Zoom のような Web 会議を行いたい場合に利用する WebRTC について解説していきます。

サンプルアプリ

AWS の公式には WebRTC の動作を確認できるサンプルページがあります。まずどんな風に動くのか気になる方は、こちらから動作を確認してみてください。

https://awslabs.github.io/amazon-kinesis-video-streams-webrtc-sdk-js/examples/index.html

リージョン、認証情報、チャンネル名(適当でOK)を入力したら、ページの最下部あたりにある「Create Channel」をクリックしたあとに「Start Master」をクリックして確認してみましょう。

このような画面に移動します
マスキングしている部分はAWSのアカウントID、赤枠はチャンネルIDとなります。

Master が入室したら、次は同じアカウントの別の IAM ユーザーで、同じリージョン、チャンネル名を設定し、別の IAM ユーザーの認証情報と上記画像にあるようなチャンネル ID を設定してから、「Start Viewer」を選択して入室します。

Master と Viewer が同じ端末になるため、同じ映像が流れている状況です
かなりマスキングしておりますが、若干見えている下の部分で同じ映像が流れていることがわかります

これにより WebRTC の使用感がわかります。作成したチャンネルはご自身の AWS アカウントに作成されています。Kinesis Video Streams のコンソール画面を確認してください。

シグナリングチャンネルが WebRTC の部分になります

WebRTC とは?

WebRTC は、簡易な API を経由してブラウザとモバイルアプリケーションとの間でリアルタイム通信 (RTC) ができるようにするためのオープンテクノロジー仕様です。接続されたピア同士でデータ交換をリアルタイムで行うためにピアリング技術を活用し、人間同士の通信に要するメディアストリーミングのレイテンシーを低くします。

https://aws.amazon.com/jp/kinesis/video-streams/faqs/?nc=sn&loc=5

つまり、ウェブブラウザ間で Zoom のような Web 会議ができるようになります。Kinesis Video Streams においては、WebRTC のシグナリングのためのマネージド型エンドポイントを提供しています。

Kinesis Video Stream with WebRTC に関する用語の解説

WebRTC には様々な用語が登場します。そのためそれぞれの言葉の定義を事前に理解した上で、ドキュメントを読むことがいち早くキャッチアップすることに繋がります。ここでは登場する各用語を解説していきます。

引用元: Choose the right AWS video service for your use case

シグナリングチャンネル

アプリケーションが P2P 接続をセットアップおよび制御ができるリソースを指します。

Master

接続の開始者を指します。

Viewer

Master が開始した接続への参加者を指します。

Session Traversal Utilities for NAT (STUN)

パブリックアドレスを検出し、ピアとの直接接続を妨げるルーターの制限を判別するために使用されるプロトコルです。

Traversal Using Relays around NAT (TURN)

TURN サーバーとの接続を開き、そのサーバーを介してすべての情報を中継することにより、対称 NAT 制限をバイパスするために使用されるサーバーを指します。

Session Description Protocol (SDP)

データが転送された後に双方のピアが相互に理解できるようにするためのものです。

SDP Offer

セッションを作成または変更するために、セッション記述を生成するエージェントが送信する SDP メッセージです。

SDP Answer

オファー側から受け取ったオファーに応答して、アンサー側が送信する SDP メッセージです。

Interactive Connectivity Establishment (ICE)

Web ブラウザがピアと接続するためのフレームワークです。

RTCPeerConnection

ローカルコンピューターとリモートピア間の WebRTC コネクションです。

Kinesis Video Stream with WebRTC実装方法の概要

実装には提供されている SDK を用いて行います。下記のページをご覧ください。

WebRTC SDK in JavaScript for Web Applications

紹介したドキュメントの最後に先ほど紹介したサンプルアプリのソースコードがあります。今回はすべてを説明するとかなり長文になってしますので、全体の流れを簡単に紹介します。

  1. KVS(Kinesis Video Streams の略) クライアントを作成
  2. シグナリングチャネルエンドポイントを取得する
  3. KVS シグナリングクライアントを作成する
  4. ICE サーバー構成を取得する
  5. RTCPeerConnection を作成
  6. WebRTC シグナリングクライアントを作成
  7. シグナリングクライアントイベントリスナーの追加
  8. ピア接続イベントリスナーの追加
  9. シグナリング接続を開く

これらをそれぞれ実装していくことで、WebRTC が利用できます。IAM の認証情報は、KVS クライアントを作成する際に設定します。

それぞれの実装方法はサンプルアプリを参考にすれば基礎的な面を習得できるかと思いますので、ぜひソースコードをご覧になってみてください。

ユーザー管理について

最後に Kinesis Video Streams のユーザー管理についてです。

ユーザーのアクセスは、Cognito ユーザーか IAM ユーザーのどちらかを選択できますが、選択するならば Cognito ユーザーでしょう。やはり一時的な IAM ロールの付与のほうが IAM ユーザーの永続的な権限より、セキュリティ上好ましい対策となるからです。この点を意識して設計してみてください。

なお Cognito を利用した実装については、こちらを参考にしてください。

関連記事

まとめ

Kinesis Video Streams with WebRTC を利用する前に、WebRTC 自体を学ぶことによってさらに理解が深まるかと思われます。ぜひサンプルを参考に WebRTC を始めてみましょう!

このブログでは、AWS の記事をどんどん公開しておりますので、ご興味のある方は他の記事もご覧いただければと思います。

AWS に関する開発は、お気軽にお問い合わせください。