More Related Content
PDF
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】 PPTX
WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介 PDF
PDF
Edge AI ソリューションを支える Azure IoT サービス PDF
第三回ありえる社内勉強会 「いわががのLombok」 PDF
PDF
PDF
What's hot
PDF
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online PPTX
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら PDF
Python 3.9からの新定番zoneinfoを使いこなそう PDF
Unityのサウンド状況を調べまくって分かったアレコレ PDF
ATEMスイッチャーSDKを使用したライブ動画配信用制作・送出システムの開発 PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け PDF
PDF
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams PPTX
PDF
PDF
ヤフーのプライベートクラウドとクラウドエンジニアの業務について PDF
PPTX
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon PDF
PPTX
PDF
PDF
05 第4.4節-第4.8節 ROS2の応用機能(2/2) PPTX
PDF
PDF
君にもできる! にゅーとろん君になってみよー!! 「Neutronになって理解するOpenStack Net - OpenStack最新情報セミナー ... Similar to WebRTCがよく分からないから調べて試してみた
PDF
WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術 PPTX
WebRTC SFU Mediasoup Sample update PDF
PDF
実践 WebRTC 〜最新事例と開発ノウハウの紹介〜 PDF
PDF
5分でわかるWebRTCの仕組み - html5minutes vol.01 PDF
PPTX
PPTX
WebRTC getStats - WebRTC Meetup Tokyo 5 LT PDF
PPTX
PPTX
PDF
PPTX
PDF
PDF
WebRTC Boot Camp (WebRTC Conference Japan 2016) 事前公開版 PDF
ビデオ通話・P2Pがコモディティ化する世界 WebRTCによるこれからを探る PDF
PPTX
2016 February - WebRTC Conference Japan - 日本語 PDF
エンタープライズ環境におけるWebRTC活用のポイント Recently uploaded
PDF
krsk_aws_re-growth_aws_devops_agent_20251211 PDF
ソフトとハードの二刀流で実現する先進安全・自動運転のアルゴリズム開発【DENSO Tech Night 第二夜】 ー高精度な画像解析 / AI推論モデル ... PDF
ソフトウェアエンジニアがクルマのコアを創る!? モビリティの価値を最大化するソフトウェア開発の最前線【DENSO Tech Night 第一夜】 PDF
2025/12/12 AutoDevNinjaピッチ資料 - 大人な男のAuto Dev環境 PPTX
君をむしばむこの力で_最終発表-1-Monthon2025最終発表用資料-.pptx PDF
音楽アーティスト探索体験に特化した音楽ディスカバリーWebサービス「DigLoop」|Created byヨハク技研 WebRTCがよく分からないから調べて試してみた
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
Step 1
音声や映像をブラウザで取得
constraints ={
audio: true,
video: true
// 以下の様な指定もできる
// video: { width: 1280, height: 720 }
// video: { facingMode: "user" }
}
navigator.mediaDevices.getUserMedia(constraints)
.then(function(stream) {
//
})
.catch(function(err) {
//
});
実行するとブラウザ上で許可通知が表示される
許可を選択後、音声/映像のストリームを取得できる
- 13.
Step 2
シグナリングサーバー
// websocketを用いた簡易なシグナリングサーバの例
constWebSocketServer = require('ws').Server;
const port = 3001;
const wsServer = new WebSocketServer({ port: port });
wsServer.on('connection', function(ws) {
ws.on('message', function(message) {
wsServer.clients.forEach(function each(client) {
if (ws==client) {
// skip
}
else {
client.send(message);
}
});
});
});
シグナリングサーバの役割
・接続するクライアントの管理
・SDPの交換仲介(step3,4)
P2Pの接続を行う前のやり取りを担う
WebRTCにおいてシグナリングの実装仕様は
特に定められていない
- 14.
Step 3
SDP Offer
constpc = new RTCPeerConnection();
const stream = await
navigator.mediaDevices.getUserMedia({
audio: true, video: true
});
for (const track of stream.getTracks()) {
pc.addTrack(track, stream);
}
const offer = await pc.createOffer();
// offer.type >> offer
// offer.sdp >> sdpの内容
// setLocalDescription が実行されると発火
pc.onicecandidate = event => {
if (event.candidate) {
// skip
} else {
// 全ての候補を探索終了
// シグナリングサーバを介してSDPを送信する処理
sendSDP(pc.localDescription);
}
}
// SDP offerを自身に設定
await pc.setLocalDescription(offer);
Session Description Protocol
接続する双方でやり取りするメディアの仕様を把握する必
要がある
メディアの仕様を記述したものが SDP
通信を始める側から SDPのOfferを送り、
応答側がSDP のAnswerを送る
v=0
o=- 4305894064294705670 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0
a=extmap-allow-mixed
a=msid-semantic: WMS OEleWTR9mctlixnN3JeYZyfVDRDbg6bpv101
m=video 51510 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127
120 125 107 108 109 35 36 124 119 123 118 114 115 116
c=IN IP4 217.178.96.190
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:3290292206 1 udp 2113937151
fd42935f-ef3f-4fcc-90f5-ffafaa339117.local 51510 typ host
generation 0 network-cost 999
...
SDP例
- 15.
Step 4
SDP Answer
//Answer側のクライアント
const pc = new RTCPeerConnection();
// offer側同様にstreamを取得してセット
const stream = await
navigator.mediaDevices.getUserMedia({
audio: true, video: true
});
for (const track of stream.getTracks()) {
pc.addTrack(track, stream);
}
// シグナリングサーバを介してOffer SDPを取得
const offer = getOfferSDP();
// offer側のSDPをセット
await pc.setRemoteDescription(offer);
pc.onicecandidate = event => {
if (event.candidate) {
// skip
} else {
sendSDP(pc.localDescription);
}
}
const answer = await pc.createAnswer();
await pc.setLocalDescription(answer);
Session Description Protocol
接続する双方でやり取りするメディアの仕様を把握する必
要がある
メディアの仕様を記述したものが SDP
通信を始める側から SDPのOfferを送り、
応答側がSDP のAnswerを送る
v=0
o=- 4305894064294705670 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0
a=extmap-allow-mixed
a=msid-semantic: WMS OEleWTR9mctlixnN3JeYZyfVDRDbg6bpv101
m=video 51510 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127
120 125 107 108 109 35 36 124 119 123 118 114 115 116
c=IN IP4 217.178.96.190
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:3290292206 1 udp 2113937151
fd42935f-ef3f-4fcc-90f5-ffafaa339117.local 51510 typ host
generation 0 network-cost 999
...
SDP例
- 16.
Step 5
P2P通信
const pc= new RTCPeerConnection();
// 通信相手がメディアを送った場合に発火
pc.ontrack = event => {
event.track; // MediaStreamTrack
event.streams; // MediaStream
}
// 通信相手の接続状態に変化が合った場合に発火
pc.oniceconnectionstatechange = () => {
pc.iceConnectionState;
// 'closed'
// 'failed'
// 'disconnected' etc..
}
// 切断
pc.close()
P2P以外を用いる方法もある
P2P:: ブラウザ同士で通信
good サーバが不要
bad 接続が増えると負荷が⤴
MCU:: サーバでメディアを合成
good ブラウザの負荷が低い
bad サーバ負荷が高い
SFU:: サーバでメディアを分岐
good ブラウザの負荷が低い (上り)
bad サーバが必要
- 17.
- 18.
- 19.