PeerJS docsSkyWay対応版


PeerJSは、WebRTCを利用したピア·ツー·ピアのデータ、ビデオ、オーディオ通信を簡単に実現することができます。このドキュメントでは、PeerJS APIの基本的な使い方を紹介します。PeerJSを用いた実装例をご覧になりたい方は, サンプル ページを御覧ください。

このドキュメントは、NTTコミュニケーションズが提供するクラウドサービス「SkyWay」にて利用できるようにカスタマイズしたPeerJSを対象としています。

セットアップ

1. PeerJSのクライアントライブラリをインクルード

PeerJSクライアントライブラリをあなたのアプリケーションにインクルードしてください。

<script src="https://skyway.io/dist/0.3/peer.js"></script>

PeerJSライブラリ(peer.js, peer.min.js)はあなたのサーバ上に設置することができます。 ソースコードはGithubからforkする事ができます。

2. Peerオブジェクトを作成

Peerオブジェクトは、Peerコネクションを生成、受信する為に利用します。

var peer = new Peer({key: 'APIKEY'});

Peerのコンストラクタに渡す'APIKEY'は、SkyWayのAPIキーです。APIキーの申し込みを行うことで無料で取得することができます。APIキー申込時には利用ドメインを申請していただきます。APIキーは申請したドメインからのみ利用可能です。

PeerJSのセッション情報交換やシグナリングに利用するサーバを、自身で構築することもできます。 詳しくはpeerjs-serverをご覧ください。

これで利用するための準備はすべて整いました!

使い方

Peerオブジェクトは生成時、ランダムなID(以下、PeerID)が付与されます。

peer.on('open', function(id) {
  console.log('My peer ID is: ' + id);
});

他のPeerと接続したい場合は、接続先のPeerIDが必要になります。 RestAPIを利用して接続先のPeerIDを入手するか、何らかの仕組みでPeerIDを交換してください。Peer constructorのオプションに任意のPeerIDを指定する事もできます。

その他のオプション、メソッド、イベントエラー処理などの詳細は、Peer API リファレンスをお読みください。

Data connections

相手のPeerIDを指定してpeer.connectを実行するとData connectionを開始します。相手から接続要求はいつでもconnection イベントを利用して受け取ることができます。

接続開始
接続イベントの受信
var conn = peer.connect('dest-peer-id');
peer.on('connection', function(conn) { ... });

peer.connectconnectionイベントのコールバックではDataConnectionオブジェクトを提供します。このオブジェクトを使用してデータの送受信を行うことができます。

conn.on('open', function() {
  // メッセージを受信
  conn.on('data', function(data) {
    console.log('Received', data);
  });

  // メッセージを送信
  conn.send('Hello!');
});

メソッドとイベントの詳細は、DataConnection API リファレンスをご覧ください。

Video/audio calls

相手のPeerIDを指定してpeer.callを実行することで、その相手を呼び出すことができます。相手があなたを呼び出した場合、 callイベントが発生します。

callイベントを受信した時は、必ずそのイベントに応答する必要があります。応答しなければ接続は確立しません。

呼び出し開始
呼び出しへの応答
// Call a peer, providing our mediaStream
var call = peer.call('dest-peer-id',
  mediaStream);

peer.on('call', function(call) {
  // Answer the call, providing our mediaStream
  call.answer(mediaStream);
});

相手を呼び出す時、または、呼び出しに応答する時には、MediaStreamを提供する必要があります。 MediaStreamにはビデオストリーム(ウェブカメラの映像)やオーディオストリームなどがあり、navigator.getUserMediaによって取得することができます。取得できる内容はブラウザによってことなります。 尚、呼び出しに応答する時のMediaStreamは必須ではありません。もし応答時にMediaStreamをセットしなければ、一方向の通話が確立されます。 通話が確立されると、openプロパティにtrueがセットされます。

peer.callcall イベントのコールバックではMediaConnectionオブジェクトを提供します。 MediaConnectionオブジェクトはstream イベントをキャッチすることができます。streamイベントのコールバックには相手の映像/音声ストリームが含まれます。

call.on('stream', function(stream) {
  // `stream` is the MediaStream of the remote peer.
  // Here you'd add it to an HTML video/canvas element.
});

詳しくは MediaConnection API reference をご覧ください。

SkyWay RestAPIの使い方

listAllPeers()

APIキー毎のアクティブなPeerIDを取得します。

peer.listAllPeers(function(list){
      //(例)取得したPeerIDリストを配列に格納する
    for(var cnt = 0;cnt < list.length;cnt++){
        userList.push(list[cnt]);
    }
});

SkyWay RestAPIはAPIキー申請時に申請していただいたドメインからのみアクセスが可能です。

FAQ

どのような種類のデータを送ることができますか?

PeerJSは BinaryPackシリアライゼーションフォーマットを利用しています。JSONやバイナリBlobs、ArrayBuffersなど様々なデータを簡単な手順で送受信することができます。

conn.send({
  strings: 'hi!',
  numbers: 150,
  arrays: [1,2,3],
  evenBinary: new Blob([1,2,3]),
  andMore: {bool: true}
});

serializationの設定値による、各プラットフォーム間(JavaScript, iOS, Android)でのデータ通信の可否と、送受信時のデータ型に関する情報についてはこちらをご覧ください。

PeerJSを利用することができないシーンはありますか?

シンメトリックNATの内側にいるクライアント同士はNATを超えることができないため、通信することができません。 ただし、TURNサーバを利用して接続を中継すれば回避することができます。必要であれば、SkyWayが提供するTURNサーバを利用するか別途用意してください。SkyWayが提供するTURNサーバを利用する場合は別途申請が必要です。TURNサーバの情報は、Peerオブジェクトのオプションで設定することができます。

TURNサーバはどのようにして利用するのでしょうか?

Peerオブジェクトを生成する際、オプションのiceServersにURL等の情報を設定してください。

var peer = new Peer({
  config: {'iceServers': [
    { url: 'stun:stun.skyway.io:3478' },
    { url: 'turn:homeo@turn.bistri.com:80', credential: 'homeo' }
  ]} /* Sample servers, please use appropriate ones */
});

尚、SkyWayが提供するTURNサーバを利用する場合は、オプションの設定は不要です。

現在のブラウザ対応状況は?

 

WebRTC仕様との互換性並びにブラウザの対応状況はこちらをご覧ください。尚、SkyWay対応版のPeerJSについては、動作に差異がある可能性があります。

接続しようとしてるピアに接続できない場合はどうなりますか?

ピアに接続できない場合はPeerServerにて接続要求を5秒間保持します。ピアが一時的に再接続するような場合、コネクションを切らずに保持することができます。

ピアとつながらない場合は何を確認するべきでしょうか?

ピア同士がシンメトリックNATの内側にいる可能性があります。この場合はTURNサーバを利用してください。

ファイアウォール等でUDPのポート3478(STUNサーバへの問い合わせに必要)をブロックしているかもしれません。STUNサーバへの問い合わせが可能な状況でご利用ください。

遅延/帯域幅は?

ピア同士のデータのやり取りは、TURNを利用する場合を除き、サーバを経由しないため、それが原因となる遅延などは発生しません。ピア同士の処理性能やネットワーク環境に依存します。

ピア同士のコネクション確立に関する遅延は、セッション情報の中継(以下、シグナリング)とユーザの識別という2つに分類できます。PeerJSでは、シグナリングの時間を短縮するために、XHRストリーミングリクエストでデータを送った後、WebSocketで送ります。ユーザの識別に関しては手動でIDを指定することで、サーバ側にてIDを生成する際のRTT(Round-Trip delay Time)を短縮することができます。

その他

SkyWay Technical Forum Google Group(日本語/英語)

PeerJS Google Group(英語のみ)

免責事項

本ドキュメントはhttp://peerjs.com/docs/を元に、NTTコミュニケーションズが提供するSkyWayを利用するための情報等を追記し公開しています。ドキュメント原本に関する個別問い合わせには応じることができませんので、予めご了承ください。

API Reference«»

Getting Started

Peerconstructorvar peer = new Peer([id], [options]);

他のpeerへ接続できるpeerです。また、他のpeerからのコネクションをlistenできます。

[id]string

他のピアがこのピアへ接続するときに使われるIDです。もしIDが指定されない場合、ブローカサーバがIDを生成します。このIDを利用してピアを特定するのは推奨しません。なぜならば、このIDはコネクションをブローカ(仲介)するのにのみ使われるように作成されているためです。特定に他の情報を使う場合は、metadataの利用を推奨します。

[options]object
keystring

クラウド上のPeerServerを利用するためのAPIキーです。

hoststring

サーバのホスト名です。デフォルトは、skyway.ioです。相対ホスト名として、'/' も許容します。

portnumber

サーバのポート番号です。デフォルトはホストがskyway.ioの場合は443番で、その他の場合は80番です。

pathstring

自身のPeerServerが動作している場所のpathです。デフォルトは、'/'です。

securebooleanbeta (0.3.0)

SSLを利用する場合は、trueにします。skyway.ioはSSLを利用するため、デフォルトは、trueです。

turnbooleanskyway

SkyWayが提供するTURNサーバを利用する場合は、trueにします。デフォルトは、trueです。利用には別途申請が必要です。

configobject

RTCPeerConnectionへ渡される設定項目のハッシュです。このハッシュは、カスタマイズされたICE/TURNサーバを含みます。デフォルト値は、{ 'iceServers': [{ 'url': 'stun:stun.skyway.io:3478' }] }です。尚、SkyWayが提供するTURNサーバを利用する場合は、iceServersの指定は不要です。

debugnumberbeta (0.3.0)

debugレベルにしたがってログを出力します。デフォルト値は0です。

0

ログを出力しません。

1

エラーのみログ出力します。

2

エラーと警告をログ出力します。

3

すべてのログを出力します。

peer.connectmethodvar dataConnection = peer.connect(id, [options]);

idで指定されたリモートのPeerへ接続し、data connectionを返します。コネクションに失敗した場合に備え、errorイベントを設定してください。

idstring

リモートpeerのブローカーIDです(リモートpeerのpeer.idです)。

