SlideShare a Scribd company logo
1 of 32
Download to read offline
Node.js with
WebRTC DataChannel
東京Node学園祭2016
2016.11.12
がねこまさし
@massie_g
自己紹介
• 所属
– インフォコム(株)の調査研究チーム Web担当
• Node学園の過去の発表
– 東京Node学園祭2014
• Nodeで操るKurentoメディアサーバー
• http://www.slideshare.net/mganeko/nodekurento
– 東京Node学園祭2013
• WebRTCを始めよう
• http://www.slideshare.net/mganeko/2013-web-rtcnode
• Web記事
– HTML5Experts.jp WebRTC入門2016
• https://html5experts.jp/series/webrtc2016/
WebRTCとは
• Web Real-Time Communication の略
• Webブラウザ上のリアルタイム通信の規格
– ビデオ/オーディオ … MediaStream
– 任意のデータ … DataChannel
• どこで使えるか?
– PCブラウザ (Chrome, Firefox, もうすぐEdgeでも)
– Androidブラウザ (Chrome, Firefox)
– ネイティブアプリ (PC, Android, iOS, other)
– Node.js 用モジュール
Node.jsでWebRTCを使う方法
• Node.js × ブラウザ
– NW.js (node-webkit) … http://nwjs.io
– Electron … http://electron.atom.io
– どちらもデスクトップアプリケーション
• 中にChromiumを丸ごと持っているようなもの
• Node.js × libwebrtc
– Chromiumの中から、WebRTCのライブラリのみ利用
– wrtc (node-webrtc) ... DataChannel のみ対応
• https://github.com/js-platform/node-webrtc
– webrtc-native … DataChannel、MediaStream両対応
• https://github.com/vmolsa/webrtc-native
やりたいこと
P2Pのデータ通信
Webブラウザ Node.jsのアプリ
Part 1
wrtc (node-webrtc)
インストール方法
• Mac OS X 10.10.x / 10.11.x のケース
– npm install wrtc
• Ubutnu 16でも同様
• npm install wrtc
使い方(1) 読み込み
var WebRTC = require('wrtc');
var RTCPeerConnection = WebRTC.RTCPeerConnection;
var RTCIceCandidate= WebRTC.RTCIceCandidate;
var RTCSessionDescription = WebRTC.RTCSessionDescription;
var RTCDataChannel = WebRTC.RTCDataChannel;
使い方(2) シグナリング
• シグナリングとは
– P2P通信をするために必要な情報を交換すること
• 今日はシグナリングの処理は省略
– 通常シグナリングサーバーを介して行う
• WebSocketが使われることが多い(Socket.IOも含む)
• 今回は、Socket.IOを利用
• 参考
– WebRTCハンズオン 概要編
• http://qiita.com/massie_g/items/916694413353a3293f73
– WebRTC入門2016
• https://html5experts.jp/mganeko/19814/
• https://html5experts.jp/mganeko/20013/
• https://html5experts.jp/mganeko/20112/
今回は手順は省略
シグナリングサーバーとの関係
P2Pのデータ通信
シグナリングサーバー
Node.js + Socket.IO接続情報
(SDP)
を交換
Node.jsのアプリ
Socket.IOクライアント
Webブラウザ
DataChannelを利用する(1)
始める側:ブラウザ
var peer = new RTCPeerConnection(config);
// P2P通信を始める前(シグナリング前)に、DataChannelを用意する
var dataChannel = peer.createDataChannel('channelName', option);
dataChannel.onopen = function () { // 接続時の処理
};
dataChannel.onmessage = function (evt) { // データ受信時の処理
var data = evt.data;
};
dataChannel.onerror = function (error) { // エラー時の処理
};
dataChannel.onclose = function () { // 切断時の処理
dataChannel = null;
};
DataChannelを利用する(2)
受ける側: Node.js
var peer = new RTCPeerConnection(config);
var dataChannel = null;
peer.ondatachannel = function(event) {
dataChannel = event.channel; // DataChannelを作るのではなく、渡されたものを使う
dataChannel.onopen = function () { // 接続時の処理
};
dataChannel.onmessage = function (evt) { // データ受信時の処理
var data = evt.data;
};
dataChannel.onerror = function (error) { // エラー時の処理
};
dataChannel.onclose = function () { // 切断時の処理
dataChannel = null;
};
};
DataChannelを利用する(3)
メッセージを送る: ブラウザ/Node.js
• dataChannel.send( data );
– dataの型
• DOMString, Blob, ArrayBuffer, ArrayBufferView
– dataChannelは双方向
Demo 1: Echoサーバー
Demo2:ターミナルソフト
ターミナルの全体の構成
Node.jsのアプリ側Webブラウザ側
pty.jsxterm.js
DataChannelDataChannel
on.('data, … )
send()onmessage()
write()on.('data, … )
send()
onmessage()
write()
ユーザー bash
ターミナルソフト Node.js側
• pty.js を利用 https://github.com/chjj/pty.js/
• インストール
– npm install wrtc
– npm install socket.io-client
– npm install pty.js
• 利用
var WebRTC = require('wrtc');
var IOClient = require('socket.io-client');
var pty = require('pty.js');
参考
pty.jsでターミナルを準備
var ptyTerm;
function setupTerminal(cols, rows) {
ptyTerm = pty.spawn(process.platform === 'win32' ? 'cmd.exe' : 'bash', [],
{
name: 'xterm-color',
cols: cols || 80,
rows: rows || 24,
cwd: process.env.PWD,
env: process.env
});
ptyTerm.on('data', function(data) {
dataChannel.send(data); // ターミナルから来たデータをDataChannelに送る
});
}
参考
DataChannel接続の処理
var dataChannel = null;
peer.ondatachannel = function(event) {
dataChannel = event.channel;
// … 略 …
dataChannel.onmessage = function (evt) {
ptyTerm.write(evt.data); // ターミナルに送る
};
// ターミナルを準備
setupTerminal(80, 25);
};
参考
ターミナルソフト ブラウザ側
• xterm.js を利用 https://github.com/sourcelair/xterm.js
• 利用
<link rel="stylesheet" href="xterm.css" /> <!—CSS必須 -->
<script src="xterm.js"></script>
参考
xterm.jsでターミナルの準備
var container = document.getElementById('containerDiv'); // <div>
Var term = null;
function prepareTerminal() {
term = new Terminal({
cols: 80, rows: 24, convertEol: true,
//useStyle: true,
//screenKeys: true,
cursorBlink: true
});
term.on('data', function(data) {
dataChannel.send(data); // ユーザの入力をデータチャネルに送る
});
term.on('title', function(title) {
document.title = title;
});
term.open(container); // ターミナルのUIを生成
}
参考
xterm.jsで応答を表示
var dataChannel = peer.createDataChannel(
'channelName', dataOpt
);
// … 省略 …
dataChannel.onmessage = function (evt) {
term.write(evt.data);
// DataCannelで受け取ったデータをターミナルに表示
};
参考
どうしてWebRTC DataChannelを使うの?
• sshで良いんじゃない? … ブラウザで色々やりたい
• WebSocketで良いんじゃない?
– Node.js アプリが「外側」にあるときはOK
– では、Node.jsアプリもNATの「内側」にある時は??
Node.jsのアプリ
WebSocket「サーバー」
Web
ブラウザ
NAT
Node.js
アプリ
Web
ブラウザ
NAT NAT
どうしてWebRTC DataChannelを使うの?
• WebRTC DataChannel なら NAT越えの仕組みがある
– STUNサーバー
– UDP ホールパンチング
• WiFiにプライバシーセパレーターがあっても通信可能
Node.js
アプリ
Web
ブラウザ
STUN サーバー
参考:
• WebRTCハンズオン 概要編 - P2P通信行うまで(2-1):NAT越え https://goo.gl/FVYOkA
• WebRTCの裏側にあるNATの話 - 答えの前にUDPホールパンチング https://goo.gl/P64kGX
NAT NAT
どうしてWebRTC DataChannelを使うの?
• WebRTC DataChannel なら Firewall/Proxy越えの仕組みもある
– TURN, TURN over TCP
• …が、いまのところNode.js アプリ側のFirewall越えが成功して
ません
Node.js
アプリ
Web
ブラウザ TURN サーバー
参考:
• WebRTCハンズオン 概要編 - P2P通信行うまで(3):Firewall越え https://goo.gl/MJWxR9
Fire-
wall
Proxy
Fire-
wall
Proxy
あれ? WebSocketでもできるのでは?
• WebSocketサーバーを外に立てればできる
Node.js +
WebSocket
クライアント
Web
ブラウザ
WebSocket
サーバー
Fire-
wall
Proxy
Fire-
wall
Proxy
WebRTC DataChannel との違い
• DataChannelの場合、ネットワーク環境が許せば、P2Pで繋がる
→ レイテンシーが小さくなる
• DataChannelの場合、End-to-End で暗号化される
⇔ WebSocketの場合、サーバで暗号解除される。悪意があれば、見たり改変したりできる
Part 2
webrtc-native
インストール方法
• Mac OS X 10.10.x 、 Xcode 7.x のケース
– git clone https://github.com/vmolsa/webrtc-native
– cd webrtc-native
– export BUILD_WEBRTC=true
– npm install
• 注意
– npm install で非常に時間がかかる(数時間?)
• webrtcのソース取得、ビルドを実施するため
• proxyがある場合は、 ~/.boto ファイルに proxy設定が必要
• Ubuntu 16 でも同様の手順
インストール方法(2)
• Mac OS X 10.11.x 、 Xcode 8.x のケース
– git clone https://github.com/vmolsa/webrtc-native
– cd webrtc-native
– export BUILD_WEBRTC=true
– npm install
• → libwebrtc のビルドに失敗
• 原因
– QTKit (QuickTime Kit) が見つからない、というエラー
– Xcode 8 から QuickTime廃止、AVFoundationを利用
– Webrtc-native は Chromium 50 ベースでQTKitに依存
• Chromium 51〜 QTKit不要になっているが…
• 対策
– 最新Chromiumのソースを取得するようにビルドスクリプトを修正
• → 挫折
– Xcode 7.x でビルドした build/Release/webrtc.node をコピーしてくる
• → なんとか動いた
使い方 読み込み
// webrtc-native をインストールしたディレクトリで
var WebRTC = require('./');
var RTCPeerConnection = WebRTC.RTCPeerConnection;
var RTCIceCandidate= WebRTC.RTCIceCandidate;
var RTCSessionDescription = WebRTC.RTCSessionDescription;
var RTCDataChannel = WebRTC.RTCDataChannel;
// あとの使い方は、wrtcと同じ
まとめ
• WebRTC は Webブラウザだけじゃない
• DataChannel なら Node.js からも使える
• NATの内側のNode.jsアプリにも接続できる
• Node.js で P2P アプリが作れる
– センサーデータの送受信?
– コンテンツ配信、ファイル共有?
– きっと、もっと楽しいことができるはず!
Thank you!
@massie_g

More Related Content

What's hot

Skywayのビデオチャットを録画しよう。そう、ブラウザでね
Skywayのビデオチャットを録画しよう。そう、ブラウザでねSkywayのビデオチャットを録画しよう。そう、ブラウザでね
Skywayのビデオチャットを録画しよう。そう、ブラウザでねmganeko
 
WebRTCの技術解説 公開版
WebRTCの技術解説 公開版WebRTCの技術解説 公開版
WebRTCの技術解説 公開版Contest Ntt-west
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersSeiya Mizuno
 
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践Yoshifumi Kawai
 
パネルディスカッション:WebXRメタバースの挑戦 in CEDEC2022 ~Mozilla Hubs活用事例と課題共有~
パネルディスカッション:WebXRメタバースの挑戦 in CEDEC2022 ~Mozilla Hubs活用事例と課題共有~パネルディスカッション:WebXRメタバースの挑戦 in CEDEC2022 ~Mozilla Hubs活用事例と課題共有~
パネルディスカッション:WebXRメタバースの挑戦 in CEDEC2022 ~Mozilla Hubs活用事例と課題共有~GREE VR Studio Lab
 
マルチコア時代の並列プログラミング
マルチコア時代の並列プログラミングマルチコア時代の並列プログラミング
マルチコア時代の並列プログラミングAkihiko Matuura
 
ARでVRアバターを表示するシステムを構築しよう
ARでVRアバターを表示するシステムを構築しようARでVRアバターを表示するシステムを構築しよう
ARでVRアバターを表示するシステムを構築しようtorisoup
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup samplemganeko
 
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55Preferred Networks
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案樽八 仲川
 
CodeBuildを身近にするためのはじめの一歩
CodeBuildを身近にするためのはじめの一歩CodeBuildを身近にするためのはじめの一歩
CodeBuildを身近にするためのはじめの一歩淳 千葉
 
レベルを上げて物理で殴れ、Fuzzing入門 #pyfes
レベルを上げて物理で殴れ、Fuzzing入門 #pyfesレベルを上げて物理で殴れ、Fuzzing入門 #pyfes
レベルを上げて物理で殴れ、Fuzzing入門 #pyfesTokoroten Nakayama
 
WebSocketのキホン
WebSocketのキホンWebSocketのキホン
WebSocketのキホンYou_Kinjoh
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video StreamsAmazon Web Services Japan
 
TDPT + VMCプロトコル on WebRTC
TDPT + VMCプロトコル on WebRTCTDPT + VMCプロトコル on WebRTC
TDPT + VMCプロトコル on WebRTChironroinakae
 

What's hot (20)

WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
Skywayのビデオチャットを録画しよう。そう、ブラウザでね
Skywayのビデオチャットを録画しよう。そう、ブラウザでねSkywayのビデオチャットを録画しよう。そう、ブラウザでね
Skywayのビデオチャットを録画しよう。そう、ブラウザでね
 
WebRTCの技術解説 公開版
WebRTCの技術解説 公開版WebRTCの技術解説 公開版
WebRTCの技術解説 公開版
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
 
RDF Semantic Graph「RDF 超入門」
RDF Semantic Graph「RDF 超入門」RDF Semantic Graph「RDF 超入門」
RDF Semantic Graph「RDF 超入門」
 
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
 
パネルディスカッション:WebXRメタバースの挑戦 in CEDEC2022 ~Mozilla Hubs活用事例と課題共有~
パネルディスカッション:WebXRメタバースの挑戦 in CEDEC2022 ~Mozilla Hubs活用事例と課題共有~パネルディスカッション:WebXRメタバースの挑戦 in CEDEC2022 ~Mozilla Hubs活用事例と課題共有~
パネルディスカッション:WebXRメタバースの挑戦 in CEDEC2022 ~Mozilla Hubs活用事例と課題共有~
 
マルチコア時代の並列プログラミング
マルチコア時代の並列プログラミングマルチコア時代の並列プログラミング
マルチコア時代の並列プログラミング
 
ARでVRアバターを表示するシステムを構築しよう
ARでVRアバターを表示するシステムを構築しようARでVRアバターを表示するシステムを構築しよう
ARでVRアバターを表示するシステムを構築しよう
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
 
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
 
CodeBuildを身近にするためのはじめの一歩
CodeBuildを身近にするためのはじめの一歩CodeBuildを身近にするためのはじめの一歩
CodeBuildを身近にするためのはじめの一歩
 
レベルを上げて物理で殴れ、Fuzzing入門 #pyfes
レベルを上げて物理で殴れ、Fuzzing入門 #pyfesレベルを上げて物理で殴れ、Fuzzing入門 #pyfes
レベルを上げて物理で殴れ、Fuzzing入門 #pyfes
 
WebSocketのキホン
WebSocketのキホンWebSocketのキホン
WebSocketのキホン
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
 
TDPT + VMCプロトコル on WebRTC
TDPT + VMCプロトコル on WebRTCTDPT + VMCプロトコル on WebRTC
TDPT + VMCプロトコル on WebRTC
 

Viewers also liked

Webrtc最新動向
Webrtc最新動向Webrtc最新動向
Webrtc最新動向Yusuke Naka
 
Maglica - A Simple Internal Cloud Tool at #techkayac
Maglica - A Simple Internal Cloud Tool at #techkayacMaglica - A Simple Internal Cloud Tool at #techkayac
Maglica - A Simple Internal Cloud Tool at #techkayacGosuke Miyashita
 
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~Yuki Hirano
 
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発するHiroyuki Kusu
 
とある小売IT企業での新卒仮想プロジェクト(工具共有サービス)
とある小売IT企業での新卒仮想プロジェクト(工具共有サービス)とある小売IT企業での新卒仮想プロジェクト(工具共有サービス)
とある小売IT企業での新卒仮想プロジェクト(工具共有サービス)Kazuo Murakami
 
Tokyo nodefestival workshop_20161112
Tokyo nodefestival workshop_20161112Tokyo nodefestival workshop_20161112
Tokyo nodefestival workshop_20161112Junichi Okamura
 
大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術Daisuke Tamada
 
Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術Isamu Suzuki
 

Viewers also liked (8)

Webrtc最新動向
Webrtc最新動向Webrtc最新動向
Webrtc最新動向
 
Maglica - A Simple Internal Cloud Tool at #techkayac
Maglica - A Simple Internal Cloud Tool at #techkayacMaglica - A Simple Internal Cloud Tool at #techkayac
Maglica - A Simple Internal Cloud Tool at #techkayac
 
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
 
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
 
とある小売IT企業での新卒仮想プロジェクト(工具共有サービス)
とある小売IT企業での新卒仮想プロジェクト(工具共有サービス)とある小売IT企業での新卒仮想プロジェクト(工具共有サービス)
とある小売IT企業での新卒仮想プロジェクト(工具共有サービス)
 
Tokyo nodefestival workshop_20161112
Tokyo nodefestival workshop_20161112Tokyo nodefestival workshop_20161112
Tokyo nodefestival workshop_20161112
 
大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術
 
Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術
 

Similar to Node.js with WebRTC DataChannel

2013 WebRTC node
2013 WebRTC node2013 WebRTC node
2013 WebRTC nodemganeko
 
Let's begin WebRTC
Let's begin WebRTCLet's begin WebRTC
Let's begin WebRTCyoshikawa_t
 
WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術
WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術
WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術Yoshiaki Sugimoto
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1mganeko
 
2013 WebRTC 概説 & ワークショップ
2013 WebRTC 概説 & ワークショップ2013 WebRTC 概説 & ワークショップ
2013 WebRTC 概説 & ワークショップmganeko
 
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎Insight Technology, Inc.
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoTreasure Data, Inc.
 
20141017 introduce razor
20141017 introduce razor20141017 introduce razor
20141017 introduce razordo_aki
 
WebRTC NextVersion時代のJavaScript開発
WebRTC NextVersion時代のJavaScript開発WebRTC NextVersion時代のJavaScript開発
WebRTC NextVersion時代のJavaScript開発Yusuke Naka
 
WebRTC getStats - WebRTC Meetup Tokyo 5 LT
WebRTC getStats - WebRTC Meetup Tokyo 5 LTWebRTC getStats - WebRTC Meetup Tokyo 5 LT
WebRTC getStats - WebRTC Meetup Tokyo 5 LTmganeko
 
Webrtc bootcamp handson
Webrtc bootcamp handsonWebrtc bootcamp handson
Webrtc bootcamp handsonmganeko
 
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたNarami Kiyokura
 
160705-02 RTミドルウエア講習会・名城大
160705-02 RTミドルウエア講習会・名城大160705-02 RTミドルウエア講習会・名城大
160705-02 RTミドルウエア講習会・名城大openrtm
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~Akira Inoue
 
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...mganeko
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~Akira Inoue
 
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたWASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたMITSUNARI Shigeo
 
201111 04
201111 04201111 04
201111 04openrtm
 
Chromebook 「だけ」で WebRTCを動かそう
Chromebook 「だけ」で WebRTCを動かそうChromebook 「だけ」で WebRTCを動かそう
Chromebook 「だけ」で WebRTCを動かそうmganeko
 

Similar to Node.js with WebRTC DataChannel (20)

2013 WebRTC node
2013 WebRTC node2013 WebRTC node
2013 WebRTC node
 
Let's begin WebRTC
Let's begin WebRTCLet's begin WebRTC
Let's begin WebRTC
 
WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術
WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術
WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1
 
2013 WebRTC 概説 & ワークショップ
2013 WebRTC 概説 & ワークショップ2013 WebRTC 概説 & ワークショップ
2013 WebRTC 概説 & ワークショップ
 
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
 
20141017 introduce razor
20141017 introduce razor20141017 introduce razor
20141017 introduce razor
 
WebRTC NextVersion時代のJavaScript開発
WebRTC NextVersion時代のJavaScript開発WebRTC NextVersion時代のJavaScript開発
WebRTC NextVersion時代のJavaScript開発
 
WebRTC getStats - WebRTC Meetup Tokyo 5 LT
WebRTC getStats - WebRTC Meetup Tokyo 5 LTWebRTC getStats - WebRTC Meetup Tokyo 5 LT
WebRTC getStats - WebRTC Meetup Tokyo 5 LT
 
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャーNode.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
 
Webrtc bootcamp handson
Webrtc bootcamp handsonWebrtc bootcamp handson
Webrtc bootcamp handson
 
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
 
160705-02 RTミドルウエア講習会・名城大
160705-02 RTミドルウエア講習会・名城大160705-02 RTミドルウエア講習会・名城大
160705-02 RTミドルウエア講習会・名城大
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
 
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
 
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたWASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみた
 
201111 04
201111 04201111 04
201111 04
 
Chromebook 「だけ」で WebRTCを動かそう
Chromebook 「だけ」で WebRTCを動かそうChromebook 「だけ」で WebRTCを動かそう
Chromebook 「だけ」で WebRTCを動かそう
 

More from mganeko

Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)mganeko
 
Amazon Kinesis Video Streams WebRTC 使ってみた
Amazon Kinesis Video Streams WebRTC 使ってみたAmazon Kinesis Video Streams WebRTC 使ってみた
Amazon Kinesis Video Streams WebRTC 使ってみたmganeko
 
Build Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.jsBuild Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.jsmganeko
 
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーNode.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーmganeko
 
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3mganeko
 
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updateWebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updatemganeko
 
ブラウザでWebRTC - iOSゲートウェイ作ってみた
ブラウザでWebRTC - iOSゲートウェイ作ってみたブラウザでWebRTC - iOSゲートウェイ作ってみた
ブラウザでWebRTC - iOSゲートウェイ作ってみたmganeko
 
Inside of 聖徳玉子 by O2
Inside of 聖徳玉子 by O2Inside of 聖徳玉子 by O2
Inside of 聖徳玉子 by O2mganeko
 
WebRTC Build MCU on browser
WebRTC Build MCU on browserWebRTC Build MCU on browser
WebRTC Build MCU on browsermganeko
 
PeerConnectionリレーとMediaRecorder
PeerConnectionリレーとMediaRecorderPeerConnectionリレーとMediaRecorder
PeerConnectionリレーとMediaRecordermganeko
 
ここがつらいよWebRTC - WebRTC開発の落とし穴
ここがつらいよWebRTC - WebRTC開発の落とし穴ここがつらいよWebRTC - WebRTC開発の落とし穴
ここがつらいよWebRTC - WebRTC開発の落とし穴mganeko
 
WebRTC multitrack / multistream
WebRTC multitrack / multistreamWebRTC multitrack / multistream
WebRTC multitrack / multistreammganeko
 
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみようWebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみようmganeko
 
WebRTC multistream
WebRTC multistreamWebRTC multistream
WebRTC multistreammganeko
 
Inside WebM
Inside WebMInside WebM
Inside WebMmganeko
 
Infocom webrtc conference japan
Infocom webrtc conference japanInfocom webrtc conference japan
Infocom webrtc conference japanmganeko
 
Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )
Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )
Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )mganeko
 
