An open API service indexing awesome lists of open source software.

https://github.com/leye195/webrtc_tutorial

๐Ÿ™Š WebRTC Tutorial, WebRTC๋ฅผ ํ™œ์šฉํ•ด ๊ฐ„๋‹จํ•œ ํ™”์ƒํ†ตํ™”๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์ž
https://github.com/leye195/webrtc_tutorial

express react webrtc

Last synced: 2 months ago
JSON representation

๐Ÿ™Š WebRTC Tutorial, WebRTC๋ฅผ ํ™œ์šฉํ•ด ๊ฐ„๋‹จํ•œ ํ™”์ƒํ†ตํ™”๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์ž

Awesome Lists containing this project

README

        

# WAVA (WebRTC Studying)

- [x] React (TypeScript), styled-components
- [x] Socket.io
- [x] Express
- [x] WebRTC (Peer)
- [x] Node.js

## ToDo

- [x] WebRTC๋ฅผ ํ™œ์šฉํ•ด ๊ฐ„๋‹จํ•œ ํ™”์ƒํ†ตํ™”๋ฅผ ๊ตฌํ˜„
- [x] ์„œ๋ฒ„ ์—ฐ๊ฒฐ jwtํ† ํฐ ๋ฐฉ์‹ ๋กœ๊ทธ์ธ ๊ตฌํ˜„
- [x] ํ†ตํ™” ์˜์ƒ ์—ฐ๊ฒฐ

## WebRTC

### ํŠน์ง•

- WebRTC๋Š” ์„œ๋ฒ„๋ฅผ ํ†ตํ•˜์ง€ ์•Š๊ณ  ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜(์ตœ๊ทผ์—๋Š” android ๋ฐ ios๋„ ์ง€์›) ๋ฐ ์‚ฌ์ดํŠธ๋“ค ์ฆ‰, ํด๋ผ์ด์–ธํŠธ์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณ„๋„์˜ ์†Œํ”„ํŠธ์›จ์–ด ์—†์ด ์Œ์„ฑ, ์˜์ƒ ๋ฏธ๋””์–ด ํ˜น์€ ํ…์ŠคํŠธ, ํŒŒ์ผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๋ผ๋ฆฌ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ๊ธฐ์ˆ ์ด๋‹ค(Peer to Peer).
- ์–ด๋–ค ํ”Œ๋Ÿฌ๊ทธ์ธ ์—†์ด ์Œ์„ฑ์ฑ„ํŒ…์€ ๋ฌผ๋ก ์ด๋ฉฐ ํ™”์ƒ์ฑ„ํŒ…, ๋ฐ์ดํ„ฐ ๊ตํ™˜๊นŒ์ง€๋„ ๊ฐ€๋Šฅ, ํ•˜์ง€๋งŒ ์ผ๋ถ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์ง€์›ํ•˜์ง€ ์•Š์Œ
- ์•ˆ์ •์„ฑ์ด ์ข‹์€ TCP๊ฐ€ ์•„๋‹Œ ์†๋„๊ฐ€ ๋น ๋ฅธ UDP๋ฅผ ์‚ฌ์šฉ,
- ํ˜„์žฌ ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์ด ์—†๋‹ค๊ณ  ํ•œ๋‹ค.

### ์šฉ์–ด ์ •๋ฆฌ

#### NAT

- ์™ธ๋ถ€๋ง๊ณผ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ณต์ธ๋ง๊ณผ ๋‚ด๋ถ€๋ง์˜ IP:Port๋ฅผ ๋งคํ•‘ํ•ด์ฃผ๋Š” ๊ฒƒ

#### Stun Server, Turn Server

1. Stun(Session Traversal Utilities for NAT):

- ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ/ํŒจํ‚ท ํฌ๋งท์œผ๋กœ, ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ Discovery? ๋ฅผ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ๋ฉ”์‹ ์ €๋“ค ๋ผ๋ฆฌ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด STUNํŒจํ‚ท์„ ์ด์šฉํ•œ๋‹ค. STUN์€ IP ์ข…๋‹จ์„ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด 2๊ฐ€์ง€๋ฅผ ์ผ์„ ํ•ด์ฃผ๋Š”๋ฐ

- (1) ์–ด๋–ค ์ข…๋‹จ์ด NAT/๋ฐฉํ™”๋ฒฝ ๋’ค์— ์žˆ๋Š”์ง€ ํŒ๋‹จ