[options]object
labelstring

data connectionを識別するためのユニークなラベルです。もし特定されていない場合は、ランダムに生成されます。dataConnection.labelを通じてアクセスできます。

metadata

コネクションに関連付けされるメタデータで、コネクションを開始したpeerに渡されます。dataConnection.metadataを通じてアクセスできます。serialize可能です。

serializationstring

binary (default), binary-utf8, json, or none を指定可能です。dataConnection.serializationを通じてアクセスできます。binary-utf8はパフォーマンスの低下を引き起こすことがあります。UTF8文字列がbinaryフォーマットにパックされるためです。

reliableboolean

data channelに信頼性をもたせるか(例えば、大きなファイルの転送)、もたせないか(例えば、ゲームやストリーミング)を指定可能です。デフォルトはfalseです。true設定は互換性のないブラウザ(Chrome 30とそれ以下)のために、shimを使います。そのため、完全なパフォーマンスを提供できないことがあります。

peer.callmethodbeta (0.3.0)var mediaConnection = peer.call(id, stream);

idで指定されたリモートのpeerへ発信し、media connectionを返します。コネクションに失敗した場合に備え、errorイベントを設定してください。

idstring

リモートpeerのブローカーID(リモートpeerのpeer.id)です。

streamMediaStream

何らかのストリームです。

peer.onmethodpeer.on(event, callback);

peerイベントのリスナを設定します。

'open'eventpeer.on('open', function(id) { ... });

PeerServerへの接続が確立すると発生します。このイベントが発生する前にpeerを利用することもできますが、サーバへのメッセージはキューイングされます。idはブローカーIDです(コンストラクタで指定されるか、サーバによって割付けされます)。コネクションの速度が重要である場合、他のピアへ接続する前に、このイベントを待つべきではありません。

'connection'eventpeer.on('connection', function(dataConnection) { ... });

リモートピアと新しいdata connectionが確立すると発生します。

'call'eventbeta (0.3.0)peer.on('call', function(mediaConnection) { ... });

リモートのpeerがあなたに発信してきたときに発生します。mediaConnectionはこの時点でアクティブではありません。つまり、最初に応答する必要があります(mediaConnection.answer([stream]);)。その後、streamイベントをlistenできます。

'close'eventpeer.on('close', function() { ... });

ピアとの接続がdestroyedとなった場合に発生します。peerを確実にクリアするためには、peerが不要となった時点で、peer.destroy()の実行を推奨します。

'error'eventpeer.on('error', function(err) { ... });

peerに対するエラーは、ほとんど常に致命的であり、peerを破壊します。ソケットから生じるエラーや、PeerConnectionsから生じるエラーは、このイベントに伝えられます。

'browser-incompatible'Errorfatal

利用しようとしているwebRTC機能のすべて、またはいくつかについて、クライアントのブラウザがサポートしていません。

'invalid-id'Errorfatal

Peerコンストラクタへ渡されたIDに、不正な文字が含まれています。

'invalid-key'Errorfatal

Peerコンストラクタへ渡されたAPI Keyが不正な文字列を含んでいます。または、API Keyが含まれていません(クラウド上のサーバを利用する場合のみ)。

'unavailable-id'Errorfatal

Peerコンストラクタへ渡されたIDは既に利用されています。

'ssl-unavailable'Errorfatal

PeerJSはsecureな状態を利用しますが、クラウド上のサーバはSSLをサポートしていません。独自のPeerServerを利用してください。

'server-disconnected'Error

既にこのPeerとの接続が切断されており、新しいコネクションを作成できません。

'server-error'Errorfatal

サーバに到達できません。

'socket-error'Errorfatal

ソケットからのエラーです。

'socket-closed'Errorfatal

ソケットが予期せずクローズしました。

peer.disconnectmethodpeer.disconnect();

サーバとの接続をクローズします。既存のデータおよびメディア接続はそのままです。peer.destroyedtrueが設定されます。この操作は必ず実施してください。それぞれのPeerオブジェクトが利用不可能、またはコネクションを受信できません。idも(クラウド上の)サーバに没収されます。

peer.destroymethodpeer.destroy();

サーバへの接続をクローズし、すべての既存のコネクションを終了します。peer.destroyedtrueに設定されます。この操作は必ず実施してください。それぞれのPeerオブジェクトが利用不可能、またはコネクションを受信できません。idも(クラウド上の)サーバに没収されます。さらに、データコネクション・メディアコネクションもクローズされます。

peer.listAllPeersmethodskywaypeer.listAllPeers(function(list) { ... });

SkyWayが提供するRestAPIにアクセスし、APIキー毎のアクティブなPeerIDを取得します。listはArray形式で得られます。

peer.idstring

peerのブローカーIDです。もしIDがconstructorで指定されない場合、openが発生するまで、undefinedのままです。

peer.connectionsobject

リモートpeerのIDがkeyとして、peerと関連付けされるコネクションを持つハッシュです。このハッシュに頼るよりも、自身でコネクションを追跡管理することを推奨します。

peer.disconnectedboolean

PeerServerとのアクティブなコネクションがある場合は、false です。

peer.destroyedboolean

このpeerにおける、全接続が利用されていない場合はtrueです。

DataConnectionclass

WebRTCのData Channelをラップします。このオブジェクトを得るためには、peer.connectを使うか、connectイベントをlistenしてください

.sendmethoddataConnection.send(data);

デフォルトで、data はBinaryPackでシリアライズされて、リモートのピアで送信されます。serializationの値による、各プラットフォーム間(JavaScript, iOS, Android)でのデータ通信の可否と、送受信時のデータ型に関する情報についてはこちらをご覧ください。

data

送信するデータです。

.closemethoddataConnection.close();

DataChannelとPeerConnectionを解放して、コネクションをクローズします。

.onmethoddataConnection.on(event, callback);

data connectionイベントのリスナを設定します。

'data'eventdataConnection.on('data', function(data) { ... });

リモートpeerからデータを受信した場合に発生します。

'open'eventdataConnection.on('open', function() { ... });

コネクションが利用可能となった場合に発生します。

'close'eventdataConnection.on('close', function() { ... });

あなたが、またはリモートのpeerがdata connectionをクローズした場合に発生します。Firefoxはこのイベントをまだサポートしていません。

'error'eventdataConnection.on('error', function(err) { ... });
.bufferSizenumber

ブラウザのバッファが一杯になった場合に、キューされるメッセージのサイズです。

.dataChannelobject

コネクションに関連付けされたRTCDataChannelオブジェクトへの参照です。

.labelstring

コネクションが開始されたときにPeerJSからアサインされる、または指定されるオプションのラベルです。

.metadata

コネクションが開始されたときに、コネクションと関連付けされるメタデータです。

.openboolean

コネクションがopenであり、読み込み/書き込みの準備ができている場合にtrueになります。

.peerConnectionobject

コネクションに関連付けされる、RTCPeerConnectionへの参照です。

.peerstring

コネクションの相手側のpeer IDです。

.reliableboolean

信頼性のあるdata channelの場合にtrueです。コネクションの開始時に定義されます。

.serializationstring

コネクションを通じて送信されるデータのserializeフォーマットです。binary (デフォルト値)、 binary-utf8json、 または none となります。

.typestring

data connectionでは、常に'data'が設定されます。

MediaConnectionclassbeta (0.3.0)

WebRTCのmedia streamをラップします。このオブジェクトを得るためには、peer.callを使うか、callイベントをlistenしてください。

.answermethodmediaConnection.answer([stream]);

callイベントを受信した場合に、応答するためにコールバックにて与えられるmedia connectionにて.answerを呼び出せます。また、オプションで自身のmedia streamを設定できます。

[stream]MediaStream

getUserMediaから取得できるWebRTCのmedia streamです。

.closemethodmediaConnection.close();

media connectionをクローズします。

.onmethodmediaConnection.on(event, callback);

media connectionイベントのリスナを設定します。

'stream'eventmediaConnection.on('stream', function(stream) { ... });

リモートのpeerがstreamを追加したときに発生します。

'close'eventmediaConnection.on('close', function() { ... });

あなたかリモートのpeerがmedia connectionをクローズした時に発生します。Firefoxはこのイベントをまだサポートしていません。

'error'eventmediaConnection.on('error', function(err) { ... });
.openboolean

media connectionがアクティブなとき(例えば、呼び出しにたいして、応答があった後)に、trueとなります。もし片方向通話のために、最大待ち時間を設定したい場合に、これをチェックできます。

.metadata

コネクションが開始されたときに、コネクションと関連付けされるメタデータです。

.peerstring

コネクションの相手側のpeer IDです。

.typestring

media connectionでは、常に'media'が設定されます。

utilobjectutility

多数の有用なユーティリティを提供します。ここで記載されているutlitiesのみutilで保証されます。ここに記載されないutilitiesは予告なく除去されることがあります。これらを、私達は'大きな変更'とは考えません。

.browserstringif (util.browser === 'Firefox') { /* OK to peer with Firefox peers. */ }

利用中のブラウザを返します。このプロパティは、2つのピアの接続可否を決定する際に有用です。例えば、data connectionsはメジャーなブラウザ間では、まだ相互接続が現時点ではできません。util.browserは現在、'Firefox'、'Chrome'、'Unsupported'、'Supported'(WebRTC互換している不明なブラウザ)の値を持ちます。

.supportsobjectif (util.supports.data) { /* OK to start a data connection. */ }

利用中のブラウザにて機能がサポートされているか、WebRTCの機能ごとにマップされるハッシュです。util.supportsは、ここで記載されているプロパティのみ保証します。

.audioVideoboolean

利用中のブラウザが、media streamとPeerConnectionをサポートしている場合にtrueとなります。

.databoolean

利用中のブラウザが、DataChannelとPeerConnectionをサポートしている場合にtrueとなります。

.binaryboolean

利用中のブラウザが、binary DataChannelをサポートしている場合にtrueとなります。

.reliableboolean

利用中のブラウザが、信頼性のあるDataChannelをサポートしている場合にtrueとなります。

SkyWay iOS SDK docs


