WebRTC meetup TOKYO#6

WebRTCMeetUp #6に行ってきた.

WebRTC Meetup Tokyo #6
https://atnd.org/events/60983

近頃はSkywayのTURNトライアル開始や,WebRTC Conference開催とビジネス成分が徐々に増してきた感があります.

1/27 Skyway TURNトライアル開始
ニュース 2015年1月27日:WebRTCプラットフォーム「SkyWay」にTURN機能を追加し国内初のトライアル提供を開始 | NTT Com 企業情報

2/5~2/6 WebRTC Conference Japan

WebRTC Conference Japan

19:40〜20:10 セッション1 WebRTC/ORTCの最新動向まるわかり! @tukimikage

WebRTC/ORTCの最新動向まるわかり!

想定する読者

WebRTC初心者
最新動向をひと通り抑えたい人

WebRTCとは

大雑把にいえばブラウザでテレビ電話を実現する技術.
プラグインレスで映像・音声,データ交換の仕組みを使って,Web会議,テキストチャット,電話などの連携などが実現可能.

技術的なメリットは大きく2つ.

1. リアルコミュニケーションに必要な要素技術がオープン
WebRTC同士の相互接続が保証されて,ライセンス使用料が不要.
接続に必要な要件も揃えている.
音声・映像の形式,NAT・Firewall超え,暗号化,到達保証... など

2. ブラウザとネイティブアプリの両方で利用可能
WebRTC対応ブラウザならURL入力だけでサービスをすぐに使える.

OSSC++コード(LibJingle?)を使えば,ネイティブアプリにWebRTCを組み込むことも可能.

技術面とビジネス面からの考察

  • 技術面
    • オープン標準
    • ブラウザとネイティブアプリ両方で使える.
  • ビジネス面
    • オープン標準
      • マルチデバイス・マルチOS
      • IoT分野へのリアルタイム通信
      • ブラウザで利用可能
    • インストール不要で,ITリテラシが低くても使える.
    • HTML5JavaScriptの組み合わせで実現できるので,既存のWebサービスとの親和性が高く,連携や組み込みが容易.
  • 電話との連携
    • ゲートウェイ機能を持つWebRTCサーバを用意すれば,電話との連携も可.
    • コンタクトセンタ分野にもWebRTCを適用して,Webから呼び出すこと可.
  • WebRTCの対応状況
    • ChromeFirefoxMac/iOSを除いて対応済み
    • IEは2014/10月に開発着手.
    • MacChromeSafariベースなので動作しないが,そろそろリリースされるかも.

WebRTCの技術要素

Webアプリケーションのエンジニアにはネットワークの低レイヤであるTCP/UDPの低レイヤの基礎知識が必要.

キーワード

ICE
どこからでもWebRTCを繋げるための仕組み.UDPホールパンチングなどでクライアント同士が接続できる方法を探してくれる.STUN/TURNを使う.
STUN
クライアントが直接繋がる形で探す仕組み.
TURN
クライアントが直接繋がらない場合,サーバを経由して繋げる仕組み.ネットワークの遅延,帯域・サーバ処理コストの面からSTUNが経済的.しかし,ネットワークの要件(NATの種類)に応じてTURNを使わないと繋がらないことも.(WebRTCコネクションのうち,8−9%はTURNでしか繋がらないというデータがある)
シグナリング
クライアント同士で通話するための情報を交換する仕組み.相手と手順が合意できればどんなプロトコルを利用しても良い.SDP(Session Description Protocol)の様式でIPアドレス,ポート番号,映像・音声の情報を交換しあってリアルタイム通信に備える.
  • リアルタイム通信

SDPを交換すると,P2P交換をする.メディアはセキュアだが,オレオレ証明書なので本人証明にはならない.

SRTP
音声・映像のストリームが入っている.
SCTP
テキスト,バイナリ転送などができる.DataChannelはこれを使う.

作者注:セキュリティは次のセッションで詳述

  • 音声,動画処理

JavaScriptのWebRTC APIを使えばブラウザで完結して処理ができる.

標準化動向

W3CIETFで標準化

W3C
WebブラウザのAPIを決める.
IETF
プロトコルや,セキュリティやICEといった機能要件の標準化をしている.
  • W3CのWebRTCはどんどん遅れている.
    • WebRTC 1.0 p2p部分 2013/9/10ドラフトが発行して,やっと2014/12/5にEditor's Draftで更新した.Media Capture and Streams:一番進んでいる.2015/1Qにラストコールになるかも.

