SlideShare a Scribd company logo
meidasoup on Raspberry Pi 3
WebRTC Meetup Tokyo #16 LT
WebRTC Meetup Osaka #1 LT
インフォコム株式会社
がねこまさし
@massie_g
2017.08.25
1
自己紹介
• がねこまさし / @massie_g
• インフォコム(株)の技術調査チームに所属
• WebRTC Meetup Tokyo スタッフ
• WebRTC Begginers Tokyo スタッフ
• WebRTC入門2016を HTML5Experts.jpに執筆
– https://html5experts.jp/series/webrtc2016/
2
今日のお題
• 前々回(#13)の復習
– SFU : Selective forwarding Unit
– mediasoup : オープンソースのSFU モジュール
• Raspberry Pi 3で動かしてみた
3
前々回(#13)の復習
※使いまわし
4
P2P と SFU:Selective Forwarding Unit
ブラウザ
A
ブラウザ
B
ブラウザ
D
ブラウザ
C
P2Pの場合
• サーバ不要 ◎
• ブラウザ側の
• CPU負荷:高 ×
• ネットワーク負荷:高 ×
5
ブラウザ
A
ブラウザ
B
ブラウザ
D
ブラウザ
C
SFU
映像・音声
を分岐/配信
SFUの場合
• SFUサーバ必要 → CPU負荷:低 ○
• ブラウザ側はCPU負荷:低め ○
• ブラウザ側はネットワーク負荷:中 △
表示レイアウトの
自由度が高い ◎
MCU と SFU
6
ブラウザ
A
ブラウザ
B
ブラウザ
D
ブラウザ
C
SFU
映像・音声
を分岐/配信
ブラウザ
A
ブラウザ
B
ブラウザ
D
ブラウザ
C
MCU
映像・音声
を合成
MCUの場合
• MCUサーバ必要 → CPU負荷:激高 ××
• ブラウザ側はCPU/ネットワーク負荷:低 ◎
SFUの場合
• SFUサーバ必要 → CPU負荷:低 ○
• ブラウザ側はCPU負荷:低め ○
• ブラウザ側はネットワーク負荷:中 △
表示レイアウトの
自由度が高い ◎
圧縮と暗号化
7
Browser
いらすとや http://www.irasutoya.com/
BrowserP2P
圧縮/エンコード
暗号化
通信 復号化
解凍/デコード
TURN Browser
TURN Browser
SFU
MCU
Browser SFU Browser
Browser MCU Browser
mediasoupとは?
• オープンソースのSFU
– サイト https://mediasoup.org/
– GitHub https://github.com/ibc/mediasoup/ → https://github.com/versatica/mediasoup
• 独立したサーバーではなく、部品
– Instead of creating yet another opinionated server, mediasoup is a Node.js module
which can be integrated into a larger application or made standalone with just a few
lines of JavaScript.
– 「他のアプリに組み込める」
• Node.js用モジュールとして提供
– Webサーバーやシグナリングの仕組みは、自分で用意する必要あり
8
mediasoupとは? (2)
• ミニマム … メディアのみ、かつSFUなのでコーデックは処理しない
• パワフル … 実体は C++ で記述、libuv 利用
– Node.js から起動された子プロセスで通信を担当
– Node.js とはプロセス間通信でやりとり
• JavaScript API を提供
– WebRTC 1.0 … RTCPeerConnection, promise利用
– ORTC … Transport, RtpSender, RtpReceiver
9
mediasoup サンプル
10
• ソースコード
– https://github.com/mganeko/mediasoup_sample
• 内容
– 複数人双方向
– 片方向配信(ちょっと手抜き)
– SSL対応版もあり
mediasoup のインストール
• 前提環境
– Node.js v4.8.0 以上
– Linux / Mac OS X ※Windowsは未サポート
– Python 2.x (ビルド時のみ)
• pyenv / virtualenv利用時は要注意。明示的なローカルPythonのバージョン指定が必要
• $ pyenv local 2.7.12
– make
– gcc & g++ または clang, with C++11
• インストール
– $ npm install mediasoup
• C++のコンパイルあり、数分から数十分でビルド→インストール完了
11
Raspberry Pi 3 で動かしてみた
12
Raspberry Pi 3
• 質問
– 知っていますか?
– 持っていますか?
• こんなやつです →
– ARMv8 - 4 Core, 1.2 GHz
– RAM 1GB
– 6000円ぐらい
13
mediasoupのビルドの準備
• OS: RASPBIAN JESSIE WITH PIXEL
– https://www.raspberrypi.org/downloads/raspbian/
• ビルドに必要な環境
– Python 2.x … Python 2.7.x
– make … GNU Make 4.0
– C/C++ … gcc version 4.9.2
14
mediasoupのビルド(含 サンプル)
# サンプルを含む、必要モジュールの取得とビルド
git clone https://github.com/mganeko/mediasoup_sample.git
npm install
# → 20分程度でビルド完了
# 実行
node mediasoup_sample_multi.js
# その後 PC/Mac から接続
15
デモ
• Raspberry Pi 3 で mediasoup のサンプル起動
• Mac のFirefox, Chromeから接続
– http://raspi3.local:3000/
– 双方向で繋がる
• mediasoupを停止すると、映像も停止
16
動かしてみて
• CPU負荷 … 5人で25%程度
– 少人数なら使えそう
– CPUよりも先に、WiFiがいっぱいいっぱいに…
• 意外とちょくちょくP2Pが切れる
– oniceconnectionstatechange で disconnected
– → ちょっと待てば繋がる
17
ちょっとした工夫:madiasoup編
• Bandwidthを制限したら、ネットワーク負荷が軽くなる?
– mediasoupではmaxBitrate
// 500kbps に制限
let peerconnection = new RTCPeerConnection({
peer : peer,
usePlanB : planb,
maxBitrate: 500000
});
// → 制限は効いている。効果は良く分らない(やっぱり時々固まる)
18
ちょっとした工夫:Chrome編
• 今回 Raspberry Pi 3 のサーバは http:// ~
– Web / シグナリング / mediasoup
• Chromeでは、getUserMedia()できない
• → Webサーバーだけ、PC/Macのローカルに立てる
– HTMLを、ローカルにもコピーしておく
• ※WebSocketの接続先はRasberry Pi 3になるように修正
19
ちょっとした工夫:Chrome編
20
Rasberry Pi 3
WebSocket サーバー
mediasoup サーバー
PC / Mac
Web サーバー
Chrome
HTTP
(localhost)WebSocket
WebRTC
(UDP)
Web サーバー
ちょっとした工夫:ソフト編
• Raspberry Pi 3 のIPアドレスが分かるように
– DHCPで動的に取得している → コンソールが無いとIPアドレスが分からない
• avahi を導入 … Zeroconf 仕様の実装
– Mac で言う「Bonjour」のこと 。mDNSを利用 (5353/UDPのマルチキャスト)
– sudo apt-get install avahi-daemon
• ※OSセットアップ時にすでに導入されていた
• 参考 http://d.hatena.ne.jp/pasela/20131023/mdns
– ホスト名が「raspi3」なら → Macから 「raspi3.local」 で名前解決できる
• ping raspi3. local
• ssh raspi3.local
• http://raspi3.local:3000/ , ws://raspi3.local:3001/
21
ちょっとした工夫:ハード編
• IPアドレスが「ひと目」で分かるように
• Apple Pi ボードを利用
– トランジスタ技術 2016年8月号 ふろく(基盤のみ)
• http://bit-trade-one.co.jp/product/module/adcq1608p/
• 液晶、ボタン ← 今回使ったのはこれだけ
• D-Aコンバーター、温度/湿度/気圧センサー、赤外線リモコン
– 完成品も販売中 … 6000円程度
• http://eleshop.jp/shop/g/gG78311/
• ボタンの監視
– Python で記述、(割り込みではなく)1秒ごとのポーリング (手抜き)
– [IPアドレス表示]、[リブート]、[シャットダウン]
22
シャットダウン デモ
• Raspberry Pi 3 で mediasoupを起動
• PC/Mac から接続
• Raspberry Pi 3 / Apple Pi のボタンを押して
– シャットダウン
• 2 … 1 … 0 …
23
まとめ
• mediasoup は、LinuxであればARMでも動く
– Raspberry Pi 3 でも動く
– きっと、他のボードでも動く
– ※ CPUよりもネットワークの性能がボトルネックになる可能性あり
• 本日のプレゼン資料は SlideShareに
– https://www.slideshare.net/mganeko/webrtc-sfu-mediasoup-sample-update
• ソースコードは GitHubに
– https://github.com/mganeko/mediasoup_sample
24
Thank you!
25

More Related Content

PDF
WebRTC と Native とそれから、それから。
tnoho
 
PDF
IL2CPPに関する軽い話
Wooram Yang
 
PPTX
WebRTC SFU Mediasoup Sample update
mganeko
 
PDF
MagicOnion入門
torisoup
 
PDF
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
エピック・ゲームズ・ジャパン Epic Games Japan
 
PDF
UnityのクラッシュをBacktraceでデバッグしよう!
Unity Technologies Japan K.K.
 
PDF
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
 
PPTX
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
エピック・ゲームズ・ジャパン Epic Games Japan
 
WebRTC と Native とそれから、それから。
tnoho
 
IL2CPPに関する軽い話
Wooram Yang
 
WebRTC SFU Mediasoup Sample update
mganeko
 
MagicOnion入門
torisoup
 
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
エピック・ゲームズ・ジャパン Epic Games Japan
 
UnityのクラッシュをBacktraceでデバッグしよう!
Unity Technologies Japan K.K.
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
 
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
エピック・ゲームズ・ジャパン Epic Games Japan
 

What's hot (20)

PPTX
WebRTC SFU mediasoup sample
mganeko
 
PDF
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Esun Kim
 
PPTX
WebRTC multitrack / multistream
mganeko
 
PDF
WebRTCの技術解説 公開版
Contest Ntt-west
 
PDF
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
Jun-ichi Sakamoto
 
PDF
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
UnityTechnologiesJapan002
 
PDF
Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2
Kiyotaka Doumae
 
PDF
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Yoshifumi Kawai
 
PPTX
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
Game Tools & Middleware Forum
 
PDF
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
エピック・ゲームズ・ジャパン Epic Games Japan
 
PPTX
フロー技術によるネットワーク管理
Motonori Shindo
 
PDF
UE4のモバイル向け機能や最新情報などを改めて紹介!2019
エピック・ゲームズ・ジャパン Epic Games Japan
 
PDF
仮想化環境におけるパケットフォワーディング
Takuya ASADA
 
PDF
ネットワーク自動化ツール紹介(Ansible・NAPALM編)
akira6592
 
PPTX
未来のプログラミング技術をUnityで -UniRx-
torisoup
 
PDF
C++からWebRTC (DataChannel)を利用する
祐司 伊藤
 
PDF
60fpsアクションを実現する秘訣を伝授 基礎編
エピック・ゲームズ・ジャパン Epic Games Japan
 
PPTX
UE4で使えるSpatialized Audio Plug-inどう違うの?どれ使えばいいの?
Satoru Okubo
 
PDF
メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例
エピック・ゲームズ・ジャパン Epic Games Japan
 
WebRTC SFU mediasoup sample
mganeko
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Esun Kim
 
WebRTC multitrack / multistream
mganeko
 
WebRTCの技術解説 公開版
Contest Ntt-west
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
Jun-ichi Sakamoto
 
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
UnityTechnologiesJapan002
 
Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2
Kiyotaka Doumae
 
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Yoshifumi Kawai
 
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
Game Tools & Middleware Forum
 
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
エピック・ゲームズ・ジャパン Epic Games Japan
 
フロー技術によるネットワーク管理
Motonori Shindo
 
UE4のモバイル向け機能や最新情報などを改めて紹介!2019
エピック・ゲームズ・ジャパン Epic Games Japan
 
仮想化環境におけるパケットフォワーディング
Takuya ASADA
 
ネットワーク自動化ツール紹介(Ansible・NAPALM編)
akira6592
 
未来のプログラミング技術をUnityで -UniRx-
torisoup
 
C++からWebRTC (DataChannel)を利用する
祐司 伊藤
 
60fpsアクションを実現する秘訣を伝授 基礎編
エピック・ゲームズ・ジャパン Epic Games Japan
 
UE4で使えるSpatialized Audio Plug-inどう違うの?どれ使えばいいの?
Satoru Okubo
 
メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例
エピック・ゲームズ・ジャパン Epic Games Japan
 
Ad

Similar to WebRTC mediasoup on raspberrypi3 (20)

PDF
ICSをビルドしてみた
kinneko
 
PDF
runC概要と使い方
Yuji Oshima
 
PDF
How to run P4 BMv2
Kentaro Ebisawa
 
PDF
Kernel vm-2014-05-25
Hirochika Asai
 
PDF
Raspberry Pi用のコンテナをクラウドでビルドする方法
Shunsuke Kikuchi
 
PDF
IBM Rational Team Concertに触れてみた
You&I
 
PPTX
210728 mpy
Takuya Nishimoto
 
PDF
20150227 イタンジプログラミング講座テキスト第4回
Yusuke Yokozawa
 
PDF
SIerによるSIerのためのRaspberry Pi 入門4 (タイムラプス、Lチカ)
catmoney
 
PDF
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
Tetsuo Yamabe
 
PDF
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
モノビット エンジン
 
PPTX
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
Ryuichi Ueda
 
PDF
Raspberry Pi and WebIOPi
hiro345
 
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
Katsuhiro Morishita
 
PPTX
MediaRecorder と WebM で、オレオレ Live Streaming
mganeko
 
PDF
CPUでもOK,はじめてのローカル画像生成AI。Stable-Diffusion-ForgeとFastSD CPU,Draw Things他など。練習例題...
Netwalker lab kapper
 
PDF
Djangoとweb2pyをapacheに組込む
2bo 2bo
 
ODP
Raspberrypi+yocto in Yocto Workshop Japan #1
kazuya-nisimura
 
PPTX
root権限無しでKubernetesを動かす
Akihiro Suda
 
PPTX
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
Hideki Takase
 
ICSをビルドしてみた
kinneko
 
runC概要と使い方
Yuji Oshima
 
How to run P4 BMv2
Kentaro Ebisawa
 
Kernel vm-2014-05-25
Hirochika Asai
 
Raspberry Pi用のコンテナをクラウドでビルドする方法
Shunsuke Kikuchi
 
IBM Rational Team Concertに触れてみた
You&I
 
210728 mpy
Takuya Nishimoto
 
20150227 イタンジプログラミング講座テキスト第4回
Yusuke Yokozawa
 
SIerによるSIerのためのRaspberry Pi 入門4 (タイムラプス、Lチカ)
catmoney
 
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
Tetsuo Yamabe
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
モノビット エンジン
 
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
Ryuichi Ueda
 
Raspberry Pi and WebIOPi
hiro345
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
Katsuhiro Morishita
 
MediaRecorder と WebM で、オレオレ Live Streaming
mganeko
 
CPUでもOK,はじめてのローカル画像生成AI。Stable-Diffusion-ForgeとFastSD CPU,Draw Things他など。練習例題...
Netwalker lab kapper
 
Djangoとweb2pyをapacheに組込む
2bo 2bo
 
Raspberrypi+yocto in Yocto Workshop Japan #1
kazuya-nisimura
 
root権限無しでKubernetesを動かす
Akihiro Suda
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
Hideki Takase
 
Ad

More from mganeko (20)

PDF
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
mganeko
 
PPTX
Amazon Kinesis Video Streams WebRTC 使ってみた
mganeko
 
PPTX
Build Node.js-WASM/WASI Tiny compiler with Node.js
mganeko
 
PPTX
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
mganeko
 
PPTX
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
mganeko
 
PPTX
Skywayのビデオチャットを録画しよう。そう、ブラウザでね
mganeko
 
PPTX
ブラウザでWebRTC - iOSゲートウェイ作ってみた
mganeko
 
PDF
Inside of 聖徳玉子 by O2
mganeko
 
PDF
Node.js with WebRTC DataChannel
mganeko
 
PPTX
WebRTC Build MCU on browser
mganeko
 
PPTX
PeerConnectionリレーとMediaRecorder
mganeko
 
PPTX
ここがつらいよWebRTC - WebRTC開発の落とし穴
mganeko
 
PPTX
Webrtc bootcamp handson
mganeko
 
PDF
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
mganeko
 
PDF
WebRTC multistream
mganeko
 
PPTX
Inside WebM
mganeko
 
PPTX
Chromebook 「だけ」で WebRTCを動かそう
mganeko
 
PPTX
Infocom webrtc conference japan
mganeko
 
PPTX
WebRTC getStats - WebRTC Meetup Tokyo 5 LT
mganeko
 
PPTX
Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )
mganeko
 
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
mganeko
 
Amazon Kinesis Video Streams WebRTC 使ってみた
mganeko
 
Build Node.js-WASM/WASI Tiny compiler with Node.js
mganeko
 
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
mganeko
 
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
mganeko
 
Skywayのビデオチャットを録画しよう。そう、ブラウザでね
mganeko
 
ブラウザでWebRTC - iOSゲートウェイ作ってみた
mganeko
 
Inside of 聖徳玉子 by O2
mganeko
 
Node.js with WebRTC DataChannel
mganeko
 
WebRTC Build MCU on browser
mganeko
 
PeerConnectionリレーとMediaRecorder
mganeko
 
ここがつらいよWebRTC - WebRTC開発の落とし穴
mganeko
 
Webrtc bootcamp handson
mganeko
 
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
mganeko
 
WebRTC multistream
mganeko
 
Inside WebM
mganeko
 
Chromebook 「だけ」で WebRTCを動かそう
mganeko
 
Infocom webrtc conference japan
mganeko
 
WebRTC getStats - WebRTC Meetup Tokyo 5 LT
mganeko
 
Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )
mganeko
 