SkyWayは、WebRTCを利用したピア·ツー·ピアのデータ、ビデオ、オーディオ通信を簡単に実現することができます。「SkyWay iOS SDK」はSkyWayをiOSから利用できるフレームワークです。このドキュメントでは、SkyWay iOS SDKの基本的な使い方を紹介します。SkyWay iOS SDKを用いた実装例をご覧になりたい方は, サンプルアプリ を御覧ください。

セットアップ

1. 必要なライブラリ、フレームワークを追加

下記のライブラリ、フレームワークをXcodeプロジェクトに追加してください。

AudioToolbox.framework
AVFoundation.framework
CoreMedia.framework
CoreVideo.framework
VideoToolbox.framework
CoreGraphics.framework
Foundation.framework
GLKit.framework
SystemConfiguration.framework
libc++.tbd
libstdc++.6.0.9.tbd
libsqlite3.tbd
libicucore.tbd

2. SkyWay iOS SDKのインポート

SkyWay.frameworkをXcodeプロジェクトに追加後、SkyWay iOS SDKのヘッダファイルをインポートしてください。また、Build SettingsのLinking > Other Linker Flagsに-ObjCが設定されているか確認してください。

#import <SkyWay/SKWPeer.h>

※現在Bitcodeには内部ライブラリの関係上、対応しておりません。Xcode7以上をお使いの方は、Build SettingsのBuild Options > Enable BitcodeをNOに設定してください。

3. SKWPeerオブジェクトを作成

SKWPeerオブジェクトは、Peerコネクションを生成、受信する為に利用します。

SKWPeerOption* options = [[SKWPeerOption alloc] init];
options.key = @"{APIKEY}";
options.domain = @”{DOMAIN}”;
SKWPeer* peer = [[SKWPeer alloc] initWithOptions:options];

SKWPeerのコンストラクタに渡す'APIKEY'は、SkyWayのAPIキーです。APIキーの申し込みを行うことで無料で取得することができます。APIキー申込時には利用ドメインを申請していただきます。APIキーは申請したドメインからのみ利用可能です。

セッション情報交換やシグナリングに利用するサーバを、自身で構築することもできます。 詳しくはpeerjs-serverをご覧ください。

これで利用するための準備はすべて整いました!

使い方

SKWPeerオブジェクトは生成時、ランダムなID(以下、PeerID)が付与されます。

[peer on:SKW_PEER_EVENT_OPEN callback:^(NSObject* obj)
{
    if (YES == [obj isKindOfClass:[NSString class]])
    {
        NSString* ownId = (NSString *)obj;
    }
}];

他のPeerと接続したい場合は、接続先のPeerIDが必要になります。 SKWPeerクラスのlistAllPeersメソッドを用いて接続先のPeerIDを入手するか、何らかの仕組みでPeerIDを交換してください。SKWPeerコンストラクタのオプションに任意のPeerIDを指定する事もできます

その他のオプション、メソッド、イベントエラー処理などの詳細は、Peer API リファレンスをお読みください。

Data connections

相手のPeerIDを指定してSKWPeerのconnectWithIdメソッドを実行するとdata connectionを開始します。相手から接続要求はいつでもSKW_PEER_EVENT_CONNECTIONイベントを利用して受け取ることができます。

接続開始
SKWDataConnection* dataConnection = [peer connectWithId:'dest-peer-id'];
接続イベントの受信
[peer on:SKW_PEER_EVENT_CONNECTION callback:^(NSObject* dataConnection){ ... }];

SKWPeerのconnectWithIdメソッドとSKW_PEER_EVENT_CONNECTIONイベントのコールバックではSKWDataConnectionオブジェクトを提供します。このオブジェクトを使用してデータの送受信を行うことができます。

[dataConnection on:SKW_DATACONNECTION_EVENT_OPEN callback:^(NSObject* obj){ ... }];
[dataConnection on:SKW_DATACONNECTION_EVENT_DATA callback:^(NSObject* obj)
{
    //文字列データの受信
    NSString* strData = nil;
    if ([obj isKindOfClass:[NSString class]])
    {
        strData = (NSString *)obj;
    }
}];
// メッセージを送信
BOOL bResult = [dataConnection send:@"Hello SkyWay!"];
if (NO == bResult)
{
    // 送信失敗
}
else
{
    // 送信成功
}
      

メソッドとイベントの詳細は、DataConnection API リファレンスをご覧ください。

Video/audio calls

相手のPeerIDを指定してSKWPeerのcallWithIdメソッドを実行することで、その相手を呼び出すことができます。相手があなたを呼び出した場合、 SKW_PEER_EVENT_CALLイベントが発生します。

SKW_PEER_EVENT_CALLイベントを受信した時は、必ずそのイベントに応答する必要があります。応答しなければ接続は確立しません。

呼び出し開始
SKWMediaConnection* mediaConnection = [peer callWithId:dest-peer-id stream:mediaStream];
呼び出しへの応答
[peer on:SKW_PEER_EVENT_CALL callback:^(NSObject* mediaConnection){
    [mediaConnection answer:mediaStream];
}];

相手を呼び出す時、または、呼び出しに応答する時には、SKWMediaStreamを提供する必要があります。 SKWMediaStreamにはビデオストリーム(カメラの映像)やオーディオストリームなどがあり、SKWNavigatorのgetUserMediaメソッドによって取得することができます。 尚、呼び出しに応答する時のSKWMediaStreamは必須ではありません。もし応答時にSKWMediaStreamをセットしなければ、一方向の通話が確立されます。 通話が確立されると、isOpenプロパティにYESがセットされます。

SKWPeerのcallWithIdSKW_PEER_EVENT_CALLイベントのコールバックではSKWMediaConnectionオブジェクトを提供します。 SKWMediaConnectionオブジェクトはSKW_MEDIACONNECTION_EVENT_STREAM イベントをキャッチすることができます。SKW_MEDIACONNECTION_EVENT_STREAMイベントのコールバックには相手の映像/音声ストリームが含まれます。

[mediaConnection on:SKW_MEDIACONNECTION_EVENT_STREAM callback:^(NSObject* stream)
{
    // 'stream' は接続先のSKWMediaStreamです。
    // ここでSKWVideoに追加
}];

詳しくは MediaConnection API reference をご覧ください。

SkyWay RestAPIの使い方

listAllPeers

APIキー毎のアクティブなPeerIDを取得します。

[peer listAllPeers:^(NSArray* aryPeers)
{
    for (NSString* strPeer in aryPeers)
    {
        ...
    }
}];

SkyWay RestAPIはAPIキー申請時に申請していただいたドメインからのみアクセスが可能です。

FAQ

どのような種類のデータを送ることができますか?

SkyWay iOS SDKはserializationをbinaryまたはbinary-utf8にした場合、MessagePackシリアライゼーションフォーマットを利用します。NSData*,NSString*,NSNumber*,NSDictionary*,NSArray*を簡単な手順で送受信することができます。

NSDictionary* dctData = @{
    @"1": @"one",
    @"2": @"two",
    @"3": @"three",
    @"4": @"four",
    @"5": @"five",
    };
BOOL bResult = [_dataConnection send:dctData];

serializationの設定値による、各プラットフォーム間(JavaScript, iOS, Android)でのデータ通信の可否と、送受信時のデータ型に関する情報についてはこちらをご覧ください。

SkyWay iOS SDKを利用することができないシーンはありますか?

シンメトリックNATの内側にいるクライアント同士はNATを超えることができないため、通信することができません。 ただし、TURNサーバを利用して接続を中継すれば回避することができます。必要であれば、SkyWayが提供するTURNサーバを利用するか別途用意してください。SkyWayが提供するTURNサーバを利用する場合は別途申請が必要です。TURNサーバの情報は、SKWPeerコンストラクタのオプションで設定することができます。

TURNサーバはどのようにして利用するのでしょうか?

SKWPeerオブジェクトを生成する際、SKWPeerOption内のconfigプロパティにおいてSKWIceConfigオブジェクトにURL等の情報を設定してください。

SKWIceConfig* configStun = [[SKWIceConfig alloc] init];
configStun.url = @"stun:stun.skyway.io:3478";

SKWIceConfig* configTurn = [[SKWIceConfig alloc] init];
configTurn.url = @"turn:homeo@turn.bistri.com:80";
configTurn.credential = @"homeo";
//設定例はサンプルです。利用時には適切なサーバを設定してください。

SKWPeerOption* options = [[SKWPeerOption alloc] init];
option.config = @[configStun,configTurn];

SKWPeer* peer = [[SKWPeer alloc] initWithOptions:options];

尚、SkyWayが提供するTURNサーバを利用する場合は、オプションの設定は不要です。

接続しようとしてるピアに接続できない場合はどうなりますか?

ピアに接続できない場合はPeerServerにて接続要求を5秒間保持します。ピアが一時的に再接続するような場合、コネクションを切らずに保持することができます。

ピアとつながらない場合は何を確認するべきでしょうか?

ピア同士がシンメトリックNATの内側にいる可能性があります。この場合はTURNサーバを利用してください。

ファイアウォール等でUDPのポート3478(STUNサーバへの問い合わせに必要)をブロックしているかもしれません。STUNサーバへの問い合わせが可能な状況でご利用ください。

遅延/帯域幅は?

ピア同士のデータのやり取りは、TURNを利用する場合を除き、サーバを経由しないため、それが原因となる遅延などは発生しません。ピア同士の処理性能やネットワーク環境に依存します。

ピア同士のコネクション確立に関する遅延は、セッション情報の中継(以下、シグナリング)とユーザの識別という2つに分類できます。PeerJSでは、シグナリングの時間を短縮するために、XHRストリーミングリクエストでデータを送った後、WebSocketで送ります。ユーザの識別に関しては手動でIDを指定することで、サーバ側にてIDを生成する際のRTT(Round-Trip delay Time)を短縮することができます。

対応OS

iOS 7+

動作確認機種

iPhone 5+、iPodTouch 6+、iPad 2+

その他

SkyWay Technical Forum Google Group(日本語/英語)

免責事項

本ドキュメントはhttp://peerjs.com/docs/を元に、NTTコミュニケーションズが提供するSkyWayを利用するための情報等を追記し公開しています。ドキュメント原本に関する個別問い合わせには応じることができませんので、予めご了承ください。

