์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ์๋ฐComparator
- ์๋ฐ๋ฆฌ์คํธ์ ๋ ฌ
- ์๋ฐComparable
- ์๋ฐstream
- ๋ชจ๋๋ฆฌํฑ ์ํคํ ์ฒ
- ํ๋ก๊ทธ๋๋จธ์ค๋๋์ง
- ์๋ฐ ๊ฐ๋น์ง์ปฌ๋ ์
- ์๋ฐ์คํฌ๋ฆฝํธreduce
- ํ๋ก๊ทธ๋๋จธ์ค๊ฐ์ฅํฐ์
- node์์กด์ฑ์ฃผ์
- ๊ฐ์ฒด์งํฅsolid
- ์๋ฐforeach
- ๊ฐ์ฒด์งํฅ์ถ์ํ
- ํํ๋ก์ ํธ
- ์๋ฐ๋ฐฐ์ด์ ๋ ฌ
- ์๋ฐ์คํฌ๋ฆฝํธfilter
- ๊ฐ์ฒด์งํฅ๋คํ์ฑ
- Programmers๊ฐ์ฅํฐ์
- ํ๋ก์ ํธํ๊ณ
- ์๋ฐfilter
- openvidu
- ์คํ๋งํต์ฌ์์
- ์ฐ์ ์์ํ์๋ฐ
- ์๋ฐreduce
- ์๋ฐ์คํฌ๋ฆฝํธmap
- ๋๋์ง์๋ฐ
- ํด๋ผ์ฐ๋ํ์
- Programmers๋๋์ง
- webrtc
- ์๋ฐ์คํฌ๋ฆฝํธforeach
- Today
- Total
I'm pine thank you and you?
WebRTC๊ฐ ๋ฌด์์ผ๊น? (์ฉ์ด, ์ํ, openvidu) ๋ณธ๋ฌธ
์ ์
Web Real-Time Communication ๐ก
์ฐ๋ฆฌ๊ฐ ์ ์๊ณ ์๋ ํ์ ํตํ, ํ์ ๊ณต์ ๋ฅผ ๊ตฌํํ ์ ์๋ ์คํ์์ค
๋น๋์ค, ์์ฑ, ์ผ๋ฐ ๋ฐ์ดํฐ๊ฐ ์ค์๊ฐ์ผ๋ก P2P๋ฐฉ์์ผ๋ก ์ ์ก
JavaScript API๋ก ์ ๊ณต
๊ด๋ จ ์ฉ์ด
1. data streams
๋ง๊ทธ๋๋ก ๋ฐ์ดํฐ๋ค์ ํ๋ฆ
๋ฐ์ดํฐ์ ์์ด ํ์ ๋์ด ์์ง ์๊ณ ๋์์์ด ์์ฑ๋๊ณ ๋ณํ๋ ๋ฐ์ดํฐ์ ํ๋ฆ
2. Signaling
์ธ์ ์ ์ด ๋ฉ์ธ์ง, ๋คํธ์ํฌ ๊ตฌ์ฑ, ๋ฏธ๋์ด ๊ธฐ๋ฅ ๋ฑ์ ์ ๋ณด๋ฅผ ๊ตํํ๋ ๊ณผ์
- ์ธ์ ์ ์ด ๋ฉ์ธ์ง: ํต์ ์ ์ด๊ธฐํํ๊ฑฐ๋ ์ข ๋ฃ, ์ค๋ฅ ๋ณด๊ณ
- ๋คํธ์ํฌ ๊ตฌ์ฑ: ์ปดํจํฐ์ IP์ฃผ์์ ํฌํธ๊ฐ ๋ฌด์์ธ์ง ํ์
- ๋ฏธ๋์ด ๊ธฐ๋ฅ: ๋ธ๋ผ์ฐ์ ์์ ์ฒ๋ฆฌํ ์ ์๋ ์ฝ๋ฑ๊ณผ ํด์๋
P2P ํต์ ์ด ์ผ์ด๋๊ธฐ ์ Signaling์ด ์๋ฃ ๋์ด์ผ ํ๋ค!
3. ICE (Interactive Connectivity Establishment)
๋ธ๋ผ์ฐ์ ๊ฐ peer๋ฅผ ํตํ ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ๋๋ก ํด์ฃผ๋ ํ๋ ์์ํฌ
๋ฐฉํ๋ฒฝ (STUN์ผ๋ก ํด๊ฒฐ)
๋จ๋ง์ Public IP๊ฐ ์๋ค๋ฉด ์ ์ผํ ์ฃผ์๊ฐ์ ํ ๋นํด์ผ ํ๋ค. (STUN์ผ๋ก ํด๊ฒฐ)
๋ผ์ฐํฐ๊ฐ peer๊ฐ์ ์ง์ ์ฐ๊ฒฐ์ ํ์ฉํ์ง ์์ ๋์ ๋ฐ์ดํฐ๋ฅผ relay(์ค๊ณ) ํด์ผ ํ๋ ๊ฒฝ์ฐ (TURN์ผ๋ก ํด๊ฒฐ)
ICE๋ ์์ ์์ ๋ค์ ์ํํ๊ธฐ ์ํด STUN ๋๋ TURN ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ค.
4. NAT (Network Address Transilation)
๋คํธ์ํฌ ์ฃผ์ ๋ณํ
๋จ๋ง์ Public IP ์ฃผ์๋ฅผ ํ ๋นํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
๊ฐ ๊ธฐ๊ธฐ์๋ ์์ ๋ง์ ์ด๋ฆ์ด ์๋ค.
์์ ๋ง์ ์ด๋ฆ์ Private IP๋ผ๊ณ ํ์.
IP๋ ๊ณ ์ IP, ์ ๋ IP๋ก ๋๋๊ณ ๊ณ ์ ์ ๊ฐ์ผ ์๋ ์๋ ์๋ ์๋ค.
๋ฐ๋ผ์ ๋ค๋ฅธ ๋คํธ์ํฌ์์๋ ํต์ฉ๋์ง ์๋๋ค.
์ด ๊ธฐ๊ธฐ๊ฐ ์ฌ์ค ๋ฐ๊นฅ ์ชฝ์ ์๋ ๋คํธ์ํฌ์ ์ ์ํด์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด์๋ Public IP๊ฐ ํ์ํ๋ค.
192.168.100.3:3855(Private Address)์ ๋ํด์ NAT๋ ์ธ๋ถ์ 142.12.131.7:6282(Public Address)๋ก ๋งคํํด์ ์ ๋ฌํ๋ค.
NAT ๋ฐฉ์์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ค. (Full Cone → Restricted Cone → Port Restricted Cone → Symmetric๋ก ๊ฐ์๋ก ๋ณด์↑)
Public IP๋ ์์ฒญ์ ๋ณด๋ผ๋๋ง๋ค NAT์ ์ํด ๋ฐ๋๊ธฐ ๋๋ฌธ์ ๋์ผํ Public IP๋ก ํต์ ํ ์ ์๋ ๋ฌธ์ ์ ์ด ๋ฐ์ํ๋ค.
๐ STUN, TURN ์๋ฒ๋ฅผ ์ฌ์ฉ!
5. STUN (Session Traversal Utilities for NAT) ์๋ฒ
๋ด Public ์ฃผ์๋ฅผ ์๋ ค์ฃผ๋ ์๋ฒ
peer๊ฐ์ ์ง์ ์ฐ๊ฒฐ์ ๋ง๊ธฐ ์ํด ํ์ฌ peer๊ฐ ์ ๊ทผ ๊ฐ๋ฅํ์ง ์ฌ๋ถ๋ฅผ ์๋ ค์ค๋ค.
ํ์ํ ์ด์ ?
์น๊ตฌ์ ๋ด๊ฐ ์ฐ๊ณ ์๋ Wifi๊ฐ ๋ค๋ฅด๋ค๋ฉด ๊ฐ์ ๋ฐฉ์ ๋ค์ด์ ์์ด๋ stream์ ๋ฐ์ ์ ์๋ค.
Public ์ฃผ์๋ฅผ ์์์ผ ๋ค๋ฅธ ๋คํฌ์ํฌ์ ์๋ ์ฅ์น๋ค์ด ์๋ก๋ฅผ ์ฐพ์ ์ ์๋ค.
์ด ๋ ํด๊ฒฐ ํ ์ ์๋ ๊ฒ์ด STUN ์๋ฒ!
1. ํด๋ผ์ด์ธํธ๋ ์ธํฐ๋ท์ ํตํด ์์ ์ Public ์ฃผ์(IP์ PORT)๋ฅผ ์์ฒญ
2. STUN ์๋ฒ๋ ํด๋ผ์ด์ธํธ Public ์ฃผ์์ NAT, ๋ฐฉํ๋ฒฝ ์ ํ์ ์๋ ค์ค๋ค.
3. ํด๋ผ์ด์ธํธ๊ฐ ๋ ์ ๊ทผ ๊ฐ๋ฅ? ๋ถ๊ฐ๋ฅ? ์ ๋ํ ๋ต๋ณ์ STUN ์๋ฒ๋ก๋ถํฐ ๋ฐ๋๋ค.
STUN์ ์ฐ๊ฒฐ ๊ฐ๋ฅ์ ๋ํ ์ ๋ณด๋ง ์ ๊ณตํด์ค ๋ฟ, ์ฐ๊ฒฐ์ด ๋ถ๊ฐ๋ฅ ํ ๋ STUN์ด ํด์ค ์ ์๋ ๊ฒ์ ์๋ค. ๐ ์ด ๋ TURN ์ด์ฉ
๋๋ถ๋ถ์ WebRTC๋ STUN์ ์ด์ฉํ ์ฐ๊ฒฐ๋ก๋ ์ฑ๊ณต์ ์ผ๋ก ์ํํ๋ค.
6. TURN (Traversal Using Relays around NAT) ์๋ฒ
NAT ๋ณด์ ์ ์ฑ ์ด ๋๋ฌด ์๊ฒฉํด NAT์ ์ฐํํ๊ธฐ ์ํด ์ด๋ค.
peer๋ค์ TURN ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก ํต์ ํ๋ค.
TURN ์๋ฒ๋ ๊ณต์ฉ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ๋ฏธ๋์ด๋ฅผ relay(์ค๊ณ)ํ๋ค.
๋ฐ๋ผ์ ๋ฆฌ์์ค ๋ญ๋น๊ฐ ์ฌํด ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ฏ๋ก ์ตํ์ ์๋จ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ค.
7. SDP (Session Description Protocol)
ํด์๋, ํ์, ์ฝ๋ฑ, ์ํธํ ๋ฑ ๋ฉํฐ๋ฏธ๋์ด ์ปจํ ์ธ ์ ์ฐ๊ฒฐ์ ์ค๋ช ํ๊ธฐ ์ํ ํ์ค
๊ธฐ๊ธฐ ๊ฐ์ ๋ฏธ๋์ด๋ฅผ ๊ณต์ ํ๊ธฐ ์ํ ์ค๋ช ์ ์ํด ์ฌ์ฉ
WebRTC ์ํ API
1. ๋ฏธ๋์ด ์ฅ์น์ ์ก์ธ์ค
getUserMedia()
- ๊ธฐ๊ธฐ(์นด๋ฉ๋ผ or ๋ง์ดํฌ)์ ์ ๊ทผํ๋ค.
- alert๋ก ๊ธฐ๊ธฐ ํ์ฉ/๊ฑฐ๋ถ Permission์ด ๋ฌ๋ค.
- drawImage()๋ฅผ ํตํด ์ด๋ฏธ์ง๋ฅผ ์บก์ฒํ ์๋ ์๋ค.
- ์ด๋ฏธ์ง์ filter๋ฅผ ์์ธ ์๋ ์๋ค.
- ์ค๋์ค๋ง ๋จ๋ ์ผ๋ก ์ฌ์ฉํ ์๋ ์๊ณ , ๋น๋์ค ๋ นํ ๊ธฐ๋ฅ๋ ์๋ค.
2. peer ์ฐ๊ฒฐ ์ ์ด
RTCPeerConnection()
- ๋ peer ๊ฐ์ ์์ ์ ์ด๊ณ ํจ์จ์ ์ธ ํต์ ์ ๊ด๋ฆฌํ๋ค.
- Chrome, Opera, Firefox์์ ์ง์
3. peer์๊ฒ ๋ฐ์ดํฐ ๋ณด๋ด๊ธฐ
RTCDataChannel()
- text, file, data๋ฅผ ์ ์กํ ์ ์๋ค.
Kurento
WebRTC ๋ฏธ๋์ด ์๋ฒ
WebRTC ์ฐ๊ฒฐ์ ์ค์ ํ๊ธฐ ์ํ Signalling Server
๊ทธ๋ ๋ค๋ฉด ๋ฏธ๋์ด ์๋ฒ๊ฐ ๋ฌด์์ธ๊ฐ?
๋๊ท๋ชจ ์๋น์ค์์ 1:N ์คํธ๋ฆฌ๋ฐ์ ํ๋๋ฐ P2P ๋ฐฉ์์ ์ฌ์ฉํด์ ๊ฐ๋ฐํ๊ธฐ์ ๋ฌด๋ฆฌ๊ฐ ์๋ค.
๊ฐ๋ น, peer๊ฐ 10๋ง๋ช ์ด๋ผ๋ฉด ์คํธ๋ฆฌ๋จธ์ ํด๋ผ์ด์ธํธ๋ ํฐ์ง ๊ฒ์ด๋ค.
๊ทธ๋์ peer ์ค๊ฐ์ ๋ฏธ๋์ด ์๋ฒ๊ฐ ํ์ํ๋ค.
๋ฏธ๋์ด ์๋ฒ ์๋ฆฌ
๐ ๋ฐฉ ์์ฑ
CREATE(๋ฐฉ๋ฒํธ, ๋ฐฉ์ ๋ํ ์ค์ )
๐๏ธ ๋ฐฉ์ก์ ํ๊ธฐ์ํ ์ค๋น
JOIN(๋ฐฉ๋ฒํธ, PUBLISHER)
๐บ ๋ฐฉ์ก ํ๊ธฐ
CREATE OFFER: ๋ฐฉ์กํด๋๋จ?
PUBLISH: ๋ฐฉ์ก ํ ๊ฒ
ํ๋ฉด Kurento ์๋ฒ๋ก๋ถํฐ stream์ด ๋ ๋ผ์ค๊ณ ๋ฐฉ์ก์ ํ ์ ์๊ฒ๋๋ค.
๐โ๏ธ ๋ฐฉ์ ์ฐธ์ฌ
JOIN(๋ฐฉ๋ฒํธ, SUBSCRIBER, FEED): FEED๋ PUBLISHER์ ์์ด๋
CREATE ANSWER: ์๊น OFFER๋ก ๋ค์ด์จ ๋ฐฉ์ก ์ฐธ์ฌํ ๊ฒ
START(๋ฐฉ๋ฒํธ): ๋ฐฉ์ก ๋ณผ๊ฒ
ํ๋ฉด Kurento ์๋ฒ๋ก๋ถํฐ stream์ด ๋ ๋ผ์ค๊ณ ๋ฐฉ์ก์ ๋ณผ ์ ์๊ฒ๋๋ค.
OpenVidu
Kurento ๊ธฐ๋ฐ์ ์ค๊ฐ ์๋ฒ๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์๋๋ก ์์ ํ ๊ธฐ์ ์คํ์ ์ ๊ณตํ๋ ํ๋ซํผ
'CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ํด์ (1) | 2023.06.06 |
---|---|
[DB] Redis ๊ฐ๋ , ํน์ง (0) | 2023.03.22 |
[์ํคํ ์ฒ] MSA / ๋ฉํฐ๋ชจ๋ ๋จ์ผํ๋ก์ ํธ? ๋จ์ผ๋ชจ๋ ๋ฉํฐํ๋ก์ ํธ? (0) | 2023.02.12 |
[๋์์ธ ํจํด, JAVA] Singleton Pattern(์ฑ๊ธํค ํจํด) ์ ์, ๋ชฉ์ , ์ฉ๋ (0) | 2023.02.09 |
[ํด๋ผ์ฐ๋ ์ปดํจํ ] IaaS, PaaS, SaaS (0) | 2023.02.06 |