Media系のI/F(スライド34参照)はWebRTC WGと,デバイス系のDeviceAPIs WG合同のTFで検討している.

標準化動向Topics
  • WebRTC Stats APIの提案
    • Chromeでいうwebrtc-internalsの定量的な観測結果.ネットワークの遅延情報など.
  • DTLS Key Control
    • 現状ブラウザで使うDTLSの証明書はブラウザ自身が生成するオレオレ証明書.本来論の正当性を保証するため,アプリ側の証明書を使えるようにする?
  • RTCRtpSender / RTCRtpReceiver
    • Googleが提案.SDPを扱う新しいアプローチとして,メディアストリームを容易に編集できるようにする.

#作者注:動的なストリームのハンドリングが簡単になる?

    • ORTCからW3Cへフィードバックされるかも.
    • RTCPなどで動的にパラメータを切り替える.
  • Promise
    • getUserMeiaなど,「前提が成り立った後に行う処理」をそのまま,JSで書くとネストが深くなる.そこで,Promisesを推奨する.
ORTC

もう一つのRTC APIで 2013年はじめから検討開始.

  • IETFのMLにWebRTC 1.0の問題点を投げたら,Draftを書いてみろと言われた.
  • ドラフト書いたが,WEbRTC1.0を優先することをCiscoが提案.分離してMSなどが検討し始める.IEにも実装し始めた.
    • なんでMSが支援するのか?
    • CU-RTC-WEBというローレベルなAPIを独自提案していたが,WebRTC WGで一回否決されてきた.
    • その後,似た思想(低レベルなAPI)のORTCが出てきたので,IEがのっかってきた.
  • WebRTC 1.0イケてないとは?
    • APIが高機能すぎる
    • SDP周りの問題が多い
      • SDPフォーマットがレガシー&難解
    • 褒めている部分もある
  • ORTCの技術仕様
    • WebRTC 1.0と似ているが,違う箇所もある.DTLSによるデータ転送を司るオブジェクト
    • Media
  • サービスとしての活用事例(スライド68)
    • MistCDN

など.. 海外のサービスが中心.

    • Skywayも開発者向けに提供している.
    • Dialogicがコールセンター向けに出している.
    • IoTにもWebRTCが役に立つ.

デモ

gomeeting

Web ミーティング | GoToMeeting
リンクを参加者に共有すれば会議できて,ドキュメント共有もできる

MistCDN

Mist Technologies
CDNを同じページを見ているユーザ同士で,キャッシュを融通する.

QA:

  • Go2Meetingの接続形態は?

p2pなのでフルメッシュになる.

  • ブラウザの実装とW3CのIDLの整合はいつ取れそうか?

→WebRTC 1.0のFixするまでかかる.最新動向を追うのであれば,Googleの実装を見ると良い.ブラウザ間の実装状況はGoogleが先行している状態.FirefoxGoogleのコードを一部活用している.
→ライブラリとかで一部WebRTC APIをラップしたものを活用するとブラウザの実装を吸収してくれる.

20:10〜20:40 セッション2 WebRTC is secure? or not secure? @iwashi86

WebRTC is secure, or not secure? - WebRTC セキュリティ概説 -

Skywayが日本初のTURN商用トライアルを開始.

WebRTCのセキュリティ

  • MeetUP #3で言ったことを振り返る.secureと書いてある.
    • SRTP
    • SCTP
  • どんな要素がsecureじゃない?
    • 具体的な例から考える.WebRTCの接続相手はp2pなら4つ.
      • Webサーバ
      • Signalingサーバ
      • STUNサーバ
      • TURNサーバ

守られているのはメディアだけ.Signalingは規定されていないので,サービス開発者がセキュリティを確保する必要がある.

  • WebRTCのセキュリティをIPAの定義する側面から網羅してみる.今回はSRTPをスコープにする.
    • WebサーバはSSL/TLSを使う.
    • STUNサーバは念のためセキュアに.グローバルIP/Portを調べる動作なので.しかし,RFC 5389で認証系の話があるので,知っておくべき.認証にCredentialを長期間使う仕組みと,短期的な仕組みがある.短期的な仕組みは放っておく.
    • TURNサーバはクライアント同士のメディア通信を中継するので,CPUなどの計算リソース,NWリソースを大量消費する.勝手に利用されるとまずいので認証が必要になる.
    • 認証はSTUNの拡張なので,Credentialが使えるのだがWebRTC的にはイケてない.
    • サンプルコードからみてもひどい.UsernameとCredentialがJSに直書き.
    • TURN REST Server APIが対策の一つ.