API Reference«»

Getting Started

SKWPeerCLASSSKWPeer* peer = [[SKWPeer alloc] initWithId:peerId options:options];
SKWPeer* peer = [[SKWPeer alloc] initWithOptions:options];

他のpeerへ接続できるpeerです。また、他のpeerからのコネクションをlistenできます。

[peerId]NSString

他のピアがこのピアへ接続するときに使われるIDです。もしIDが指定されない場合、ブローカサーバがIDを生成します。このIDを利用してピアを特定するのは推奨しません。なぜならば、このIDはコネクションをブローカ(仲介)するのにのみ使われるように作成されているためです。特定に他の情報を使う場合は、metadataの利用を推奨します。

optionsSKWPeerOption

設定情報オブジェクトを指定します。

connectWithIdMETHODSKWDataConnection* dataConnection = [peer connectWithId:peerId];
SKWDataConnection* dataConnection = [peer connectWithId:peerId options:options];

idで指定されたリモートのPeerへ接続し、SKWDataConnectionを返します。コネクションに失敗した場合は、errorイベントが呼び出されます。

peerIdNSString

リモートpeerのブローカーIDです(リモートpeerのidentityです)。

[options]SKWConnectOption

設定情報オブジェクトを指定します。

callWithIdSKWMediaConnection* mediaConnection = [peer callWithId:peerId stream:stream];
SKWMediaConnection* mediaConnection = [peer callWithId:peerId stream:stream options:options];

idで指定されたリモートのpeerへ発信し、SKWMediaConnectionを返します。コネクションに失敗した場合に備え、errorイベントが発生します。

peerIdNSString

リモートpeerのブローカーID(リモートpeerのidentity)です。

streamSKWMediaStream

使用するローカルメディアストリームです。

[options]SKWCallOption

設定情報オブジェクトを指定します。

onMETHOD[peer on:event callback:^(NSObject* obj)callback];

SKWPeerのイベントコールバックBlockを設定します。

eventSKWPeerEventEnum

設定するイベント種別を指定します。

SKW_PEER_EVENT_OPEN[peer on:SKW_PEER_EVENT_OPEN callback:^(NSObject* ownId){ ... }];

PeerServerへの接続が確立すると発生します。このイベントが発生する前にpeerを利用することもできますが、サーバへのメッセージはキューイングされます。ownIdはブローカーIDです(SKWPeerコンストラクタで指定されるか、サーバによって割付けされます)。コネクションの速度が重要である場合、他のピアへ接続する前に、このイベントを待つべきではありません。

SKW_PEER_EVENT_CONNECTION[peer on:SKW_PEER_EVENT_CONNECTION callback:^(NSObject* dataConnection){ ... }];

リモートピアと新しいdata connectionが確立すると発生します。callbackの引数はSKWDataConnectionクラスになります。

SKW_PEER_EVENT_CALL[peer on:SKW_PEER_EVENT_CALL callback:^(NSObject* mediaConnection){ ... }];

リモートのpeerがあなたに発信してきたときに発生します。callbackの引数はSKWMediaConnectionクラスになります。mediaConnectionはこの時点でアクティブではありません。つまり、最初に応答する必要があります([mediaConnection answer:stream];)。その後、streamイベントをlistenできます。

SKW_PEER_EVENT_CLOSE[peer on:SKW_PEER_EVENT_CLOSE callback:^(NSObject* obj){ ... }];

ピアとの接続がdestroyedとなった場合に発生します。peerを確実にクリアするためには、peerが不要となった時点で、peer.destroy()の実行を推奨します。

SKW_PEER_EVENT_DISCONNECTED[peer on:SKW_PEER_EVENT_DISCONNECTED callback:^(NSObject* obj){ ... }];

ピアとの接続がdisconnectedとなった場合に発生します。

SKW_PEER_EVENT_ERROR[peer on:SKW_PEER_EVENT_ERROR callback:^(NSObject* obj){ ... }];

callbackの引数はSKWPeerErrorクラスになります。peerに対するエラーは、ほとんど常に致命的であり、peerを破壊します。ソケットから生じるエラーや、PeerConnectionsから生じるエラーは、このイベントに伝えられます。

callback

イベント発生時に実行するBlockを設定します。

disconnectMETHOD[peer disconnect];

サーバとの接続をクローズします。既存のデータおよびメディア接続はそのままです。disconnectedtrueが設定されます。この操作は必ず実施してください。それぞれのPeerオブジェクトが利用不可能、またはコネクションを受信できません。idも(クラウド上の)サーバに没収されます。

reconnectMETHOD[peer reconnect];

シグナリングサーバとの再接続を行います。 peerIDは既に割当済みのIDを使用します。disconnectされたピアのみ再接続が可能で、destroyされたピアは再接続できません。

destroyMETHOD[peer destroy];

サーバへの接続をクローズし、すべての既存のコネクションを終了します。destroyedtrueに設定されます。この操作は必ず実施してください。それぞれのPeerオブジェクトが利用不可能、またはコネクションを受信できません。idも(クラウド上の)サーバに没収されます。さらに、データコネクション・メディアコネクションもクローズされます。

listAllPeersMETHOD[peer listAllPeers:^(NSArray* aryPeers){ ... }];

SkyWayが提供するRestAPIにアクセスし、APIキー毎のアクティブなPeerIDを取得します。NSStringのNSArrayが渡されます。

identityNSString

peerのブローカーIDです。もしIDがSKWPeerクラスで指定されない場合、openが発生するまで、undefinedのままです。

connectionsNSMutableDictionary

コネクション接続管理オブジェクトです。リモートpeerのIDがkeyとして、peerと関連付けされるコネクションを持つハッシュです。このハッシュに頼るよりも、自身でコネクションを追跡管理することを推奨します。

isDisconnectedBOOL

PeerServerとのアクティブなコネクションがある場合は、NO です。

isDestroyedBOOL

このpeerにおける、全接続が利用されていない場合はYESです。

SKWPeerOptionCLASSSKWPeerOption* options = [[SKWPeerOption alloc] init];

SKWPeer初期化時のオプション設定情報クラスです。

keyNSString

クラウド上のPeerServerを利用するためのAPIキーです。

domainNSString

SkyWayでの開発者登録時に指定したWebサーバのドメイン文字列を指定します。

[host]NSString

サーバのホスト名です。デフォルトはskyway.ioとなります。

[port]NSInteger

サーバのポート番号です。デフォルトは443番となります。

[path]NSString

自身のPeerServerが動作している場所のpathです。デフォルトは、'/'です。

[secure]BOOL

SSLを利用する場合は、YESにします。skyway.ioはSSLを利用するため、デフォルトは、YESです。

[turn]BOOL

SkyWayが提供するTURNサーバを利用する場合は、YESにします。デフォルトは、YESです。利用には別途申請が必要です。

[config]NSArray

STUN/TURNサーバ設定オブジェクトSKWIceConfigのNSArray*を設定します。デフォルトでは、SkyWayのSTUNサーバ(stun:stun.skyway.io:3478)が設定されています。尚、SkyWayが提供するTURNサーバを利用する場合は、TURNサーバについての記載は不要です。

[debug]SKWDebugLevelEnum

debugレベルにしたがってログを出力します。デフォルト値はSKW_DEBUG_LEVEL_NO_LOGSです。

SKW_DEBUG_LEVEL_NO_LOGS

ログを出力しません。

SKW_DEBUG_LEVEL_ONLY_ERROR

エラーのみログ出力します。

SKW_DEBUG_LEVEL_ERROR_AND_WARNING

エラーと警告をログ出力します。

SKW_DEBUG_LEVEL_ALL_LOGS

すべてのログを出力します。

SKWIceConfigCLASSSKWIceConfig* config = [[SKWIceConfig alloc] init];

SKWPeer初期化時のSTUN/TURNサーバ設定情報クラスです。

urlNSString

STUN/TURN サーバの URL を指定します。

[username]NSString

ユーザー名が必要な場合に設定します。

[credential]NSString

パスワードが必要な場合に設定します。

SKWConnectOptionCLASSSKWConnectOption* options = [[SKWConnectOption alloc] init];

SKWPeerのconnect実行時のオプション設定情報クラスです。

labelNSString

data connectionを識別するためのユニークなラベルです。もし特定されていない場合は、ランダムに生成されます。dataConnection.labelを通じてアクセスできます。

metadataNSString

コネクションに関連付けされるメタデータで、コネクションを開始したpeerに渡されます。dataConnection.metadataを通じてアクセスできます。serialize可能です。

serializationSKWSerializationEnum

データ通信形式を指定します。デフォルトで SKW_SERIALIZATION_BINARYが設定されます。この値によってdataConnection.sendで送れるデータ型が変化します。dataConnection.serializationにて確認できます。

SKW_SERIALIZATION_BINARY

データ通信形式をbinaryにします。

SKW_SERIALIZATION_BINARY_UTF8

データ通信形式をbinary-utf8にします。

SKW_SERIALIZATION_JSON

データ通信形式をjsonにします。

SKW_SERIALIZATION_NONE

データ通信形式をnoneにします。

reliableBOOL

data channelに信頼性をもたせるか(例えば、大きなファイルの転送)、もたせないか(例えば、ゲームやストリーミング)を指定可能です。デフォルトはNOです。

SKWCallOptionCLASSSKWCallOption* options = [[SKWCallOption alloc] init];

SKWPeerのcall実行時のオプション設定情報クラスです。

metadataNSString

コネクションと関連付けされるメタデータ文字列です。

SKWPeerErrorCLASS

”error”イベント時に取得できるクラスです。OS からのエラー情報が存在した場合、エラー情報オブジェクトがプロパティerrorに参照されます。

typeSKWPeerErrorEnum

列挙型のエラータイプが設定されます。

SKW_PEER_ERR_NO_ERRORErrorfatal

エラーがない状態です

SKW_PEER_ERR_BROWSER_INCOMPATIBLEErrorfatal

利用しようとしているwebRTC機能のすべて、またはいくつかについて、サポートしていません。

