ページ

ラベル WebRTC の投稿を表示しています。 すべての投稿を表示
ラベル WebRTC の投稿を表示しています。 すべての投稿を表示

2013年10月22日火曜日

WebRTC調査 3


WebRTCのネイティブ API調査



1. WebRTC概要

   WebRTCは、簡単なJavaScript APIを介して、リアルタイムコミュニケーション(RTC)機能を備えたWebブラウザを有効に自由、開いているプロジェクトです。
   WebRTCコンポーネントは最高のこの目的を果たすために最適化されています。

   私たちの使命:豊富な、高品質を有効にするには、 RTCアプリケーションは簡単なJavaScript APIとHTML5を経由してブラウザで開発することができます。

   WebRTCイニシアチブは、Googleは、MozillaとOperaでサポートされているプロジェクトです。
   このページは、 Google Chromeのチームによって維持されている。

   note :
   via                ・・・~を介して
   capabilities        ・・・機能
   optimized        ・・・最適化
   purpose            ・・・目的

2. アーキテクチャ

  http://www.webrtc.org/reference/architecture
 
  大まかに2つの層に分かれる
  (1) ネイティブな箇所 C/C++で実装
  (2) WebAPI
 
  (1)内に存在するコンポーネント
 
  ① WebRTC Native C++ API
 
  ② 通信/セッション
     セッションコンポーネントはジングル/ XMPPプロトコルを使用するか、必要とせずに、 libjingleから再使用部品によって構築されています。
 
     1. RTP Stack
        RTPのためのネットワーク?スタック、リアルタイムプロトコル。
        ※RTP ・・・ Real-time Transport Protocol(リアルタイム トランスポート プロトコル、RTP)は、
        音声や動画などのデータストリームをリアルタイムに配送するためのデータ転送プロトコルである。
        届かなかったパケットは無視。UDPがメイン。UDP以外の通信プロトコルも使える。
       
     2. STUN/ICE
        コールはさまざまなタイプのネットワークを横切る接続を確立するためにSTUNとICEメカニズムを使用することができ成分。
       
     3. Session Management
        コールセットアップと管理層を可能にする、セッション層を抽象化。これはアプリケーション開発者にプロトコル実装の決定を残します。
 
  ③ 音声認識 Voice Engine
 
  ④ ビデオ Video Engine
     ビデオエンジンは、カメラからネットワークへ、ビデオのフレームワークビデオメディア鎖であり、ネットワークからスクリーンに関する。
    
     1. VP8
        VP8(ブイピーエイト)はGoogleに買収されたOn2テクノロジー社が開発した、ビデオコーデックの一つである
        ※関連項目
          WebM ・・・ ビデオコーデックにVP8、音声コーデックにVorbis、メディアコンテナとしてMatroskaのサブセットを採用している。ファイルの拡張子は「.webm」。
          パテントプール ・・・特定の技術に対するライセンス規約の団体
         
     2. Video Jitter Buffer
        ビデオの動的ジッタバッファ。ジッタおよび全体的なビデオ品質上のパケット損失の影響を隠すのに役立ちます。
       
        ※Jitterとは・・・ジッター (Jitter) とは、電気通信などの分野において、時間軸方向での信号波形の揺らぎ自身や、
        その揺らぎによって生じる映像などの乱れのことを指す。「いらいらする」という意味の英語"Jitter"に由来する。
       
     3. Image enhancements
        例えば、 Webカメラによる画像キャプチャからビデオノイズを除去する。
       
       
       
       
       
       
       
       
       
       
       

99. PeerJSライブラリ

    PeerJSが完了すると、構成、および使いやすいピアツーピア接続APIを提供することでブラウザのWebRTC実装をラップ。
    何もIDと装備されていて、ピアはリモートピアにP2Pデータやメディアストリーム接続を作成することができます。



2013年10月14日月曜日

WebRTC調査 2

今回はWebRTCで一番煩わしい部分のP2P通信を担当してくれる
ライブラリのPeerJSを解説。

PeerJSとは・・・
WebRTC というブラウザ同士がサーバなしで通信しあって(要するにP2P)ビデオチャットなどができる仕組みの一部として自由なデータの送受信もできる機能があって、そこの部分を簡潔にラッピングしてくれるライブラリ