WebRTC Summit 2014 NewYork 参加報告
WebRTC Summit 2014 NewYork 参加報告WebRTC Summit 2014 NewYork 参加報告
WebRTC Summit 2014 NewYork 参加報告mganeko
 
WebRTCのオーディオ処理の謎、誰か教えて!
WebRTCのオーディオ処理の謎、誰か教えて!WebRTCのオーディオ処理の謎、誰か教えて!
WebRTCのオーディオ処理の謎、誰か教えて!mganeko
 

More from mganeko (19)

Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
 
Amazon Kinesis Video Streams WebRTC 使ってみた
Amazon Kinesis Video Streams WebRTC 使ってみたAmazon Kinesis Video Streams WebRTC 使ってみた
Amazon Kinesis Video Streams WebRTC 使ってみた
 
Build Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.jsBuild Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.js
 
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーNode.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
 
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3
 
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updateWebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample update
 
ブラウザでWebRTC - iOSゲートウェイ作ってみた
ブラウザでWebRTC - iOSゲートウェイ作ってみたブラウザでWebRTC - iOSゲートウェイ作ってみた
ブラウザでWebRTC - iOSゲートウェイ作ってみた
 
Inside of 聖徳玉子 by O2
Inside of 聖徳玉子 by O2Inside of 聖徳玉子 by O2
Inside of 聖徳玉子 by O2
 