SKW_PEER_ERR_INVALID_IDErrorfatal

SKWPeerクラスへ渡されたIDに、不正な文字が含まれています。

SKW_PEER_ERR_INVALID_KEYErrorfatal

SKWPeerクラスへ渡されたAPI Keyが不正な文字列を含んでいます。または、API Keyが含まれていません(クラウド上のサーバを利用する場合のみ)。

SKW_PEER_ERR_UNAVAILABLE_IDErrorfatal

SKWPeerクラスへ渡されたIDは既に利用されています。

SKW_PEER_ERR_SSL_UNAVAILABLEErrorfatal

SSL関連のエラーです。

SKW_PEER_ERR_DISCONNECTEDError

既にこのPeerとの接続が切断されており、新しいコネクションを作成できません。

SKW_PEER_ERR_SERVER_ERRORErrorfatal

サーバに到達できません。

SKW_PEER_ERR_SOCKET_ERRORErrorfatal

ソケットからのエラーです。

SKW_PEER_ERR_SOCKET_CLOSEDErrorfatal

ソケットが予期せずクローズしました。

SKW_PEER_ERR_NETWORKErrorfatal

シグナリングサーバとのネットワークエラーです。

SKW_PEER_ERR_PEER_UNAVAILABLEErrorfatal

接続できないPeerに接続しようとしています。

SKW_PEER_ERR_WEBRTCErrorfatal

WebRTC関連での何からのエラーです。

messageNSString

エラーメッセージです。

errorNSError

OSからのエラー情報オブジェクトです。

SKWDataConnectionCLASS

WebRTCのData Channelをラップします。このオブジェクトを得るためには、SKWPeerのconnectWithIdを使うか、SKW_PEER_EVENT_CONNECTION発生時に渡されるオブジェクトを使用してください。

sendMETHODBOOL bResult = [dataConnection send:data];

接続中のリモートピアにデータを送信します。プロパティserializationの値によって送信処理が変わります。serializationの値による、各プラットフォーム間(JavaScript, iOS, Android)でのデータ通信の可否と、送受信時のデータ型に関する情報についてはこちらをご覧ください。

data

送信するデータを設定します。

closeMETHOD[dataConnection close];

DataChannelとPeerConnectionを解放して、コネクションをクローズします。

onMETHOD[dataConnection on:event callback:^(NSObject* obj)callback];

SKWDataConnectionのイベントコールバックBlockを設定します。

eventSKWDataConnectionEventEnum

設定するイベント種別を指定します。

SKW_DATACONNECTION_EVENT_DATA[dataConnection on:SKW_DATACONNECTION_EVENT_DATA callback:^(NSObject* obj){ ... }];

リモートpeerからデータを受信した場合に発生します。

SKW_DATACONNECTION_EVENT_OPEN[dataConnection on:SKW_DATACONNECTION_EVENT_OPEN callback:^(NSObject* obj){ ... }];

コネクションが利用可能となった場合に発生します。

SKW_DATACONNECTION_EVENT_CLOSE[dataConnection on:SKW_DATACONNECTION_EVENT_CLOSE callback:^(NSObject* obj){ ... }];

あなたが、またはリモートのpeerがdata connectionをクローズした場合に発生します。

SKW_DATACONNECTION_EVENT_ERROR[dataConnection on:SKW_DATACONNECTION_EVENT_ERROR callback:^(NSObject* obj){ ... }];

callbackの引数はSKWPeerErrorクラスになります。

callback

イベント発生時に実行するBlockを設定します。

bufferSizeNSUInteger

バッファが一杯になった場合に、キューされるメッセージのサイズです。

dataChannelSKWDataChannel

コネクションに関連付けされたRTCDataChannelオブジェクトへの参照です。

labelNSString

コネクションが開始されたときにアサインされる、または指定されるオプションのラベルです。

metadataNSString

コネクションが開始されたときに、コネクションと関連付けされるメタデータです。

isOpenBOOL

コネクションがopenであり、読み込み/書き込みの準備ができている場合にYESになります。

peerConnectionRTCPeerConnection

コネクションに関連付けされる、RTCPeerConnectionオブジェクトです。

peerNSString

コネクションの相手側のpeer IDです。

reliableBOOL

信頼性のあるdata channelの場合はYESです。コネクションの開始時に定義されます。

serializationSKWSerializationEnum

コネクションを通じて送信されるデータのserializeフォーマットです。コネクションの開始時に定義されます

SKW_SERIALIZATION_BINARY

データ通信形式がbinaryの時にこの値が返されます。

SKW_SERIALIZATION_BINARY_UTF8

データ通信形式がbinary-utf8の時にこの値が返されます。

SKW_SERIALIZATION_JSON

データ通信形式がjsonの時にこの値が返されます。

SKW_SERIALIZATION_NONE

データ通信形式がnoneの時にこの値が返されます。

typeNSString

data connectionでは、常に'data'が設定されます。

SKWMediaConnectionCLASS

WebRTCのmedia streamをラップします。このオブジェクトを得るためには、SKWPeerのcallWithIdを使うか、SKW_PEER_EVENT_CALL発生時に渡されるオブジェクトを使用してください。

answerMETHOD[mediaConnection answer];
[mediaConnection answer:stream];

callイベントを受信した場合に、応答するためにコールバックにて与えられるmedia connectionにてanswerを呼び出せます。また、オプションで自身のmedia streamを設定できます。

[stream]SKWMediaStream

SKWNavigatorのgetUserMediaによって取得されるSKWMediaStreamです。

closeMETHOD[media close];

media connectionをクローズします。

onMETHOD[mediaConnection on:event callback:^(NSObject* obj)callback];

SKWMediaConnectionのイベントコールバックBlockを設定します。

eventSKWMediaConnectionEnum

設定するイベント種別を指定します。

SKW_MEDIACONNECTION_EVENT_STREAM[mediaConnection on:SKW_MEDIACONNECTION_EVENT_STREAM callback:^(NSObject* stream){ ... }];

リモートのpeerがstreamを追加したときに発生します。

SKW_MEDIACONNECTION_EVENT_CLOSE[mediaConnection on:SKW_MEDIACONNECTION_EVENT_CLOSE callback:^(NSObject* obj){ ... }];

あなたか、リモートのpeerがmedia connectionをクローズした時に発生します。

SKW_MEDIACONNECTION_EVENT_ERROR[mediaConnection on:SKW_MEDIACONNECTION_EVENT_ERROR callback:^(NSObject* obj){ ... }];

callbackの引数はSKWPeerErrorクラスになります。

callback

イベント発生時に実行するBlockを設定します。

isOpenBOOL

media connectionがアクティブなとき(例えば、呼び出しにたいして、応答があった後)に、YESとなります。もし片方向通話のために、最大待ち時間を設定したい場合に、これをチェックできます。

metadataNSString

コネクションが開始されたときに、コネクションと関連付けされるメタデータです。

peerNSString

コネクションの相手側のpeer IDです。

typeNSString

media connectionでは、常に'media'が設定されます。

SKWMediaStreamCLASS
closeMETHOD[stream close];

メディアストリームをすべて閉じます。

getVideoTracksMETHODNSUInteger videos = [stream getVideoTracks];

メディアストリームに追加されているビデオトラック数を取得します。

setEnableVideoTrackMETHOD[stream setEnableVideoTrack:pos enable:enable];

メディアストリームに追加済みのビデオトラック再生状態を設定します。

posNSUInteger

ビデオトラック番号 (0以上の整数)を選択します。

enableBOOL

YESなら再生し、NOなら停止します

getEnableVideoTrackMETHODBOOL enable = [stream getEnableVideoTrack:pos];

メディアストリームに追加済みのビデオトラック再生状態を取得します。

posNSUInteger

ビデオトラック番号 (0以上の整数)を選択します。

getAudioTracksMETHODNSUInteger audios = [stream getAudioTracks];

メディアストリームに追加されているオーディオトラック数を取得します。

setEnableAudioTrackMETHOD[stream setEnableAudioTrack:pos enable:enable];

メディアストリームに追加済みのオーディオトラック再生状態を設定します。

posNSUInteger

オーディオトラック番号 (0以上の整数)を選択します。

enableBOOL

YESなら再生し、NOなら停止します

getEnableAudioTrackMETHODBOOL enable = [stream getEnableAudioTrack:pos];

メディアストリームに追加済みのオーディオトラック再生状態を取得します。

posNSUInteger

オーディオトラック番号 (0以上の整数)を選択します。

setCameraPositionMETHODBOOL result = [stream setCameraPosition:pos];

ローカルiOSデバイスのメディアストリームの場合、カメラ位置を設定します。

posSKWCameraPositionEnum

使用するカメラの位置を設定します

SKW_CAMERA_POSITION_UNSPECIFIED

一番始めに見つけたカメラを使用します。順序はシステムに依存します。

SKW_CAMERA_POSITION_BACK

アウトカメラを使用します。

SKW_CAMERA_POSITION_FRONT

インカメラを使用します。

getCameraPositionMETHODSKWCameraPositionEnum pos = [stream getCameraPosition];

ローカルiOSデバイスのメディアストリームの場合、現在のカメラ位置を取得します。

posSKWCameraPositionEnum

現在のカメラの位置です。

SKW_CAMERA_POSITION_UNSPECIFIED

カメラの位置が不明です。

SKW_CAMERA_POSITION_BACK

アウトカメラです。

SKW_CAMERA_POSITION_FRONT

インカメラです。

switchCameraMETHODBool result = [stream switchCamera];

ローカルiOSデバイスのメディアストリームの場合、可能であればカメラの切替を行います。カメラが変更された場合はtrue、それ以外はfalseを返します。

SKWVideoOBJECTSKWVideo* video = [[SKWVideo alloc] initWithFrame:(CGRect)rect];

映像を表示するレンダラービュー オブジェクトです。

addSrcMETHOD[video addSrc:stream track:trackNo];

メディアソースとして、 指定のメディアストリーム・トラック番号を追加します。

streamSKWMediaStream

追加するメディアストリームです。

trackNoNSUInteger

追加するビデオトラック番号 (0以上の整数)です。