Recently uploaded (9)

PDF
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
PPTX
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
PPTX
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
PDF
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
PDF
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
PDF
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
PDF
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
PDF
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
PDF
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
20250729_Devin-for-Enterprise
Masaki Yamakawa
 

WebRTC mediasoup on raspberrypi3

  • 1. meidasoup on Raspberry Pi 3 WebRTC Meetup Tokyo #16 LT WebRTC Meetup Osaka #1 LT インフォコム株式会社 がねこまさし @massie_g 2017.08.25 1
  • 2. 自己紹介 • がねこまさし / @massie_g • インフォコム(株)の技術調査チームに所属 • WebRTC Meetup Tokyo スタッフ • WebRTC Begginers Tokyo スタッフ • WebRTC入門2016を HTML5Experts.jpに執筆 – https://html5experts.jp/series/webrtc2016/ 2
  • 3. 今日のお題 • 前々回(#13)の復習 – SFU : Selective forwarding Unit – mediasoup : オープンソースのSFU モジュール • Raspberry Pi 3で動かしてみた 3
  • 5. P2P と SFU:Selective Forwarding Unit ブラウザ A ブラウザ B ブラウザ D ブラウザ C P2Pの場合 • サーバ不要 ◎ • ブラウザ側の • CPU負荷:高 × • ネットワーク負荷:高 × 5 ブラウザ A ブラウザ B ブラウザ D ブラウザ C SFU 映像・音声 を分岐/配信 SFUの場合 • SFUサーバ必要 → CPU負荷:低 ○ • ブラウザ側はCPU負荷:低め ○ • ブラウザ側はネットワーク負荷:中 △ 表示レイアウトの 自由度が高い ◎
  • 6. MCU と SFU 6 ブラウザ A ブラウザ B ブラウザ D ブラウザ C SFU 映像・音声 を分岐/配信 ブラウザ A ブラウザ B ブラウザ D ブラウザ C MCU 映像・音声 を合成 MCUの場合 • MCUサーバ必要 → CPU負荷:激高 ×× • ブラウザ側はCPU/ネットワーク負荷:低 ◎ SFUの場合 • SFUサーバ必要 → CPU負荷:低 ○ • ブラウザ側はCPU負荷:低め ○ • ブラウザ側はネットワーク負荷:中 △ 表示レイアウトの 自由度が高い ◎
  • 8. mediasoupとは? • オープンソースのSFU – サイト https://mediasoup.org/ – GitHub https://github.com/ibc/mediasoup/ → https://github.com/versatica/mediasoup • 独立したサーバーではなく、部品 – Instead of creating yet another opinionated server, mediasoup is a Node.js module which can be integrated into a larger application or made standalone with just a few lines of JavaScript. – 「他のアプリに組み込める」 • Node.js用モジュールとして提供 – Webサーバーやシグナリングの仕組みは、自分で用意する必要あり 8
  • 9. mediasoupとは? (2) • ミニマム … メディアのみ、かつSFUなのでコーデックは処理しない • パワフル … 実体は C++ で記述、libuv 利用 – Node.js から起動された子プロセスで通信を担当 – Node.js とはプロセス間通信でやりとり • JavaScript API を提供 – WebRTC 1.0 … RTCPeerConnection, promise利用 – ORTC … Transport, RtpSender, RtpReceiver 9
  • 10. mediasoup サンプル 10 • ソースコード – https://github.com/mganeko/mediasoup_sample • 内容 – 複数人双方向 – 片方向配信(ちょっと手抜き) – SSL対応版もあり
  • 11. mediasoup のインストール • 前提環境 – Node.js v4.8.0 以上 – Linux / Mac OS X ※Windowsは未サポート – Python 2.x (ビルド時のみ) • pyenv / virtualenv利用時は要注意。明示的なローカルPythonのバージョン指定が必要 • $ pyenv local 2.7.12 – make – gcc & g++ または clang, with C++11 • インストール – $ npm install mediasoup • C++のコンパイルあり、数分から数十分でビルド→インストール完了 11
  • 12. Raspberry Pi 3 で動かしてみた 12
  • 13. Raspberry Pi 3 • 質問 – 知っていますか? – 持っていますか? • こんなやつです → – ARMv8 - 4 Core, 1.2 GHz – RAM 1GB – 6000円ぐらい 13
  • 14. mediasoupのビルドの準備 • OS: RASPBIAN JESSIE WITH PIXEL – https://www.raspberrypi.org/downloads/raspbian/ • ビルドに必要な環境 – Python 2.x … Python 2.7.x – make … GNU Make 4.0 – C/C++ … gcc version 4.9.2 14
  • 15. mediasoupのビルド(含 サンプル) # サンプルを含む、必要モジュールの取得とビルド git clone https://github.com/mganeko/mediasoup_sample.git npm install # → 20分程度でビルド完了 # 実行 node mediasoup_sample_multi.js # その後 PC/Mac から接続 15
  • 16. デモ • Raspberry Pi 3 で mediasoup のサンプル起動 • Mac のFirefox, Chromeから接続 – http://raspi3.local:3000/ – 双方向で繋がる • mediasoupを停止すると、映像も停止 16
  • 17. 動かしてみて • CPU負荷 … 5人で25%程度 – 少人数なら使えそう – CPUよりも先に、WiFiがいっぱいいっぱいに… • 意外とちょくちょくP2Pが切れる – oniceconnectionstatechange で disconnected – → ちょっと待てば繋がる 17
  • 18. ちょっとした工夫:madiasoup編 • Bandwidthを制限したら、ネットワーク負荷が軽くなる? – mediasoupではmaxBitrate // 500kbps に制限 let peerconnection = new RTCPeerConnection({ peer : peer, usePlanB : planb, maxBitrate: 500000 }); // → 制限は効いている。効果は良く分らない(やっぱり時々固まる) 18
  • 19. ちょっとした工夫:Chrome編 • 今回 Raspberry Pi 3 のサーバは http:// ~ – Web / シグナリング / mediasoup • Chromeでは、getUserMedia()できない • → Webサーバーだけ、PC/Macのローカルに立てる – HTMLを、ローカルにもコピーしておく • ※WebSocketの接続先はRasberry Pi 3になるように修正 19
  • 20. ちょっとした工夫:Chrome編 20 Rasberry Pi 3 WebSocket サーバー mediasoup サーバー PC / Mac Web サーバー Chrome HTTP (localhost)WebSocket WebRTC (UDP) Web サーバー
  • 21. ちょっとした工夫:ソフト編 • Raspberry Pi 3 のIPアドレスが分かるように – DHCPで動的に取得している → コンソールが無いとIPアドレスが分からない • avahi を導入 … Zeroconf 仕様の実装 – Mac で言う「Bonjour」のこと 。mDNSを利用 (5353/UDPのマルチキャスト) – sudo apt-get install avahi-daemon • ※OSセットアップ時にすでに導入されていた • 参考 http://d.hatena.ne.jp/pasela/20131023/mdns – ホスト名が「raspi3」なら → Macから 「raspi3.local」 で名前解決できる • ping raspi3. local • ssh raspi3.local • http://raspi3.local:3000/ , ws://raspi3.local:3001/ 21
  • 22. ちょっとした工夫:ハード編 • IPアドレスが「ひと目」で分かるように • Apple Pi ボードを利用 – トランジスタ技術 2016年8月号 ふろく(基盤のみ) • http://bit-trade-one.co.jp/product/module/adcq1608p/ • 液晶、ボタン ← 今回使ったのはこれだけ • D-Aコンバーター、温度/湿度/気圧センサー、赤外線リモコン – 完成品も販売中 … 6000円程度 • http://eleshop.jp/shop/g/gG78311/ • ボタンの監視 – Python で記述、(割り込みではなく)1秒ごとのポーリング (手抜き) – [IPアドレス表示]、[リブート]、[シャットダウン] 22
  • 23. シャットダウン デモ • Raspberry Pi 3 で mediasoupを起動 • PC/Mac から接続 • Raspberry Pi 3 / Apple Pi のボタンを押して – シャットダウン • 2 … 1 … 0 … 23
  • 24. まとめ • mediasoup は、LinuxであればARMでも動く – Raspberry Pi 3 でも動く – きっと、他のボードでも動く – ※ CPUよりもネットワークの性能がボトルネックになる可能性あり • 本日のプレゼン資料は SlideShareに – https://www.slideshare.net/mganeko/webrtc-sfu-mediasoup-sample-update • ソースコードは GitHubに – https://github.com/mganeko/mediasoup_sample 24