WebRTC Build MCU on browser
WebRTC Build MCU on browserWebRTC Build MCU on browser
WebRTC Build MCU on browser
 
PeerConnectionリレーとMediaRecorder
PeerConnectionリレーとMediaRecorderPeerConnectionリレーとMediaRecorder
PeerConnectionリレーとMediaRecorder
 
ここがつらいよWebRTC - WebRTC開発の落とし穴
ここがつらいよWebRTC - WebRTC開発の落とし穴ここがつらいよWebRTC - WebRTC開発の落とし穴
ここがつらいよWebRTC - WebRTC開発の落とし穴
 
WebRTC multitrack / multistream
WebRTC multitrack / multistreamWebRTC multitrack / multistream
WebRTC multitrack / multistream
 
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみようWebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
 
WebRTC multistream
WebRTC multistreamWebRTC multistream
WebRTC multistream
 
Inside WebM
Inside WebMInside WebM
Inside WebM
 
Infocom webrtc conference japan
Infocom webrtc conference japanInfocom webrtc conference japan
Infocom webrtc conference japan
 
Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )
Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )
Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )
 
WebRTC Summit 2014 NewYork 参加報告
WebRTC Summit 2014 NewYork 参加報告WebRTC Summit 2014 NewYork 参加報告
WebRTC Summit 2014 NewYork 参加報告
 