removeSrcMETHOD[video removeSrc:stream track:trackNo];

メディアソースとして使用していたメディアストリーム・トラック番号を削除します。

streamSKWMediaStream

削除するメディアストリームです。

trackNoNSUInteger

削除するビデオトラック番号 (0以上の整数)です。

setDidChangeVideoSizeCallbackMETHOD[video setDidChangeVideoSizeCallback:^(CGSize size)callback

映像サイズが変更された場合に、呼ばれるコールバックを設定します。

callback

イベント発生時に実行するBlockを設定します。

SKWNavigatorCLASS

映像を取得するためのクラスです。

initializeMETHOD[SKWNavigator initialize:peer];

初期化を行います。

peerSKWPeer

作成・初期化済みのSKWPeerオブジェクト

terminateMETHOD[SKWNavigator terminate];

終了化を行います。

getUserMediaMETHODSKWMediaStream* stream = [SKWNavigator getUserMedia:constraints];

ローカルメディアストリームを取得します。

constraintsSKWMediaConstraints

メディアストリームの設定です。

SKWMediaConstraintsCLASS

SKWNavigatorのgetUserMedia実行時のオプション設定クラスです。

videoFlagBOOL

映像使用を設定します。YESなら映像を有効に、NOなら映像を無効にします。デフォルトはYESです。

audioFlagBOOL

音声使用を設定します。YESなら音声を有効に、NOなら音声を無効にします。デフォルトはYESです。

cameraModeSKWCameraModeEnum

カメラモードを設定します。デフォルトはSKW_CAMERA_MODE_SWITCHABLEです。

SKW_CAMERA_MODE_SWITCHABLE

メディアストリームを送信中にカメラの切り替えが可能です。

SKW_CAMERA_MODE_ADJUSTABLE

カメラのwidth/heightを変更可能です。

cameraPositionSKWCameraPositionEnum

使用するカメラの位置を設定します。デフォルトはSKW_CAMERA_POSITION_FRONTです。cameraModeがSKW_CAMERA_MODE_ADJUSTABLEの時にのみ有効です。

SKW_CAMERA_POSITION_UNSPECIFIED

一番始めに見つけたカメラを使用します。順序はシステムに依存します。

SKW_CAMERA_POSITION_BACK

アウトカメラを使用します。アウトカメラが見つからない場合は、一番始めに見つけたカメラを使用します。

SKW_CAMERA_POSITION_FRONT

インカメラを使用します。インカメラが見つからない場合は、一番始めに見つけたカメラを使用します。

maxWidthNSUInteger

横ピクセル上限を設定します。デフォルトは640となります。
maxWidth, minWidth, maxHeight, minHeightで指定できる有効値は、以下のようになります。正しい値、組み合わせでなかった時は、デフォルト値が適用されます。cameraModeがSKW_CAMERA_MODE_ADJUSTABLEの時にのみ有効です。max(Width x Height): 640x480, 352x288
min (Width x Height): 192x144, 352x288, 512x384, 640x480

minWidthNSUInteger

横ピクセル下限を設定します。デフォルトは192となります。cameraModeがSKW_CAMERA_MODE_ADJUSTABLEの時にのみ有効です。

maxHeightNSUInteger

縦ピクセル上限を設定します。デフォルトは480となります。cameraModeがSKW_CAMERA_MODE_ADJUSTABLEの時にのみ有効です。

minHeightNSUInteger

縦ピクセル下限を設定します。デフォルトは144となります。cameraModeがSKW_CAMERA_MODE_ADJUSTABLEの時にのみ有効です。

SkyWay Android SDK docs


SkyWayは、WebRTCを利用したピア·ツー·ピアのデータ、ビデオ、オーディオ通信を簡単に実現することができます。「SkyWay Android SDK」はSkyWayをAndroidから利用できるフレームワークです。このドキュメントでは、SkyWay Android SDKの基本的な使い方を紹介します。SkyWay Android SDKを用いた実装例をご覧になりたい方は, サンプルアプリ を御覧ください。

セットアップ

1. 必要な設定を追加

下記の設定をマニフェストファイルに追加してください。

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:glEsVersion="0x00020000" android:required="true" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

2. SkyWay Android SDKのインポート

SkyWay.aarをアプリケーションに追加後にSkyWay Android SDKのクラスファイルをインポートしてください。

#import io.skyway.Peer.*;

3. Peerオブジェクトを作成

Peerオブジェクトは、Peerコネクションを生成、受信する為に利用します。

PeerOption options = new PeerOption();
options.key = "{APIKEY}";
options.domain = "{DOMAIN}";
Peer peer = new Peer(options);

Peerのコンストラクタに渡す'APIKEY'は、SkyWayのAPIキーです。APIキーの申し込みを行うことで無料で取得することができます。APIキー申込時には利用ドメインを申請していただきます。APIキーは申請したドメインからのみ利用可能です。

セッション情報交換やシグナリングに利用するサーバを、自身で構築することもできます。 詳しくはpeerjs-serverをご覧ください。

これで利用するための準備はすべて整いました!

使い方

Peerオブジェクトは生成時、ランダムなID(以下、PeerID)が付与されます。

peer.on(Peer.PeerEventEnum.OPEN, new OnCallback(){
   public void onCallback(Object object){
     if (object instanceof String){
       string id = (String) object;
     }
   }
 });

他のPeerと接続したい場合は、接続先のPeerIDが必要になります。 PeerクラスのlistAllPeersメソッドを用いて接続先のPeerIDを入手するか、何らかの仕組みでPeerIDを交換してください。Peerコンストラクタのオプションに任意のPeerIDを指定する事もできます

その他のオプション、メソッド、イベントエラー処理などの詳細は、Peer API リファレンスをお読みください。

Data connections

相手のPeerIDを指定してPeerのconnect(peerId)メソッドを実行するとdata connectionを開始します。相手から接続要求はいつでもPeerEventEnum.CONNECTIONイベントを利用して受け取ることができます。

接続開始
DataConnection dataConnection = peer.connect('dest-peer-id');
接続イベントの受信
peer.on(Peer.PeerEventEnum.CONNECTION,new OnCallback(){
 public void onCallback(Object object){
   //接続イベント受信時の処理
   }
 });

Peerのconnect(peerId)メソッドとPeerEventEnum.CONNECTIONイベントのコールバックではDataConnectionオブジェクトを提供します。このオブジェクトを使用してデータの送受信を行うことができます。

dataConnection.on(DataEventEnum.DATA,new OnCallback(){
  public void onCallback(Object object){
    //文字列データの受信
    String strValue = null;
    if (object instanceof String){
      strValue = (String)object;
    }
  }
});

//メッセージ送信
Bool bResult = dataConnection.send("Hello SkyWay!");
if(NO == bResult){
  //送信失敗
}else{
  //送信成功
}

メソッドとイベントの詳細は、DataConnection API リファレンスをご覧ください。

Video/audio calls

相手のPeerIDを指定してPeerのcall(peerId)メソッドを実行することで、その相手を呼び出すことができます。相手があなたを呼び出した場合、 PeerEventEnum.CALLイベントが発生します。

PeerEventEnum.CALLイベントを受信した時は、必ずそのイベントに応答する必要があります。応答しなければ接続は確立しません。

呼び出し開始
MediaConnection mediaConnection = peer.call('dest-peer-id',mediaStream);
呼び出しへの応答
peer.on(Peer.PeerEventEnum.CALL,new OnCallback(){
  public void onCallback(Object object){
    mesiaConnection.answer(mesiastream);
  }
});

相手を呼び出す時、または、呼び出しに応答する時には、MediaStreamを提供する必要があります。 MediaStreamにはビデオストリーム(カメラの映像)やオーディオストリームなどがあり、NavigatorのgetUserMediaメソッドによって取得することができます。 尚、呼び出しに応答する時のMediaStreamは必須ではありません。もし応答時にMediaStreamをセットしなければ、一方向の通話が確立されます。 通話が確立されると、isOpenプロパティにtrueがセットされます。

Peerのcall(peerId)PeerEventEnum.CALLイベントのコールバックではMediaConnectionオブジェクトを提供します。 MediaConnectionオブジェクトはMediaEventEnum.STREAM イベントをキャッチすることができます。MediaEventEnum.STREAMイベントのコールバックには相手の映像/音声ストリームが含まれます。

mediaConnection.on(event, new OnCallback(){
        puclic void onCallback(Object object){
          // 'stream' は接続先のMediaStreamです。
          // ここでCanvasに追加
        }
      });

詳しくは MediaConnection API reference をご覧ください。

SkyWay RestAPIの使い方

listAllPeers

APIキー毎のアクティブなPeerIDを取得します。

peer.listAllPeers(new OnCallback(){
  public void onCallback(Object object){
    if (!(object instanceof JSONArray)){
      return;
    }
    JSONArray peers = (JSONArray) object;
  }
});

SkyWay RestAPIはAPIキー申請時に申請していただいたドメインからのみアクセスが可能です。

FAQ

どのような種類のデータを送ることができますか?

SkyWay Android SDKはserializationをbinaryまたはbinary-utf8にした場合、MessagePackシリアライゼーションフォーマットを利用します。Byte, Short, Integer, Long, Float, Double, byte[], String, ByteBuffer, List, Mapを簡単な手順で送受信することができます。

HashMap< String, String > map = new HashMap<>();
for (int i = 0 ; 5 > i ; i++){
    String strKey = String.format("%d", i);
    String strValue = String.format("Value:%d", i);
    map.put(strKey, strValue);
  }
Boolean bResult = _data.send(map);

serializationの設定値による、各プラットフォーム間(JavaScript, iOS, Android)でのデータ通信の可否と、送受信時のデータ型に関する情報についてはこちらをご覧ください。

SkyWay Android SDKを利用することができないシーンはありますか?

シンメトリックNATの内側にいるクライアント同士はNATを超えることができないため、通信することができません。 ただし、TURNサーバを利用して接続を中継すれば回避することができます。必要であれば、SkyWayが提供するTURNサーバを利用するか別途用意してください。SkyWayが提供するTURNサーバを利用する場合は別途申請が必要です。TURNサーバの情報は、Peerコンストラクタのオプションで設定することができます。

TURNサーバはどのようにして利用するのでしょうか?

Peerオブジェクトを生成する際、PeerOption内のconfigプロパティにおいてIceConfigオブジェクトにURL等の情報を設定してください。

PeerOption options = new PeerOption();

//設定例はサンプルです。利用時には適切なサーバを設定してください。
IceConfig configTurn = new IceConfig();
configTurn.url = "turn:homeo@turn.bistri.com:80";
configTurn.credential = "homeo";
options.config = {configStun,configTurn};

Peer peer = new Peer(options);

尚、SkyWayが提供するTURNサーバを利用する場合は、オプションの設定は不要です。

接続しようとしてるピアに接続できない場合はどうなりますか?

ピアに接続できない場合はPeerServerにて接続要求を5秒間保持します。ピアが一時的に再接続するような場合、コネクションを切らずに保持することができます。

ピアとつながらない場合は何を確認するべきでしょうか?

ピア同士がシンメトリックNATの内側にいる可能性があります。この場合はTURNサーバを利用してください。

ファイアウォール等でUDPのポート3478(STUNサーバへの問い合わせに必要)をブロックしているかもしれません。STUNサーバへの問い合わせが可能な状況でご利用ください。

遅延/帯域幅は?

ピア同士のデータのやり取りは、TURNを利用する場合を除き、サーバを経由しないため、それが原因となる遅延などは発生しません。ピア同士の処理性能やネットワーク環境に依存します。

ピア同士のコネクション確立に関する遅延は、セッション情報の中継(以下、シグナリング)とユーザの識別という2つに分類できます。PeerJSでは、シグナリングの時間を短縮するために、XHRストリーミングリクエストでデータを送った後、WebSocketで送ります。ユーザの識別に関しては手動でIDを指定することで、サーバ側にてIDを生成する際のRTT(Round-Trip delay Time)を短縮することができます。

対応OS

Android 4.0.3+

動作確認機種

Nexus 5 2013、Nexus 6 2015、Xperia Z1 2013、ZenPhone 2014、Galaxy S5

その他

SkyWay Technical Forum Google Group(日本語/英語)

免責事項

本ドキュメントはhttp://peerjs.com/docs/を元に、NTTコミュニケーションズが提供するSkyWayを利用するための情報等を追記し公開しています。ドキュメント原本に関する個別問い合わせには応じることができませんので、予めご了承ください。

API Reference«»

Getting Started

PeerCLASSPeer peer = new Peer(getApplicationContext(),peerId,options);
Peer peer = new Peer(getApplicationContext(),options);

他のpeerへ接続できるpeerです。また、他のpeerからのコネクションをlistenできます。

[peerId]String

他のピアがこのピアへ接続するときに使われるIDです。もしIDが指定されない場合、ブローカサーバがIDを生成します。このIDを利用してピアを特定するのは推奨しません。なぜならば、このIDはコネクションをブローカ(仲介)するのにのみ使われるように作成されているためです。特定に他の情報を使う場合は、metadataの利用を推奨します。

optionsPeerOption

設定情報オブジェクトを指定します。

connectMETHODDataConnection dataConnection = peer.connect(peerId);
DataConnection dataConnection = peer.connect(peerId,options);

idで指定されたリモートのPeerへ接続し、DataConnectionを返します。コネクションに失敗した場合は、errorイベントが呼び出されます。

peerIdString

リモートpeerのブローカーIDです(リモートpeerのidentityです)。

[options]ConnectOption

設定情報オブジェクトを指定します。

callMETHODMediaConnection mediaConnection = peer.call(peerId,stream);
MediaConnection mediaConnection = peer.call(peerId,stream,option);

idで指定されたリモートのpeerへ発信し、MediaConnectionを返します。コネクションに失敗した場合には、errorイベントが発生します。

peerIdString

リモートpeerのブローカーID(リモートpeerのidentity)です。

streamMediaStream

使用するローカルメディアストリームです。

[option]CallOption

設定情報オブジェクトを指定します。

onMETHODpeer.on(event,callback);

PeerのイベントコールバックBlockを設定します。

eventPeerEventEnum

設定するイベント種別を指定します。

OPENpeer.on(Peer.PeerEventEnum.OPEN,new OnCallback(){public void onCallback(Object ownId){...}});

PeerServerへの接続が確立すると発生します。このイベントが発生する前にpeerを利用することもできますが、サーバへのメッセージはキューイングされます。ownIdはブローカーIDです(Peerコンストラクタで指定されるか、サーバによって割付けされます)。コネクションの速度が重要である場合、他のピアへ接続する前に、このイベントを待つべきではありません。

CONNECTIONpeer.on(Peer.PeerEventEnum.CONNECTION,new OnCallback(){public void onCallback(Object object){...}});

リモートピアと新しいdata connectionが確立すると発生します。callbackの引数はDataConnectionクラスになります。

CALLpeer.on(Peer.PeerEventEnum.CALL,new OnCallback(){public void onCallback(Object object){...}});

リモートのpeerがあなたに発信してきたときに発生します。callbackの引数はMediaConnectionクラスになります。mediaConnectionはこの時点でアクティブではありません。最初に応答を返す必要があります(mediaConnection.answer(stream);)。返答後、streamイベントをlistenできます。

CLOSEpeer.on(Peer.PeerEventEnum.CLOSE,new OnCallback(){public void onCallback(Object object){...}});

ピアとの接続がdestroyedとなった場合に発生します。peerを確実にクリアするためには、peerが不要となった時点で、peer.destroy()の実行を推奨します。

DISCONNECTEDpeer.on(Peer.PeerEventEnum.DISCONNECTED,new OnCallback(){public void onCallback(Object object){...}});

ピアとの接続がdisconnectedとなった場合に発生します。

ERRORpeer.on(Peer.PeerEventEnum.ERROR,new OnCallback(){public void onCallback(Object object){...}});

callbackの引数はPeerErrorクラスになります。peerに対するエラーは、ほとんど常に致命的であり、peerを破壊します。ソケットから生じるエラーや、PeerConnectionsから生じるエラーは、このイベントに伝えられます。

callback

イベント発生時に実行するBlockを設定します。

disconnectMETHODpeer.disconnect();

サーバとの接続をクローズします。既存のデータおよびメディア接続はそのままです。disconnectedtrueが設定されます。この操作は必ず実施してください。それぞれのPeerオブジェクトが利用不可能、またはコネクションを受信できません。idも(クラウド上の)サーバに没収されます。

destroyMETHODpeer.destroy();

サーバへの接続をクローズし、すべての既存のコネクションを終了します。destroyedtrueに設定されます。この操作は必ず実施してください。それぞれのPeerオブジェクトが利用不可能、またはコネクションを受信できません。idも(クラウド上の)サーバに没収されます。さらに、データコネクション・メディアコネクションもクローズされます。

listAllPeersMETHODpeer.listAllPeers(new OnCallback(){public void onCallback(Object object){...}});

SkyWayが提供するRestAPIにアクセスし、APIキー毎のアクティブなPeerIDを取得します。PeerIDはJSONArrayで渡されます。

identityString

peerのブローカーIDです。もしIDがPeerクラスで指定されない場合、openが発生するまで、undefinedのままです。

connectionsMap

コネクション接続管理オブジェクトです。リモートpeerのIDがkeyとして、peerと関連付けされるコネクションを持つハッシュです。このハッシュに頼るよりも、自身でコネクションを追跡管理することを推奨します。

isDisconnectedBoolean

PeerServerとのアクティブなコネクションがある場合は、false です。

isDestroyedBoolean

このpeerにおける、全接続が利用されていない場合はtrueです。

PeerOptionCLASSPeerOption options = new PeerOption();

Peer初期化時のオプション設定情報クラスです。

keyString

クラウド上のPeerServerを利用するためのAPIキーです。

domainString

SkyWayでの開発者登録時に指定したWebサーバのドメイン文字列を指定します。

[host]String

サーバのホスト名です。デフォルトはskyway.ioとなります。

[port]int

サーバのポート番号です。デフォルトは443番となります。

[path]String

自身のPeerServerが動作している場所のpathです。デフォルトは、'/'です。

[secure]Boolean

SSLを利用する場合は、trueにします。skyway.ioはSSLを利用するため、デフォルトは、trueです。

[turn]Boolean

SkyWayが提供するTURNサーバを利用する場合は、trueにします。デフォルトは、trueです。利用には別途申請が必要です。

[config]ArrayList

STUN/TURNサーバ設定オブジェクトIceConfigのArrayを設定します。デフォルトでは、SkyWayのSTUNサーバ(stun:stun.skyway.io:3478)が設定されています。尚、SkyWayが提供するTURNサーバを利用する場合は、TURNサーバについての記載は不要です。

[debug]DebugLevelEnum

debugレベルにしたがってログを出力します。デフォルト値はDEBUG_LEVEL_NO_LOGSです。

NO_LOGS

ログを出力しません。

ONLY_ERROR

エラーのみログ出力します。

ERROR_AND_WARNING

エラーと警告をログ出力します。

ALL_LOGS

すべてのログを出力します。

IceConfigCLASSIceConfig config = new IceConfig();

Peer初期化時のSTUN/TURNサーバ設定情報クラスです。

urlString

STUN/TURN サーバの URL を指定します。

[username]String

ユーザー名が必要な場合に設定します。

[credential]String

パスワードが必要な場合に設定します。

ConnectOptionCLASSConnectOption option = new ConnectOption();

Peerのconnect実行時のオプション設定情報クラスです。

labelString

data connectionを識別するためのユニークなラベルです。もし特定されていない場合は、ランダムに生成されます。dataConnection.labelを通じてアクセスできます。

metadataString

コネクションに関連付けされるメタデータで、コネクションを開始したpeerに渡されます。dataConnection.metadataを通じてアクセスできます。serialize可能です。

serializationDataConnection.SerializationEnum

データ通信形式を指定します。デフォルトでBINARYが設定されます。この値によってdataConnection.sendで送れるデータ型が変化します。dataConnection.serializationにて確認できます。

BINARY

データ通信形式をbinaryにします。

BINARY_UTF8

データ通信形式をbinary-utf8にします。

JSON

データ通信形式をjsonにします。

NONE

データ通信形式をnoneにします。

reliableBoolean

data channelに信頼性をもたせるか(例えば、大きなファイルの転送)、もたせないか(例えば、ゲームやストリーミング)を指定可能です。デフォルトはfalseです。

CallOptionCLASSCallOption option = new CallOption();

Peerのcall実行時のオプション設定情報クラスです。

metadataString

コネクションと関連付けされるメタデータ文字列です。

PeerErrorCLASS

”error”イベント時に取得できるクラスです。OS からのエラー情報が存在した場合、エラー情報オブジェクトがプロパティerrorに参照されます。

typePeerErrorEnum

列挙型のエラータイプが設定されます。

NO_ERRORErrorfatal

エラーがない状態です

BROWSER_INCOMPATIBLEErrorfatal

利用しようとしているwebRTC機能のすべて、またはいくつかについて、サポートしていません。

INVALID_IDErrorfatal

Peerクラスへ渡されたIDに、不正な文字が含まれています。

INVALID_KEYErrorfatal

Peerクラスへ渡されたAPI Keyが不正な文字列を含んでいます。または、API Keyが含まれていません(クラウド上のサーバを利用する場合のみ)。

UNAVAILABLE_IDErrorfatal

Peerクラスへ渡されたIDは既に利用されています。

SSL_UNAVAILABLEErrorfatal

SSL関連のエラーです。

DISCONNECTEDError

既にこのPeerとの接続が切断されており、新しいコネクションを作成できません。

SERVER_ERRORErrorfatal

サーバに到達できません。

SOCKET_ERRORErrorfatal

ソケットからのエラーです。

SOCKET_CLOSEDErrorfatal

ソケットが予期せずクローズしました。

NETWORKErrorfatal

シグナリングサーバとのネットワークエラーです。

PEER_UNAVAILABLEErrorfatal

接続できないPeerに接続しようとしています。

WEBRTCErrorfatal

WebRTC関連での何からのエラーです。

messageString

エラーメッセージです。

exceptionException

OSからのエラー情報オブジェクトです。

DataConnectionCLASS

WebRTCのData Channelをラップします。このオブジェクトを得るためには、Peerのconnectを使うか、CONNECTION発生時に渡されるオブジェクトを使用してください。

sendMETHODBOOL bResult = dataConnection.send(data);

接続中のリモートピアにデータを送信します。プロパティserializationの値によって送信処理が変わります。serializationの値による、各プラットフォーム間(JavaScript, iOS, Android)でのデータ通信の可否と、送受信時のデータ型に関する情報についてはこちらをご覧ください。

data

送信するデータです。

closeMETHODdataConnection.close();

DataChannelとPeerConnectionを解放して、コネクションをクローズします。

onMETHODdataConnection.on(event,new OnCallback(){public void onCallback(Object object){}});

DataConnectionのイベントコールバックBlockを設定します。

eventDataEventEnum

設定するイベント種別を指定します。

DATA

リモートpeerからデータを受信した場合に発生します。

OPEN

コネクションが利用可能となった場合に発生します。

CLOSE

あなたが、またはリモートのpeerがdata connectionをクローズした場合に発生します。

ERROR

callbackの引数はPeerErrorクラスになります。

callback

イベント発生時に実行するBlockを設定します。

bufferSizeint

バッファが一杯になった場合に、キューされるメッセージのサイズです。

dataChannelDataChannel

コネクションに関連付けされたDataChannelオブジェクトへの参照です。

labelString

コネクションが開始されたときにアサインされる、または指定されるオプションのラベルです。

metadataString

コネクションが開始されたときに、コネクションと関連付けされるメタデータ文字列です。

isOpenBOOL

コネクションがopenであり、読み込み/書き込みの準備ができている場合にtrueになります。

peerConnectionPeerConnection

コネクションに関連付けされる、PeerConnectionオブジェクトです。

peerString

コネクションの相手側のpeer IDです。

reliableBOOL

信頼性のあるdata channelの場合はtrueです。コネクションの開始時に定義されます。

serializationSerializationEnum

コネクションを通じて送信されるデータのserializeフォーマットです。コネクションの開始時に定義されます

BINARY

データ通信形式がbinaryの時にこの値が返されます。

BINARY_UTF8

データ通信形式がbinary-utf8の時にこの値が返されます。

JSON

データ通信形式がjsonの時にこの値が返されます。

NONE

データ通信形式がnoneの時にこの値が返されます。

typeString

data connectionでは、常に'data'が設定されます。

MediaConnectionCLASS

WebRTCのmedia streamをラップします。このオブジェクトを得るためには、Peerのcallを使うか、CALL発生時に渡されるオブジェクトを使用してください。

answerMETHODmediaConnection.answer();
mediaConnection.answer(stream);

callイベントを受信した場合に、応答するためにコールバックにて与えられるmedia connectionにてanswerを呼び出せます。また、オプションで自身のmedia streamを設定できます。

[stream]MediaStream

NavigatorのgetUserMediaによって取得されるMediaStreamです。

closeMETHODmedia.close();

media connectionをクローズします。

onMETHODmedia.on(event, new OnCallback(){puclic void onCallback(Object object){}});

MediaConnectionのイベントコールバックBlockを設定します。

eventMediaEventEnum

設定するイベント種別を指定します。

STREAM

リモートのpeerがstreamを追加したときに発生します。

CLOSE

あなたか、リモートのpeerがmedia connectionをクローズした時に発生します。

ERROR

callbackの引数はPeerErrorクラスになります。

callback

イベント発生時に実行するBlockを設定します。

isOpenBOOL

コネクションがopenであり、読み込み/書き込みの準備ができている場合にtrueになります。

peerString

コネクションの相手側のpeer IDです。

typeString

media connectionでは、常に'media'が設定されます。

MediaStreamCLASS
closeMETHODstream.close();

メディアストリームをすべて閉じます。

getVideoTracksMETHODint videos = stream.getVideoTracks();

メディアストリームに追加されているビデオトラック数を取得します。

setEnableVideoTrackMETHODstream.setEnableVideoTrack(pos,enable);

メディアストリームに追加済みのビデオトラック再生状態を設定します。

posint

ビデオトラック番号を選択します。ビデオトラック番号は0以上を設定します。

enableBoolean

trueなら再生し、falseなら停止します

getEnableVideoTrackMETHODBoolean enable = stream.getEnableVideoTrack(pos);

メディアストリームに追加済みのビデオトラック再生状態を取得します。

posint

ビデオトラック番号 (0 -)を選択します。

getAudioTracksMETHODint audios = stream.getAudioTracks();

メディアストリームに追加されているオーディオトラック数を取得します。

setEnableAudioTrackMETHODstream.setEnableAudioTrack(pos,enable);

メディアストリームに追加済みのオーディオトラック再生状態を設定します。

posint

オーディオトラック番号 (0 -)を選択します。

enableBoolean

trueなら再生し、falseなら停止します

getEnableAudioTrackMETHODBoolean enable = stream.getEnableAudioTrack(pos);

メディアストリームに追加済みのオーディオトラック再生状態を取得します。

posint

オーディオトラック番号を選択します。オーディオトラック番号は0以上が設定されます。

switchCameraMETHODBoolean enable = stream.switchCamera();

ローカルメディアストリームの場合、可能であればカメラの切替を行います。カメラが変更された場合はtrue、それ以外はfalseを返します。

CanvasOBJECTCanvas canvas = (Canvas) findViewById(R.id.ownvideo);

映像を表示するレンダラービュー オブジェクトです。

addSrcMETHODcanvas.addSrc(stream,trackNo);

メディアソースとして、 指定のメディアストリーム・トラック番号を追加します。

streamMediaStream

追加するメディアストリームです。

trackNoint

追加するビデオトラック番号です。トラック番号は0以上の数で設定します。

removeSrcMETHODcanvas.removeSrc(stream,trackNo);

メディアソースとして使用していたメディアストリーム・トラック番号を削除します。

streamMediaStream

削除するメディアストリームです。

trackNoint

削除するビデオトラック番号です。

NavigatorCLASS

映像を取得するためのクラスです。

initializeMETHODNavigator.initialize(peer);

初期化を行います。

peerPeer

作成・初期化済みのPeerオブジェクト

terminateMETHODNavigator.terminate();

終了化を行います。

getUserMediaMETHODMediaStream stream = Navigator.getUserMedia(constraints);

ローカルメディアストリームを取得します。

constraintsMediaConstraints

メディアストリームの設定です。

MediaConstraintsCLASS

NavigatorのgetUserMedia実行時のオプション設定クラスです。

videoFlagBoolean

映像使用を設定します。trueなら映像を有効に、falseなら映像を無効にします。デフォルトはtrueです。

audioFlagBoolean

音声使用を設定します。trueなら音声を有効に、falseなら音声を無効にします。デフォルトはtrueです。

cameraPositionCameraPositionEnum

使用するカメラの位置を設定します。デフォルトはFRONTになります。

UNSPECIFIED

一番始めに見つけたカメラを使用します。順序はシステムに依存します。

BACK

アウトカメラを使用します。アウトカメラが見つからない場合は、一番始めに見つけたカメラを使用します。

FRONT

インカメラを使用します。インカメラが見つからない場合は、一番始めに見つけたカメラを使用します。

maxWidthint

横ピクセル上限を設定します0を指定すると WebRTCエンジン依存となります。デフォルトは640となります。

minWidthint

横ピクセル下限を設定します0を指定すると WebRTCエンジン依存となります。デフォルトは0となります。

maxHeightint

縦ピクセル上限を設定します0を指定すると WebRTCエンジン依存となります。デフォルトは640となります。

minHeightint

縦ピクセル下限を設定します0を指定すると WebRTCエンジン依存となります。デフォルトは0となります。

maxFrameRateint

フレームレート上限を設定します0を指定すると WebRTCエンジン依存となります。デフォルトは10となります。

minFrameRateint

フレームレート下限を設定します0を指定すると WebRTCエンジン依存となります。デフォルトは0となります。