- (2) ์–ด๋–ค ์ข…๋‹จ์— ๋Œ€ํ•œ ๊ณต์ธIP ์ฃผ์†Œ๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  NAT/๋ฐฉํ™”๋ฒฝ์˜ ์œ ํ˜•์„ ์•Œ๋ ค์ค€๋‹ค.

- (2)๋ฒˆ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  P2P IP๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ STUN์€ P2P IP์—ฐ๊ฒฐ์„ ์œ„ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์ฃผ๊ธฐ๋งŒ ํ•œ๋‹ค.

- ๋งŒ์•ฝ ์–ด๋–ค ์ข…๋‹จ์˜ ํ™˜๊ฒฝ์ด P2P IP ์—ฐ๊ฒฐ์ด ๋ถˆ๊ฐ€๋Šฅํ•  ๊ฒฝ์šฐ STUN์ด ์•„๋‹Œ TURN์„ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค.

- public ๊ด€์ ์—์„œ๋Š” ์ข…๋‹จ์— access ๊ฐ€๋Šฅํ•œ ip:port๋ฅผ ๋ฐœ๊ฒฌํ•˜๋Š” ์ž‘์—…์•”

2. TURN(Traversal Using Relays around NAT)

- Peer๊ฐ„ ์ง์ ‘ ํ†ต์‹ ์ด ์‹คํŒจํ•  ๊ฒฝ์šฐ ์ข…๋‹จ์ ๋“ค ์‚ฌ์ด์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆด๋ ˆ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š”

- TURN ์„œ๋ฒ„๋“ค์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, TURN์€ Peer๋“ค๊ฐ„์˜ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋ฐ์„ ๋ฆด๋ ˆ์ด ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

- TURN์€ ๊ณต์šฉ ์ฃผ์†Œ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ๋ฏธ๋””์–ด๋ฅผ ๋ฆด๋ ˆ์ด ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋„คํŠธ์›Œํฌ์™€ ์ปดํ“จํŒ… ์ž์› ์†Œ๋ชจ๋ ์ˆ˜ ์žˆ๋‹ค.

#### SDP(Session Description Protocol)

- ์—ฐ๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” Peer ์„œ๋กœ๊ฐ„์˜ ๋ฏธ๋””์–ด์™€ ๋„คํŠธ์›Œํฌ์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ์„œ๋กœ ๊ตํ™˜ํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋จ

#### ICE (Interactive Connectivity Establishment)

ํด๋ผ์ด์–ธํŠธ์˜ ๋ชจ๋“  ํ†ต์‹  ๊ฐ€๋Šฅ ์ฃผ์†Œ๋ฅผ ์‹๋ณ„ํ•ด์ค€๋‹ค.

์‹๋ณ„์„ ํ•˜๊ธฐ ์œ„ํ—ค 3๊ฐ€์ง€๋ฅผ ํ™œ์šฉํ•œ๋‹ค

- local Address: ํด๋ผ์ด์–ธํŠธ์˜ ์‚ฌ์„ค์ฃผ์†Œ(host candidate), ๋žœ๊ณผ ๋ฌด์„ ๋žœ ๋“ฑ ๋‹ค์ˆ˜ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ์œผ๋ฉด ๋ชจ๋“  ์ฃผ์†Œ๊ฐ€ ํ›„๋ณด๊ฐ€ ๋จ
- server Reflexive Address: NAT ์žฅ๋น„๊ฐ€ ๋งคํ•‘ํ•œ ํด๋ผ์ด์–ธํŠธ ๊ณต์ธ๋ง ์ฃผ์†Œ๋กœ STUN์— ์˜ํ•ด ํŒ๋‹จ๋จ
- Relayed Address: TURN์„œ๋ฒ„๊ฐ€ ํŒจํ‚ท ๋ฆด๋ ˆ์ด๋ฅผ ์œ„ํ•ด ํ• ๋‹นํ•˜๋Š” ์ฃผ์†Œ

## [์ฐธ๊ณ ํ•˜๊ธฐ]

- https://youtube.com/watch?v=DvlyzDZDEq4&t=426s
- https://peerjs.com/docs.html#peeron-close
- https://github.com/peers/peerjs-server
- https://github.com/jmcker/Peer-to-Peer-Cue-System
- https://velog.io/@ehdrms2034/WebRTC-%EC%9B%B9%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EB%A1%9C-%ED%99%94%EC%83%81-%EC%B1%84%ED%8C%85%EC%9D%84-%EB%A7%8C%EB%93%A4-%EC%88%98-%EC%9E%88%EB%8B%A4%EA%B3%A0
- https://alnova2.tistory.com/1110
- https://www.youtube.com/watch?v=2Z2PDsqgJP8