使い方は2通り

・ Cloud上にサーバーを用意してくれており、アカウント登録を行う事で利用可能
    http://peerjs.com/peerserver
    名前、メールアドレス、パスワードを送るとメールが届き、新しい API キーを作成できる画面に
    くる。「Create new API key」ボタンを押すと最大同時接続数を入力する画面が出てくるけど、
    取りあえず初期設定のまま進むと API キーが発行された。

・ ローカルネットワーク上に自分でサーバーも作成可能

 使用方法

 1. htmlページにPeerJSを使用する為のPeerJSクライアントをinclude
  <script src="http://cdn.peerjs.com/0.3/peer.min.js"></script>
 
 2. Peerオブジェクトを作成
  var peer = new Peer({key: 'lwjd5qra8257b9'}); 
 ・keyはP2P通信で相手に自分の存在を通知するキー
 ・第二引数はアカウント情報
 
 3. 接続成功時
  peer.on('open', function(id) {
    console.log('My peer ID is: ' + id);
  });

APIリファレンス


2013年10月5日土曜日

WebRTC調査 1


WebRTC = Web Real-Time Communications

・ブラウザ上でリアルタイムコミュニケーションを実現する為の仕様
・双方向性のあるコミュニケーションを必要とする様々なアプリ開発
 ビデオ/音声チャット
 テキストの共同編集
 ゲーム等
 
 
 P2P通信を利用して端末間の相互接続が可能
 サーバを経由しない?
 ※でも最初ネゴシエーションする為のサーバは必要
    そしてNAT越えする場合(ルータのNAT越えとかでなくトンネルサーバ)も必要
        http://www.infoq.com/jp/news/2013/06/wrangling-webrtc
 UDPプロトコル
 
 アーキテクチャ
 1Media Capture and Streams (getUserMedia)
   ・ローカルのカメラやマイクからストリームデータを取得、加工も可能
   ・通信時のストリーム定義
 2WebRTC 1.0
 
 getUserMedia
  webkitでは・・・
   canvasと連携して画像処理
   web audio apiと連携して音声処理
   顔認識、ジェスチャー
 
  WebRTC 1.0 WebRTC Between Browsers
  ・主にP2P通信の為の仕様が定義
  ・端末間の相互接続の為のネゴシエーションを行う
  ・P2Pによるデータ通信(Data channel)などもある
  ・APIは複雑で難解?

  P2P通信を始めるための事前準備
  ・最初のネゴシエーションを仲介する為のサーバを用意WebサーバでオK
  ・NAT越えするためのICEサーバを用意


  NAT traversal (NAT越え)の問題
  ・P2P通信を開始する為にはお互いの端末のグローバルアドレスを知る必要がある
  ・しかし・・各端末お前にはファイアウォールなどがあるので、一筋縄ではいかないごた
  ・そのために必要なのがICE
  ・ICEで取得したグローバルIPとポート番号を通信するホスト間で交換

  ICE
  ・STUNやTURNなどのNAT越えの手順をよろしくやってくれるもの
  ・STUNでだめならTURNで

 STUN (Simple Traversal of UDP through NATs)
 ・NAT越えの方法の一つ
 ・通信するホストがSTUNサーバにUDP接続を行う
 ・NATが割り当てたグローバルIPとポート番号を取得
 ・STUNで対応できるNATはフルコーン型、制御コーン型、ポート制御コーン型の3つ

 TURN (Traversal Using Relay NAT)
 ・NAT越えの方法の一つ
 ・対称型や多段NATでもオK
 ・すべての通信をTURNを経由して行うので、高負荷。高コスト

 APIのほとんどがこの部分を解決する為のネゴシエーション


 ライブラリがあるっぽい
 1. simpleWebRTC
     公式ホームページ
     http://lab.adn-mobasia.net/?p=1887
 2. Peer.js
    ・Data Channelのみサポート
    ・ブローカーサーバーが提供されている(API Keyの申請が必要)
    ・connect()メソッドでP2Pのネゴシエーションを完了
     公式ホームページ
     個人ブログ
 3 webRTC.io
    http://www.moongift.jp/2012/10/20121019-2/