WebRTCのオーディオ処理の謎、誰か教えて!
WebRTCのオーディオ処理の謎、誰か教えて!WebRTCのオーディオ処理の謎、誰か教えて!
WebRTCのオーディオ処理の謎、誰か教えて!
 

Recently uploaded

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 

Recently uploaded (9)

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 

Node.js with WebRTC DataChannel

  • 2. 自己紹介 • 所属 – インフォコム(株)の調査研究チーム Web担当 • Node学園の過去の発表 – 東京Node学園祭2014 • Nodeで操るKurentoメディアサーバー • http://www.slideshare.net/mganeko/nodekurento – 東京Node学園祭2013 • WebRTCを始めよう • http://www.slideshare.net/mganeko/2013-web-rtcnode • Web記事 – HTML5Experts.jp WebRTC入門2016 • https://html5experts.jp/series/webrtc2016/
  • 3. WebRTCとは • Web Real-Time Communication の略 • Webブラウザ上のリアルタイム通信の規格 – ビデオ/オーディオ … MediaStream – 任意のデータ … DataChannel • どこで使えるか? – PCブラウザ (Chrome, Firefox, もうすぐEdgeでも) – Androidブラウザ (Chrome, Firefox) – ネイティブアプリ (PC, Android, iOS, other) – Node.js 用モジュール
  • 4. Node.jsでWebRTCを使う方法 • Node.js × ブラウザ – NW.js (node-webkit) … http://nwjs.io – Electron … http://electron.atom.io – どちらもデスクトップアプリケーション • 中にChromiumを丸ごと持っているようなもの • Node.js × libwebrtc – Chromiumの中から、WebRTCのライブラリのみ利用 – wrtc (node-webrtc) ... DataChannel のみ対応 • https://github.com/js-platform/node-webrtc – webrtc-native … DataChannel、MediaStream両対応 • https://github.com/vmolsa/webrtc-native
  • 7. インストール方法 • Mac OS X 10.10.x / 10.11.x のケース – npm install wrtc • Ubutnu 16でも同様 • npm install wrtc
  • 8. 使い方(1) 読み込み var WebRTC = require('wrtc'); var RTCPeerConnection = WebRTC.RTCPeerConnection; var RTCIceCandidate= WebRTC.RTCIceCandidate; var RTCSessionDescription = WebRTC.RTCSessionDescription; var RTCDataChannel = WebRTC.RTCDataChannel;
  • 9. 使い方(2) シグナリング • シグナリングとは – P2P通信をするために必要な情報を交換すること • 今日はシグナリングの処理は省略 – 通常シグナリングサーバーを介して行う • WebSocketが使われることが多い(Socket.IOも含む) • 今回は、Socket.IOを利用 • 参考 – WebRTCハンズオン 概要編 • http://qiita.com/massie_g/items/916694413353a3293f73 – WebRTC入門2016 • https://html5experts.jp/mganeko/19814/ • https://html5experts.jp/mganeko/20013/ • https://html5experts.jp/mganeko/20112/ 今回は手順は省略
  • 11. DataChannelを利用する(1) 始める側:ブラウザ var peer = new RTCPeerConnection(config); // P2P通信を始める前(シグナリング前)に、DataChannelを用意する var dataChannel = peer.createDataChannel('channelName', option); dataChannel.onopen = function () { // 接続時の処理 }; dataChannel.onmessage = function (evt) { // データ受信時の処理 var data = evt.data; }; dataChannel.onerror = function (error) { // エラー時の処理 }; dataChannel.onclose = function () { // 切断時の処理 dataChannel = null; };
  • 12. DataChannelを利用する(2) 受ける側: Node.js var peer = new RTCPeerConnection(config); var dataChannel = null; peer.ondatachannel = function(event) { dataChannel = event.channel; // DataChannelを作るのではなく、渡されたものを使う dataChannel.onopen = function () { // 接続時の処理 }; dataChannel.onmessage = function (evt) { // データ受信時の処理 var data = evt.data; }; dataChannel.onerror = function (error) { // エラー時の処理 }; dataChannel.onclose = function () { // 切断時の処理 dataChannel = null; }; };
  • 13. DataChannelを利用する(3) メッセージを送る: ブラウザ/Node.js • dataChannel.send( data ); – dataの型 • DOMString, Blob, ArrayBuffer, ArrayBufferView – dataChannelは双方向
  • 17. ターミナルソフト Node.js側 • pty.js を利用 https://github.com/chjj/pty.js/ • インストール – npm install wrtc – npm install socket.io-client – npm install pty.js • 利用 var WebRTC = require('wrtc'); var IOClient = require('socket.io-client'); var pty = require('pty.js'); 参考
  • 18. pty.jsでターミナルを準備 var ptyTerm; function setupTerminal(cols, rows) { ptyTerm = pty.spawn(process.platform === 'win32' ? 'cmd.exe' : 'bash', [], { name: 'xterm-color', cols: cols || 80, rows: rows || 24, cwd: process.env.PWD, env: process.env }); ptyTerm.on('data', function(data) { dataChannel.send(data); // ターミナルから来たデータをDataChannelに送る }); } 参考
  • 19. DataChannel接続の処理 var dataChannel = null; peer.ondatachannel = function(event) { dataChannel = event.channel; // … 略 … dataChannel.onmessage = function (evt) { ptyTerm.write(evt.data); // ターミナルに送る }; // ターミナルを準備 setupTerminal(80, 25); }; 参考
  • 20. ターミナルソフト ブラウザ側 • xterm.js を利用 https://github.com/sourcelair/xterm.js • 利用 <link rel="stylesheet" href="xterm.css" /> <!—CSS必須 --> <script src="xterm.js"></script> 参考
  • 21. xterm.jsでターミナルの準備 var container = document.getElementById('containerDiv'); // <div> Var term = null; function prepareTerminal() { term = new Terminal({ cols: 80, rows: 24, convertEol: true, //useStyle: true, //screenKeys: true, cursorBlink: true }); term.on('data', function(data) { dataChannel.send(data); // ユーザの入力をデータチャネルに送る }); term.on('title', function(title) { document.title = title; }); term.open(container); // ターミナルのUIを生成 } 参考
  • 22. xterm.jsで応答を表示 var dataChannel = peer.createDataChannel( 'channelName', dataOpt ); // … 省略 … dataChannel.onmessage = function (evt) { term.write(evt.data); // DataCannelで受け取ったデータをターミナルに表示 }; 参考
  • 23. どうしてWebRTC DataChannelを使うの? • sshで良いんじゃない? … ブラウザで色々やりたい • WebSocketで良いんじゃない? – Node.js アプリが「外側」にあるときはOK – では、Node.jsアプリもNATの「内側」にある時は?? Node.jsのアプリ WebSocket「サーバー」 Web ブラウザ NAT Node.js アプリ Web ブラウザ NAT NAT
  • 24. どうしてWebRTC DataChannelを使うの? • WebRTC DataChannel なら NAT越えの仕組みがある – STUNサーバー – UDP ホールパンチング • WiFiにプライバシーセパレーターがあっても通信可能 Node.js アプリ Web ブラウザ STUN サーバー 参考: • WebRTCハンズオン 概要編 - P2P通信行うまで(2-1):NAT越え https://goo.gl/FVYOkA • WebRTCの裏側にあるNATの話 - 答えの前にUDPホールパンチング https://goo.gl/P64kGX NAT NAT
  • 25. どうしてWebRTC DataChannelを使うの? • WebRTC DataChannel なら Firewall/Proxy越えの仕組みもある – TURN, TURN over TCP • …が、いまのところNode.js アプリ側のFirewall越えが成功して ません Node.js アプリ Web ブラウザ TURN サーバー 参考: • WebRTCハンズオン 概要編 - P2P通信行うまで(3):Firewall越え https://goo.gl/MJWxR9 Fire- wall Proxy Fire- wall Proxy
  • 26. あれ? WebSocketでもできるのでは? • WebSocketサーバーを外に立てればできる Node.js + WebSocket クライアント Web ブラウザ WebSocket サーバー Fire- wall Proxy Fire- wall Proxy WebRTC DataChannel との違い • DataChannelの場合、ネットワーク環境が許せば、P2Pで繋がる → レイテンシーが小さくなる • DataChannelの場合、End-to-End で暗号化される ⇔ WebSocketの場合、サーバで暗号解除される。悪意があれば、見たり改変したりできる
  • 28. インストール方法 • Mac OS X 10.10.x 、 Xcode 7.x のケース – git clone https://github.com/vmolsa/webrtc-native – cd webrtc-native – export BUILD_WEBRTC=true – npm install • 注意 – npm install で非常に時間がかかる(数時間?) • webrtcのソース取得、ビルドを実施するため • proxyがある場合は、 ~/.boto ファイルに proxy設定が必要 • Ubuntu 16 でも同様の手順
  • 29. インストール方法(2) • Mac OS X 10.11.x 、 Xcode 8.x のケース – git clone https://github.com/vmolsa/webrtc-native – cd webrtc-native – export BUILD_WEBRTC=true – npm install • → libwebrtc のビルドに失敗 • 原因 – QTKit (QuickTime Kit) が見つからない、というエラー – Xcode 8 から QuickTime廃止、AVFoundationを利用 – Webrtc-native は Chromium 50 ベースでQTKitに依存 • Chromium 51〜 QTKit不要になっているが… • 対策 – 最新Chromiumのソースを取得するようにビルドスクリプトを修正 • → 挫折 – Xcode 7.x でビルドした build/Release/webrtc.node をコピーしてくる • → なんとか動いた
  • 30. 使い方 読み込み // webrtc-native をインストールしたディレクトリで var WebRTC = require('./'); var RTCPeerConnection = WebRTC.RTCPeerConnection; var RTCIceCandidate= WebRTC.RTCIceCandidate; var RTCSessionDescription = WebRTC.RTCSessionDescription; var RTCDataChannel = WebRTC.RTCDataChannel; // あとの使い方は、wrtcと同じ
  • 31. まとめ • WebRTC は Webブラウザだけじゃない • DataChannel なら Node.js からも使える • NATの内側のNode.jsアプリにも接続できる • Node.js で P2P アプリが作れる – センサーデータの送受信? – コンテンツ配信、ファイル共有? – きっと、もっと楽しいことができるはず!