LoginSignup
7
5

More than 5 years have passed since last update.

ブラウザの BroadcastChannel を使ってシグナリング

Last updated at Posted at 2017-08-07
1 / 15

はじめに

これは WebRTC入門者LT会 #2 の発表資料です

自己紹介

  • @massie_g / がねこまさし
  • インフォコム(株)所属
  • WebRTC Meetup Tokyo スタッフ
  • WebRTC Beginners Tokyo スタッフ

WebRTCに欠かせないシグナリング

  • WebRTCでは、SDPやICE candidateを交換する「シグナリング」が欠かせない
  • 実験や画面のプロトタイプでは、なるべく簡単に行いたい
    • できれば、シグナリングサーバーを立てずにやりたい

1対1の場合

でも複数人の場合は?

  • 手動では大変
  • → 普通はシグナリングサーバーを用意

シグナリングサーバー

複数人、単一ルームの場合

multi_member.png


複数人、複数ルームの場合(1)

multi_room.png


複数人、複数ルームの場合(2)

※でも、もっと簡単にやりたい!


そこでBroadcastChannel

BroadcastChannel とは?

  • Chrome, Firefox で利用可能
  • 同一マシン上のWindow/Tab/Frame/iframe/Web Worker の間でメッセージをやり取り
    • 同一オリジン同志で、やりとり可能

MDN のBroadcast Channel APIの説明から引用

BroadcastChannel.png

※BroadcastChannelについては @gtk2k さんに教えてきただきました。どうもありがとうございます!


BroadcastChannelの使い方

// 接続
let channelName = 'myroom';
let broadcast = new BroadcastChannel(channelName);

// メッセージのハンドリング
broadcast.onmessage = function(evt) {
  let messageObject = JSON.parse(evt.data);

  // ... メッセージに応じた処理 ...
}

// メッセージの送信
let messageString = JSON.stringify(messageObject);
broadcast.postMessage(messageString );

// 切断
broadcast.close();

デモ


 BroadcastChannelをシグナリングに使う場合の注意

  • 同じチャネル(ルーム)に接続している相手全部にメッセージが届く
    • 特定の相手だけに届けることはできない
  • シグナリングは、相手ごとに違う内容のSDP/ICE Candidateを交換しなけばならない
    • 特定の相手だけ、区別して送信したい
  • 対策
    • Window/TabごとにユニークなIDを振る
      • 今回はuuidを利用
    • メッセージにIDを含めて送る
      • from(送信元) ... 自分のID
      • to(送信先) ... 相手のID
    • メッセージを受け取った時、自分以外のID宛てだったら無視する

※他のリアルタイムメッセージサービスを使う場合も、同様の対策が必要


特定ユーザ宛てのメッセージ

broadcast_msg.png


全員宛てのメッセージもあり

broadcast_all.png


参考:複数の相手には複数のPeerConnection

peer_dup_ng.png

peer_for_each.png


参考:複数の相手には個別のSDP

sdp_for_each.png


まとめ

  • 手軽にWebRTCのシグナリングを試すには、BroadcastChannelが便利
  • 1対1だけでなく、どんどん複数人のアプリのプロトを作ろう
    • そして、今回の様なLTでの発表をお待ちしています!
7
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5