https://tools.ietf.org/html/draft-uberti-rtcweb-turn-rest-00
http://www.ietf.org/proceedings/87/slides/slides-87-behave-10.pdf

    • Shared Secret(ランダム)を共有して,HMACで共有地を得る仕組み.
    • Webサーバで生成したデータを元に,クライアントで生成したデータをTURNサーバに渡して認証する.
    • DraftはExpireされているが,有名なTURNサーバ(rfc5766-turn-server)は使ってる.

rfc5766-turn-server - High-performance free open source TURN and STUN Server implementation. VoIP media traffic NAT traversal and gateway. TURN client library included. - Google Project Hosting

    • Signaling
      • SSL使わなければ平文で交換する.
      • 接続先がほんとにその人なのか分からない.DTLSはオレオレ証明
      • DTLS Key ControlがW3Cで提案されている.
      • 本人証明に第三者のIdentity Providerが出てくる.シーケンスだと発呼するときに自身の証明書を取り寄せる.
      • 暗号化をほどける.MITMとかオレオレ証明書を使っている限りは正当性がわからないので無力.
    • 責任追跡性,否認防止性
      • やらかした人を特定できて,言い逃れさせないこと.電話網へのタダ掛けなど.ユーザ認証して通話記録を取る.
      • SIPは賢いので機能が揃っている.
    • SignalingのSDP情報は認証する仕組みがある.セッション単位でICEの情報を識別している.
  • Privacy
    • 音声/映像を取得していることを示す.ネイティブアプリはアプリ開発者が考える.
    • スクリーンシェアする場合はしている旨を通知すること
    • グローバルIPの話
    • Facebookが落ちた件.どこからでもなんでも接続できる.
      • DDos SynFloog ICMP/UDP Flodd etc....

QA

  • IDPの真正性は表示できるのか?

プロトコル上で工夫されていない.認証の正当性をCAが証明するなど考える必要がある.

  • Signalingサーバがクライアントの通話が終わったことを検知できる?

→切断の検知を行うにはタイマによる監視などの仕組みが必要.

20:50〜21:00 LT1 ざっくりTURN @iwashi86

  • なんでTURNなのか?
    • NATの問題,UDPが使えなくてWebRTCが繋がらない
    • 負荷・帯域消費がすさまじい
      • SkyWayでトライアルを提供しています.

PeerJS ドキュメント

  • TURNを使うまでの手順
    • Skywayテクニカルサポートで個別に申し込み.手動で認可しているので,受付まで時間が掛かる.
    • ライブラリの実装が変わることもあるので,PeerjsのCDNから使うと良い.
    • できない場合は最新版を使えばTURN使える.
    • 指定しなくてもデフォルトのパラメータでTURNオプションが入っている.
    • turn:falseで使わないこともできる

デモ

STUNで繋がらないことを確認して,TURNなら繋がった.

  • WebRTC ConferenceでTURNの中身を発表する.

21:00〜21:10 LT2 WebRTC Conferenceの話 ぉぉっゃ

WebRTC Conderenceの紹介.

タダで入れる方法を紹介する.

動機

  • 2012年時点で海外は流行っている.西海岸とかでも.10万円のセミナーでも出席者多数
  • IoTとかと同じく位の知名度でバスワード?
  • 大物も来る
    • Temasys社CTO
    • MistCDNの作者

QA

  • codeIQの解答は?

→1/30(金) には回答が来る.

21:10−21:20 LT3 超ちーん @tadfmac

  • WebMIDIを使ったサンプル
  • 物理的な音を拾って,対向の音を鳴らしている.

→Web MIDI APIを使っている..

QA

  • 音はどうやって鳴らしている?

→ソレノイドで鳴らしている.Twitterにあげとく.

tadfmac/arduino-vusb-midi-attiny45 · GitHub

ArduinoでMidiコントローラーを作ろう

以上.