๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Web/WebRTC

[WebRTC] ๋ฌด์กฐ๊ฑด Openvidu๋ฅผ ์‚ฌ์šฉํ•˜์ž -2 (OpenVidu vs Kurento)

by ์ •๊ณ ์ • 2022. 2. 26.
๋ฐ˜์‘ํ˜•

๐Ÿ‘ˆ์ด์ „ ๊ธ€ ๊ฐ€๊ธฐ

 

[WebRTC] ๋ฌด์กฐ๊ฑด Openvidu๋ฅผ ์‚ฌ์šฉํ•˜์ž -1 (WebRTC๋ž€)

๊ธ€์€ ๋‘๊ด„์‹์œผ๋กœ ์“ฐ๋ž˜์„œ ๊ฒฐ๋ก ๋ถ€ํ„ฐ ์ผ๋‹ค. ๊ธฐ์ˆ ์— ์žˆ์–ด์„œ ์ •๋‹ต์€ ์—†๊ธฐ์— ๋ฌด์–ธ๊ฐ€๋ฅผ ๋‹จ์–ธํ•˜์ง€ ์•Š์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•˜์ง€๋งŒ ์ด๊ฑด ์ง„์งœ ์•„๋‹ˆ๋‹ค. react native์—์„œ๋Š” kurento๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ์€ ๊ฒƒ ๊ฐ™์•˜์ง€๋งŒ,

butfound.tistory.com

 

์ง„์งœ ์“ฐ๊ณ  ์‹ถ์€ ๋ง์€ ์ด ๊ธ€์ด์—ˆ๋‹ค.

๋ถ„๋ช… ๋‘˜ ๋‹ค ์จ ๋ณด์‹  ๋ถ„์ด ๋งŽ์„ ํ…๋ฐ ๊ด€๋ จ ๊ธ€์ด ์ •๋ง ์—†์—ˆ๋‹ค. 

Openvidu์™€ Kurento๊ฐ€ ๊ฐ๊ฐ ๋ฌด์—‡์ธ์ง€, ์‹ค์งˆ์ ์œผ๋กœ ์–ด๋–ค ์ฐจ์ด๋ฅผ ๊ฐ€์ง€๋Š”์ง€ ์“ฐ๋ ค๊ณ  ํ•œ๋‹ค. 

+) ๊ตฌ๊ตฌ์ ˆ์ ˆํ•œ ์˜๋ฌธ

 

Kurento๋ž€?

 

Introduction to Kurento — Kurento 6.16.1-dev documentation

» Introduction to Kurento Edit on GitHub <!-- "admonition" is the class of Warning messages with the current RTD theme. Obtained by directly checking the HTML sources of an already existing block. --> Warning Kurento is a low-level platform to create WebR

doc-kurento.readthedocs.io

์ „ํ†ต์˜ ์ฟ ๋ Œํ† ๋‹ค.

์•„๋งˆ 6.16.1 ๋ฒ„์ „์„ ์‚ฌ์šฉํ•  ํ™•๋ฅ ์ด ๋†’๊ธฐ์— ํ•ด๋‹น docs๋ฅผ ๊ฐ€์ ธ์™”๋‹ค.  

์‚ฌ์ดํŠธ๋ฅผ ์ซ™ ๋‘˜๋Ÿฌ๋ณด๋ฉด WebRTC์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ํ‹€์„ ์žก์„ ์ˆ˜ ์žˆ๋‹ค. Openvidu ๋˜ํ•œ kurento ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์œผ๋ฏ€๋กœ kurento ์›น์‚ฌ์ดํŠธ๋ฅผ ํ•œ ๋ฒˆ ํ›‘์–ด๋ณด๋Š” ํŽธ์„ ์ถ”์ฒœํ•œ๋‹ค. 

 

์‚ฌ์ดํŠธ๋ฅผ ๋“ค์–ด๊ฐ€์ž๋งˆ์ž ๋–กํ•˜๋‹ˆ Openvidu ์ถ”์ฒœ๊ธ€์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋‚˜์™€ ํŒ€์›๋“ค์€ ์ฒ˜์Œ์— ์ด ๊ฒฝ๊ณ ๋ฅผ ๋‹จ์ˆœํ•œ ๋‚œ์ด๋„ ๋ฌธ์ œ๋กœ ์ดํ•ดํ•˜๊ณ  ๋ฌด์‹œํ–ˆ๋‹ค. 

๐Ÿ‘ฉ๐Ÿง‘๐Ÿง’ ์ฟ ๋ Œํ† ๊ฐ€ ์˜คํ”ˆ๋น„๋‘๋ณด๋‹ค ๋นก์„ผ๊ฐ€ ๋ด์—ฌใ…Žใ…Ž ๊ทผ๋ฐ ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ด๋ฏธ ์„ค์ • ๋‹ค ๋๋ƒˆ๊ณ  ์„œ๋น„์Šค ๋Œ๋ ธ์œผ๋‹ˆ๊นŒ ํ™”์ดํŒ…! 
(๊ทธ๋ฆฌ๊ณ  ์ด ์‚ฌ๋žŒ๋“ค์€ ๋•…์„ ์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค...)

๋ฐฑ๋ฌธ์ด ๋ถˆ์—ฌ์ผ๊ฒฌ์ด๋ผ๊ณ , ์ผ๋‹จ ์‚ฌ์šฉ์„ ํ•ด๋ด์•ผ ๊ฐ์ด ์žกํž ๊ฒƒ ๊ฐ™์•˜๋‹ค.

๋ฉ”๋‰ด์—์„œ tutorial์„ ๋ˆŒ๋Ÿฌ๋ณด๋ฉด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํŠœํ† ๋ฆฌ์–ผ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค.

 

GitHub - Kurento/kurento-tutorial-java

Contribute to Kurento/kurento-tutorial-java development by creating an account on GitHub.

github.com

git์œผ๋กœ kurento tutorial์„ ๋Œ์–ด์˜ค๋ฉด ์ •๋ง ๋งŽ์€ ํŠœํ† ๋ฆฌ์–ผ์ด ์žˆ๋Š”๋ฐ, ํŒ€์› ๋ถ„๊ป˜์„œ ๋ชจ๋“  ํŠœํ† ๋ฆฌ์–ผ์„ ๋Œ๋ ค ๋ณธ ๋‹ค์Œ ๋…ธ์…˜์— ์ •๋ฆฌํ•ด์ฃผ์…จ๋‹ค.

๋ชจ๋“  ํŠœํ† ๋ฆฌ์–ผ์€ signalling ์„œ๋ฒ„์— static resources๊ฐ€ ๋ถ™์–ด ์žˆ๋Š” SPA ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‹ค. 

๋”๋ณด๊ธฐ
kurento-chroma
coturn์„ ์จ๋„ ์นด๋ฉ”๋ผ๋ฅผ ์ผ  ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ์˜์ƒ์ด ๋ณด์˜€๋‹ค.&amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp; ๋งˆ๋ฆฌ์˜ค ํ™”๋ฉด์ด ์ž…ํ˜€์ ธ์„œ ๋ณด์ด๋Š”๋ฐ ์ธ์‹์ด ์ข€ ์ฒ˜์ฐธํ•˜๋‹ค.
๋”๋ณด๊ธฐ
kurento-hello-world-recording
๋กœ์ปฌ์—์„œ Start ๋ˆ„๋ฅด๋ฉด ๋…นํ™”๊ฐ€ ์‹œ์ž‘๋˜๊ณ , Stop์„ ๋ˆ„๋ฅด๋ฉด ๋…นํ™”๊ฐ€ ์ค‘์ง€, Play๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋…นํ™”๋œ ์˜์ƒ์ด ์‹œ์ž‘๋˜๋Š” ๊ฒƒ ๊ฐ™์Œ(coturn์„ ์ผœ๋„ ๋…นํ™”ํ•œ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ๋™์ž‘ํ•จ)
๋”๋ณด๊ธฐ
kurento-one2many-call
1:N๋ฐฉ์‹, Presenter์™€ Viewer๊ฐ€ ์žˆ๊ณ , Presenter๊ฐ€ ํ™”๋ฉด์„ ๋„์šฐ๋ฉด Viewer๊ฐ€ ๋™์ผํ•œ ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. Presenter๊ฐ€ ํ™”๋ฉด์„ Stopํ•˜๋ฉด Viewer๋„ ์ž๋™์œผ๋กœ Stop.
๋”๋ณด๊ธฐ
kurento-platedetector
Radio๊ด€๋ จํ•ด์„œ Plate Detector filter๋ผ๋Š”๊ฒŒ ์žˆ๋‹ค๋Š”๋ฐ ๋ญ”์ง€ ๋ชจ๋ฅด๊ฒ ์Œ ๊ทธ๋ƒฅ startํ•˜๋ฉด ํ™”๋ฉด ์ผœ์ง€๊ณ  stopํ•˜๋ฉด ๊บผ์ง coturn์„ ์ผœ๋„ ์นด๋ฉ”๋ผ๋ฅผ startํ•œ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ์˜์ƒ์ด ๋ณด์ž„
๋”๋ณด๊ธฐ
kurento-send-data-channel
start๋ˆ„๋ฅด๋ฉด ๊ฐ‘์ž๊ธฐ ๋ญ” ๋™์˜์ƒ ๋‚˜์˜ด stop๋ˆ„๋ฅด๋ฉด ๋ฉˆ์ถค ๋™์˜์ƒ ํ‹€์–ด์ฃผ๋Š” ๊ทธ๋Ÿฐ๊ฑฐ ์ธ๋“ฏ
๋”๋ณด๊ธฐ
kurento-show-data-channel
์˜์ƒ๊ณผ ํ…์ŠคํŠธ๋ฅผ ๊ฐ™์ด ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ
๋”๋ณด๊ธฐ
kurento-crowddetector
์•„๋งˆ ์‚ฌ๋žŒ ์ธ์‹ํ•˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ&amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp; ๋™์ž‘ ์•ˆ ๋จ... ๋ญ”์ง€ ๋ชจ๋ฅด๊ฒ ์Œ &amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;
๋”๋ณด๊ธฐ
kurento-one2one-call
1:1 ์˜์ƒํ†ตํ™” ๋А๋‚Œ call ๋ˆŒ๋Ÿฌ๋„ ์•ˆ๋‚˜์˜ด
๋”๋ณด๊ธฐ
kurento-player
๋™์˜์ƒ์„ ์žฌ์ƒ, ์ผ์‹œ์ •์ง€, ์ •์ง€, ์›ํ•˜๋Š” ์ดˆ๋กœ ์ด๋™ ๋“ฑ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
๋”๋ณด๊ธฐ
kurento-group-call
์šฐ๋ฆฌ๊ฐ€ ํŠœ๋‹ํ–ˆ๋˜ ์˜ˆ์ œ
๋”๋ณด๊ธฐ
kurento-magic-mirror
์‚ฌ๋žŒ ๊ฐ์ง€ํ•ด์„œ ๋ชจ์ž์”Œ์›Œ์คŒ
๋”๋ณด๊ธฐ
kurento-one2one-call-advanced
1:1๋กœ ํ†ตํ™”ํ•˜๋Š”๊ฑฐ ๊ฐ™์€๋ฐ ์ž‘๋™์ด ์•ˆ๋œ๋‹ค.
๋”๋ณด๊ธฐ
kurento-pointerdetector
Calibrate๋ฅผ ๋ˆ„๋ฅด๋ฉด remote stream์— ์ด๊ณณ์ €๊ณณ ๋นจ๊ฐ„ ํฌ์ธํ„ฐ๊ฐ€ ์˜ฎ๊ฒจ๋‹ค๋‹˜
๋”๋ณด๊ธฐ
kurento-hello-world
coturn์„ ์ผœ๋„ ์นด๋ฉ”๋ผ๋ฅผ startํ•œ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ์˜์ƒ์ด ๋ณด์ž„
๋”๋ณด๊ธฐ
kurento-metadata-example
์‚ฌ๋žŒ ์–ผ๊ตด detect
๋”๋ณด๊ธฐ
kurento-one2one-call-recording
one2one์€ ๊ณ„์† ๋™์ž‘์„ ์•ˆํ•œ๋‹ค..
๋”๋ณด๊ธฐ
kurento-rtp-receive
RTP ํ”„๋กœํ† ์ฝœ ๊ด€๋ จ์ธ๊ฑฐ๊ฐ™์€๋ฐ start ๋ˆ„๋ฅด๋ฉด ๊ณ„์† ๋กœ๋”ฉ๋งŒํ•จ

์šฐ๋ฆฌ๋Š” kurento groupcall ์˜ˆ์ œ๋ฅผ ์ด์šฉํ–ˆ๋‹ค.

SPA๋กœ ๊ตฌ์„ฑ๋œ ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„์— ๋ช‡๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ๋ง๋ถ™์ด๊ณ , vanila js๋กœ ์ด๋ฃจ์–ด์ง„ ๋ทฐ static ํŒŒ์ผ๋“ค์„ ๋ฝ‘์•„๋‚ด react๋กœ ์ด์‹ํ–ˆ๋‹ค.

๊ธฐ์กด maven dependency์— ์˜์กด์„ฑ์„ ๊ฐ€์ง€๋Š” ์ •์  ๋ฆฌ์†Œ์Šค ํŒŒ์ผ์„ react์—์„œ ์ž‘๋™์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ kurento-utils๋ฅผ npm์œผ๋กœ ์„ค์น˜ํ–ˆ๋‹ค.

 

kurento์˜ ์žฅ์ ์ด์ž ๋‹จ์  ์ค‘ ํ•˜๋‚˜๋Š”, ๋„คํŠธ์›Œํฌ๋ฅผ ์ง์ ‘ ๊ตฌ์„ฑํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฑฐ๋‹ค.

๋ฐ๋ชจ๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ coturn๊ณผ kms๋Š” ๋ณ„๋„๋กœ ๋Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค. kms ๋„์ปค ๋‚ด๋ถ€์˜ ์„ค์ • ํŒŒ์ผ๊ณผ client๋‹จ์—์„œ ์ตœ์ดˆ ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•  ๋•Œ ๋ณด๋‚ด๋Š” ํŒจํ‚ท์—๋„ coturn์˜ ip๋ฅผ ์ ์–ด์ค˜์•ผ๋งŒ ํ–ˆ๋‹ค. 

์ด ๊ณผ์ •์—์„œ WebRTC ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ์š”์†Œ์— ๋Œ€ํ•œ ํŒ€์›๋“ค์˜ ์ดํ•ด๋„๊ฐ€ ๋น„์•ฝ์ ์œผ๋กœ ์ƒ์Šนํ–ˆ๋‹ค.

 

 

OpenVidu๋ž€?

 

Kurento ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ๋œ ์˜คํ”ˆ์†Œ์Šค๋‹ค. ์—„๋ฐ€ํžˆ ๋งํ•˜์ž๋ฉด ์ด ์นœ๊ตฌ๋„ ์ฟ ๋ Œํ† ์ง€๋งŒ ํŽธ์˜๋ฅผ ์œ„ํ•ด ์ฟ ๋ Œํ† ์™€ ์˜คํ”ˆ๋น„๋‘๋กœ ๊ตฌ๋ณ„ํ•ด์„œ ๋ถ€๋ฅด๊ณ  ์žˆ๋‹ค. 

์ฟ ๋ Œํ† ๊ฐ€ ์ •๋ง ๋‚ ๊ฒƒ์ด๋ผ๋ฉด, openvidu๋Š” ์ž˜ ๊ฐ€๊ณต๋œ ์นœ๊ตฌ๋ผ ๊ทธ๋ƒฅ ๊ฐ–๋‹ค ์“ฐ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

openvidu๋„ ์ •๋ง ๋งŽ์€ ํŠœํ† ๋ฆฌ์–ผ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค.

 

OpenVidu Docs

From here you can search these documents. Enter your search terms below.

docs.openvidu.io

22๋…„ 02๋…„ ๊ธฐ์ค€ 2.20.0๋ฒ„์ „์ด ์ตœ์‹ ์ด๋‹ค. 

๋ฉ”๋‰ด์˜ deployment > onpremises ๋ฐฉ์‹์„ ๋”ฐ๋ผํ•˜๋ฉด ./openvidu start ๋ผ๋Š” ๋ช…๋ น์–ด ํ•˜๋‚˜๋กœ coturn server์™€ nginx์™€ kms์™€ signalling ์„œ๋ฒ„๋ฅผ ํ•œ ๋ฒˆ์— ๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ํ•˜๋ผ๋Š” ๋Œ€๋กœ ํ•œ ์ค„๋งŒ ์ ์–ด์ฃผ๋ฉด SSL ์ธ์ฆ์„œ๋„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

On premises - OpenVidu Docs

OpenVidu is deployed in production as a set of Docker containers managed with Docker Compose. You can deploy OpenVidu in any modern Linux distribution. You need root permissions to deploy OpenVidu. The recommended folder to install OpenVidu is /opt. Every

docs.openvidu.io

์‹ค๋ฐฐํฌ ์ „์˜ ํ…Œ์ŠคํŠธ์™€ ์ฝ”๋“œ ๋ถ„์„์€ openvidu์˜ openvidu-server๋ฅผ ๋ฐ›์•„์„œ ์ง„ํ–‰ํ–ˆ๋‹ค. 

client๋Š” openvidu-tutorial์˜ insecure-react์„ ์ˆ˜์ •ํ•ด์„œ ์šฐ๋ฆฌ ํ”„๋ก ํŠธ์— ์‹ค์—ˆ๋‹ค.

insecure-react๋Š” ํด๋ž˜์Šคํ˜• react.js๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”๋ฐ, useState๋ฅผ ์ด์šฉํ•˜๋Š” ํ•จ์ˆ˜ํ˜•์œผ๋กœ ์ˆ˜์ •๋งŒ ํ•ด ์ฃผ๋ฉด ์šฐ๋ฆฌ ํ”„๋ก ํŠธ์— ์‰ฝ๊ฒŒ ์ด์‹ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.  

 

GitHub - OpenVidu/openvidu: OpenVidu Platform main repository

OpenVidu Platform main repository. Contribute to OpenVidu/openvidu development by creating an account on GitHub.

github.com

 

 

GitHub - OpenVidu/openvidu-tutorials: OpenVidu tutorials to get started

OpenVidu tutorials to get started. Contribute to OpenVidu/openvidu-tutorials development by creating an account on GitHub.

github.com

 

 

์™œ Kurento์—์„œ Openvidu๋กœ ์˜ฎ๊ฒผ์„๊นŒ

์ง€๊ธˆ ์ƒ๊ฐํ•ด๋ด๋„ ๊ฑฐ์˜ ์‚ฌ๊ธฐ ๋‹นํ•œ ๊ธฐ๋ถ„์ด๋‹ค. 

์ฟ ๋ Œํ† ์™€ ์˜คํ”ˆ๋น„๋‘์˜ ์ฐจ์ด๋Š” ๋‹จ์ˆœํ•œ ๊ตฌ์ถ• ๋‚œ์ด๋„์˜ ์ฐจ์ด๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค.

์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๊ฐ€ ์™„์ „ํžˆ ๋‹ฌ๋ž๋‹ค. 

์™œ ์ฒ˜์Œ์— Kurento๋ฅผ ์„ ํƒํ–ˆ์„๊นŒ?

Kurento๋ฅผ ์„ ํƒํ•˜๋ฉด์„œ๋Š” ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๊ณผ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. 

์–ด๋”” ๊ฐ€์„œ Java ์ž˜ํ•œ๋‹ค๊ณ  ์ž๋ž‘ํ•  ๋งŒํผ์€ ์•„๋‹ˆ์—ˆ์ง€๋งŒ Signalling server ์ฏค์€ ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ•˜๊ณ  ํŠœ๋‹ํ•  ์ž์‹ ์ด ์žˆ์—ˆ๋‹ค.  

react์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์ดํ•ด๋„ ์žˆ์—ˆ๊ณ , github ๊ฒ€์ƒ‰์ด๋ผ๋ฉด ์ด๊ณจ์ด ๋‚ฌ๊ธฐ์— js๋ฅผ react๋กœ ์ด์‹ํ•˜๋Š” ๊ฒƒ๋„ ์–ด๋–ป๊ฒŒ๋“  ๋˜๊ฒ ์ง€ ์‹ถ์—ˆ๋‹ค.

ํŒ€์› ๋ถ„๊ป˜์„œ ์ด๋ฏธ ์„œ๋ฒ„ ๊ตฌ์กฐ์— ๋Œ€ํ•ด ํ†ต๋‹ฌํ•˜๊ณ  ๊ณต์œ ๊นŒ์ง€ ๋งˆ์ณ์ฃผ์‹  ๋•์—, ์ฟ ๋ Œํ† ์˜ ๊ฐ€์žฅ ํฐ ์žฅ๋ฒฝ์ด๋ผ๋˜ ๋ฐฐํฌ ๋„คํŠธ์›Œํฌ๋„ ํŠœํ† ๋ฆฌ์–ผ์„ ๋Œ๋ ค ๋ณด๋Š” ๊ณผ์ •์—์„œ ์ด๋ฏธ ๊ตฌ์ถ•์ด ์™„๋ฃŒ๋œ ์ƒํ™ฉ์ด์—ˆ๋‹ค. 

์šฐ๋ฆฌ์—๊ฒŒ ํ•„์š”ํ•œ ์Œ์„ฑ ๋ณ€์กฐ๋‚˜ ์˜์ƒ ์ธ์‹ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ kurento ๋ฐ๋ชจ๋‚˜ ์ถ”๊ฐ€์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ถฉ๋ถ„ํžˆ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค๋Š” ํ™•์‹ ๋„ ์žˆ์—ˆ๋‹ค. 

 

๋กœ์šฐํ•œ ๊ธฐ์ˆ ์„ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋””๋ฉ”๋ฆฌํŠธ๋Š” ๊ธฐ์ˆ ์˜ ์ดํ•ด๋„์™€ ํŠœ๋‹์˜ ๋‚œ์ด๋„์— ๋‹ฌ๋ ธ๋Š”๋ฐ, ์šฐ๋ฆฌ ์ƒํ™ฉ์—์„œ๋Š” ๋ฉ”๋ฆฌํŠธ๊ฐ€ ๋” ํฌ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

๊ทธ์— ๋Œ€ํ•œ ๋‘๋ ค์›€๋„ ์—†์—ˆ๋‹ค. 

ํ•˜์ง€๋งŒ...

Kurento ์ด์Šˆ

๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ์ด๋‚˜ ์„œ๋ฒ„ ํŠœ๋‹์˜ ๋‚œ์ด๋„๋Š” ์•ž์—์„œ ์•„๋ฌด ๋ฌธ์ œ ์—†์—ˆ๋‹ค๊ณ  ๊ธฐ์ˆ ํ–ˆ์œผ๋ฏ€๋กœ ํŒจ์Šคํ•œ๋‹ค. 

ํ”„๋ก ํŠธ ํŒ€์—์„œ ์—ด์‹ฌํžˆ react๋กœ ๊ตฌ์„ฑํ•ด์ฃผ์‹  ํด๋ผ์ด์–ธํŠธ์— kurento client๋ฅผ ์ด์‹ํ•ด์„œ ๋‹จ์ฒด ํ…Œ์ŠคํŠธ์— ๋“ค์–ด๊ฐ„ ๋ฐฑ์—”๋“œ ํŒ€์€ ๋‚œ๊ด€์— ์ง๋ฉดํ–ˆ๋‹ค.

๋ฐ”๋กœ ์„ธ์…˜๋ฌธ์ œ์˜€๋‹ค.

 

[Kurento] Websocket์ด ๊ฐ‘์ž๊ธฐ ๋Š๊ฒจ๋ฒ„๋ฆผ

Client๋Š” react js๋กœ, Signalling server๋Š” maven์œผ๋กœ ๋Œ๋ฆฌ๊ณ  ์žˆ๋‹ค. ์ด์Šˆ 1 ํ™˜๊ฒฝ ec2, https, port 8449 ์ „์ œ ๊ธฐ์กด Room1์— ์ ‘์†ํ•ด ์žˆ๋˜ ์‚ฌ์šฉ์ž๋Š” ์—†๋‹ค. ๋‚˜ ํ˜ผ์ž ๋ฐฉ์— ๋“ค์–ด์™€ ์žˆ๋Š” ์ƒํ™ฉ ๋‚ด userSession์ด registr..

butfound.tistory.com

์ €๊ฒƒ๋•Œ๋ฌธ์— ์ง„์งœ ๊ฐœ๊ณ ์ƒํ–ˆ๋‹ค.

3์ฐจ ๋งž๊ณ  ์‰ฌ์…”์•ผ ํ•  ๋ฉ˜ํ† ๋‹˜๋„ ์›น์—‘์Šค๋กœ ์˜ค์…”๊ฐ€์ง€๊ณ  ๊ฐ™์ด ์›์ธ ์žก์•„์ฃผ์‹œ๊ณ ... ์ •๋ง ๋„ˆ๋ฌด ๊ฐ์‚ฌ๋“œ๋ ธ์Šต๋‹ˆ๋‹คใ… ใ… ใ… ใ… 

 

Kurento์˜ Signalling ์„œ๋ฒ„๋Š” WebSocketSession์œผ๋กœ participant๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ๋„ socket์„ ์ด์šฉํ•ด ์‹œ๊ทธ๋„์„ ๋‚ ๋ฆฐ๋‹ค. 

๊ทธ๋Ÿฐ๋ฐ ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„๋กœ ๋‚ ์•„๊ฐ€๋Š” ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜๊ฐ’์ด ์š”์ฒญ๋งˆ๋‹ค ๋ฐ”๋€Œ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„์—์„œ๋Š” ๋‹น์—ฐํžˆ ํ•ด๋‹น ์‚ฌ์šฉ์ž๊ฐ€ ์ €์žฅ๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž๋ผ๊ณ  ํŒ๋‹จํ•ด ์—๋Ÿฌ๋ฅผ ์ผ์œผ์ผฐ๊ณ , ๋”ฐ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ๋Š” ์›น์†Œ์ผ“ ์—ฐ๊ฒฐ์ด ๋ฐ”๋กœ ๋Š๊ฒจ์„œ ํŠ•๊ฒจ๋ฒ„๋ฆฌ๋Š” ๊ฑฐ๋‹ค. (์„ธ์…˜๊ฐ’์ด ๋ฐ”๋€Œ๋“  ๋ง๋“  ์ผ๋ฐฉ์ ์ธ ์ˆ˜์‹ ์€ ์ œ๋Œ€๋กœ ๋๋‹ค)

js๋กœ ํ…Œ์ŠคํŠธ ํ•ด๋ดค์„ ๋•Œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์œผ๋‹ˆ ์›์ธ์„ ์ถ”์ธกํ•˜๊ธฐ๋กœ๋Š” ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ ๊ด€๋ จ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์€๋ฐ ๊ดด์ƒํ•œ ๊ฑด... ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žฌ๋ Œ๋”๋ง ๋˜์ง€ ์•Š์•˜์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์„ธ์…˜๊ฐ’์ด ๋ง‰ ๋ฐ”๋€œ. ์›์ธ์„ ์žก์„ ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค. 

๋…ธ๊ฐ€๋‹ค ๋””๋ฒ„๊น…์„ ํ†ตํ•ด ์ผ๋ถ€ ํ•ด๊ฒฐํ•  ์ˆ˜๋Š” ์žˆ์—ˆ์œผ๋‚˜ ๊ทธ๊ฒƒ๋งˆ์ € ์•„๋‹ˆ ์ด๋Ÿฌ๋ฉด ๋œ๋‹ค๊ณ ์š” ์ˆ˜์ค€์ด์—ˆ๊ณ  ์™„๋ฒฝํ•˜๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š” ๊ฑด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ ธ๋‹ค.

 

๊ทธ๋ž˜์„œ ํŒ€์›๋“ค์€ ์ด๋ฅผ ์•…๋ฌผ๊ณ  ์‹œ์—ฐ ์ดฌ์˜ 4์ผ ์ „์— ์ฟ ๋ Œํ† ๋ฅผ ํฌ๊ธฐํ•˜๊ณ  openvidu๋กœ ๊ฐˆ์•„ํƒ€๋Š” ๋ชจํ—˜์„ ๊ฐํ–‰ํ•œ๋‹ค.

์‚ฌ์‹ค Openvidu๋„ ์–ด์ฐจํ”ผ kurento ๊ธฐ๋ฐ˜์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋•Œ๊นŒ์ง€๋งŒ ํ•ด๋„ Openvidu๊ฐ€ ์šฐ๋ฆฌ์˜ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•ด ์ฃผ๋ฆฌ๋ผ๋Š” ํ™•์‹ ์€ ์—†์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ฝ”๋“œ ๋ถ„์„ ๊ฒฐ๊ณผ... ์–ด ์ด๊ฑด ๋  ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค ์‹ถ์—ˆ๊ณ ... ๊ณผ๊ฐํ•˜๊ฒŒ ๊ฐˆ์•„์—Ž์—ˆ๋‹ค.  

 

๊ทธ๋ ‡๊ฒŒ ์ฟ ๋ Œํ† ๋กœ ๋‹จ๋ จ๋œ ํŒ€์›๋“ค์€ ํ•˜๋ฃจ ๋ฐ˜๋งŒ์— ์™„๋ฒฝํ•œ ์ด์‚ฌ์— ์„ฑ๊ณตํ•˜๊ฒŒ ๋œ๋‹ค.

๋น„๋ฃŒํ‘ธ๋Œ€๋„ ์•„๋‹Œ ํŒ์ž๋•Œ๊ธฐ์ž„

 

 

Openvidu๋Š” ๋ญ๊ฐ€ ๋‹ค๋ฅด๊ธธ๋ž˜?

Session

์•ž์„œ kurento๋Š” WebsocketSession์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค๊ณ  ๋งํ•œ ๋ฐ” ์žˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์—์„œ๋„ ์›น์†Œ์ผ“์„ ๋‚ ๋ ค ํ†ต์‹ ํ•˜๋ฏ€๋กœ ์›น์†Œ์ผ“์˜ ์„ธ์…˜๊ฐ’์ด ๊ต‰์žฅํžˆ ์ค‘์š”ํ•ด์ง„๋‹ค. 

Openvidu์˜ signalling server๋ฅผ ๋œฏ์–ด๋ณด๋ฉด ์ข€ ๋‹ค๋ฅด๋‹ค. 

openvidu-server / kurento-group-call

Kurento-WebSocketSession

Kurento์—์„œ ์‚ฌ์šฉ์ž ์š”์ฒญ ํ”Œ๋กœ์šฐ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ ค๋ฉด CallHandler์˜ handleTextMessage()๋ถ€ํ„ฐ ๋ณด๋ฉด ๋œ๋‹ค.

CallHandler.handleTextMessage()

CallHandler ํด๋ž˜์Šค๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ org.springframework.web.socket.handler.TextWebSocketHandler๋ฅผ implementํ•ด์„œ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค. 

์˜ค๋ฒ„๋ผ์ด๋“œ ๋œ handleTextMessage์—์„œ๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ WebSocketSession๊ณผ message๋ฅผ ๋ฐ›๋Š”๋ฐ, ํด๋ผ์ด์–ธํŠธ์—์„œ Jsonํƒ€์ž…์œผ๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ๋งŒ๋“ค์–ด ์›น์†Œ์ผ“์— ์‹ค์–ด ๋ณด๋‚ด๋ฉด ์ด ์นœ๊ตฌ๊ฐ€ ๊ทธ๊ฑธ ์žก์€ ๋‹ค์Œ์— json๋ฉ”์„ธ์ง€์˜ id๊ฐ’์— ๋”ฐ๋ผ ํ•ด๋‹น ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฑฐ๋‹ค. 

๋งŒ์ผ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๋ถ™์ด๊ณ  ์‹ถ๋‹ค๋ฉด case๋ฌธ์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

WebSocketSession์€ ์ปค์Šคํ…€์ด ์•„๋‹ˆ๋ผ org.springframework.web.socket.WebSocketSession ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. 

UserSession

๊ฐ ์œ ์ € ๊ฐ์ฒด๋ฅผ ๋œปํ•˜๋Š” UserSession ํด๋ž˜์Šค์—์„œ๋„ WebSocketSession์„ ๊ทธ๋Œ€๋กœ ์ €์žฅํ•ด์„œ ์“ฐ๊ณ  ์žˆ๋‹ค. 

Openvidu-Session(์‚ฌ์šฉ์ž ์ •์˜)

Openvidu์—์„œ ์‚ฌ์šฉ์ž ์š”์ฒญ ํ”Œ๋กœ์šฐ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ ค๋ฉด rest->core ํŒจํ‚ค์ง€ ์ˆœ์œผ๋กœ ๋ณด๋ฉด ๋œ๋‹ค. 

rest.SessionRestController

๋ณด๋‹ค์‹œํ”ผ openvidu๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ axios๋กœ ๋‚ ๋ฆฐ ํ˜ธ์ถœ์„ controller์—์„œ ๋‚š์•„์ฑ„๋Š” REST ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค. 

 

ํด๋ผ์ด์–ธํŠธ์—์„œ openvidu ๊ด€๋ จ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ํ˜ธ์ถœ ์ฃผ์†Œ๋งŒ ์žก์•„์ฃผ๋ฉด ๋์ด๋ผ ์›น์†Œ์ผ“์„ ๋”ฐ๋กœ ์‹ ๊ฒฝ์จ ์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค. 

Openvidu์—์„œ๋„ Session๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋‹ˆ๊นŒ ์–˜๋„ ์„ธ์…˜๊ฐ’ ๋ฐ”๋€Œ๋ฉด ์—๋Ÿฌ ๋œจ๋Š” ๊ฑฐ ์•„๋‹ˆ๋ƒ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ

core.Session

์‚ฌ์‹ค ์ด ์„ธ์…˜์€ ์–˜๊ฐ€ ๊ฑ ๋งŒ๋“  ํด๋ž˜์Šค์˜€๋˜ ๊ฑฐ์ž„^^

Openvidu์—์„œ๋Š” post ๋ฐฉ์‹์œผ๋กœ @PathVariable์— ์‹ค์–ด๋ณด๋‚ธ sessionId๋ผ๋Š” String๊ฐ’์„ ํ†ตํ•ด participant๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค.

์œ„์—์„œ ๋ณด์ด๋Š” SessionProperties๋„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ ๋”ฐ๋กœ ์ •์˜ํ•œ ํด๋ž˜์Šค๋‹ค. 

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ๋Š” SessionId๋ผ๋Š” String์„ ๊ณ„์† ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ๋งŒ ํ•˜๋ฉด kurento์—์„œ์ฒ˜๋Ÿผ ์š”์ฒญ๋งˆ๋‹ค ์„ธ์…˜๊ฐ’์ด ๋ฐ”๋€Œ๋‹ˆ ๋งˆ๋‹ˆ๋ฅผ ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฑฐ๋‹ค. 

์ด๋ ‡๊ฒŒ ์šฐ๋ฆฌ์˜ ์ด์Šˆ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

 

Signal

์•„์˜ˆ ์š”์ฒญ ๋ฐฉ์‹ ์ž์ฒด๊ฐ€ ๋‹ค๋ฅด๋‹ค ๋ณด๋‹ˆ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๋ถ™์ด๋Š” ๋ฐ์—๋„ ์ฐจ์ด๊ฐ€ ์žˆ์—ˆ๋‹ค.

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด openvidu๊ฐ€ ์‰ฝ๋‹ค.

Kurento-CallHandler,WebSocket

Kurento์—์„œ๋Š” ์•ž์„œ ๋งํ–ˆ๋“ฏ์ด message์˜ idํƒ€์ž…์— ๋”ฐ๋ผ ์„œ๋ฒ„๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ผ์ด ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋ฅผ ๋ชจ๋‘ ๊ฑด๋“œ๋ ค์•ผ๋งŒ ํ–ˆ๋‹ค. 

Client receiver, Client sender (Server CallHandler case๋ฌธ๋„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•จ) 

Openvidu-API

๊ทธ๋Ÿฌ๋‚˜ openvidu-server์—๋Š” ๋‹จ์ˆœํžˆ ๋ฉ”์„ธ์ง€๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ๋งŒ ํ•˜๋Š” API๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋ฏ€๋กœ, ์„œ๋ฒ„๋ฅผ ๊ฑด๋“œ๋ฆด ํ•„์š”๊ฐ€ ์ „ํ˜€ ์—†์—ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์—์„œ message type์„ ์„ค์ •ํ•˜๊ณ  ํ•ด๋‹น API๋กœ post ์š”์ฒญ์„ ๋‚ ๋ฆฌ๋ฉด, ์„œ๋ฒ„๋Š” ๋‹จ์ˆœํžˆ ๋ฉ”์„ธ์ง€๋ฅผ ์ „๋‹ฌ๋งŒ ํ•ด์ค€๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํด๋ผ์ด์–ธํŠธ์—์„œ sender๋ž‘ receive๋งŒ ์งœ ์ฃผ๋ฉด ๋˜๋Š” ๊ฑฐ๋‹ค. 

Client sender, Client receiver

๋ˆ„๊ตฌ์—๊ฒŒ ๋ณด๋‚ผ์ง€๋„ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ชจ๋‘ ์ •ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

mySession์€ useState๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋กœ, openvidu-browser npm package๋ฅผ ์„ค์น˜ํ•˜๋ฉด ์“ธ ์ˆ˜ ์žˆ๋Š” Openvidu๊ฐ€ ์•Œ์•„์„œ ํ•ด ์ค€๋‹ค.

to๋ฅผ ์—†์• ๊ฑฐ๋‚˜ ๋นˆ array๋ฅผ ๋„ฃ์œผ๋ฉด ํ•ด๋‹น ๋ฐฉ์— ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์ด ๋‚ ์•„๊ฐ€๊ณ , ํŠน์ •์ธ์„ ์ ์–ด๋„ฃ์œผ๋ฉด ํ•ด๋‹น ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ๋ฉ”์„ธ์ง€๊ฐ€ ๋‚ ์•„๊ฐ„๋‹ค. ์ฑ„ํŒ… ์˜ˆ์ œ๋งŒ ๋“ค๊ณ ์™”์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์ดํŽ™ํŠธ๋ถ€ํ„ฐ ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ๊นŒ์ง€ ์˜ค๋งŒ ๊ธฐ๋Šฅ์„ ์šฐ๊ฒจ๋„ฃ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

 

์‚ฌ์‹ค ์ด๊ฑด kurento์—์„œ๋„ ๊ด€๋ จ case๋ฌธ๋งŒ ํ•˜๋‚˜ ์งœ ์ฃผ๋ฉด ๋™์ผํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด๊ธฐ๋„ ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ตณ์ด ๋ฐฑ์—”๋“œ์˜ ๋„์›€์„ ๋ฐ›์•„ maven์œผ๋กœ ๋œ ์„œ๋ฒ„๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์•„๋„ ํ”„๋ก ํŠธ๊ฐ€ react๋กœ ๋ชจ๋“  ๊ฑธ ์กฐ์ข…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑด ์ •๋ง ํฐ ๋ฉ”๋ฆฌํŠธ๋‹ค.

 

media ์ œ์–ด

ํ™”์ƒ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉ์ž์˜ ๋ฏธ๋””์–ด ์ œ์–ด๋Š” ํ•„์ˆ˜์ ์ด๋‹ค.

์บ  ๊ป๋‹ค ์ผœ๊ณ  ๋งˆ์ดํฌ ๊ป๋‹ค ์ผœ์•ผ์ฃ .

๊ทธ๋Ÿฐ๋ฐ ์‚ฌ์šฉ์ž ๋ฏธ๋””์–ด๋Š” ๋ˆ„๊ฐ€ ์ œ์–ดํ• ๊นŒ์š”.

kurento-rtcPeer

kurento๋ฅผ ์ด์šฉํ•  ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์งฐ๋‹ค.

์ด๊ฒŒ ์ง„์งœ ๊ณจ ๋•Œ๋ ธ๋˜ ๊ฒŒ ์ •ํ™•ํ•œ ์ฝ”๋“œ ๊ฐ€์ด๋“œ๊ฐ€ ์—†๋‹ค. 

kurento google forum์— ๋ˆ„๊ฐ€ ๋ฏธ๋””์–ด ์ œ์–ด ๊ด€๋ จํ•ด์„œ ์งˆ๋ฌธ์„ ์˜ฌ๋ฆฌ๋ฉด ๋‹ต๋ณ€์œผ๋กœ ํ•œ ์„ธ๋„ค๊ฐ€์ง€ ๋ฐฉ์‹์ด ๋‹ฌ๋ฆฐ๋‹ค. ๋‹ค ํ•ด๋ณด์„ธ์šฉ ๋ญ ํ•˜๋‚˜๋Š” ๋  ๊ฑฐ์ž„ ์ด๋Ÿฐ ์‹์ž„. ๋ฌผ๋ก  ์šฐ๋ฆฌ๋Š” ๋‹ค ์•ˆ ๋ผ์„œ ํŒ€์› ๋ถ„๋“ค์ด kurento client์—์„œ ๊ฐœ๋ณ„ ์‚ฌ์šฉ์ž ์„ค์ •์„ ์ด๊ด„ํ•˜๋Š” rtcPeer ์ฝ”๋“œ๋ฅผ ์ „๋ถ€ ๊นŒ ๋ณธ ๋‹ค์Œ์— ์ฐพ์•„๋‚ด์…จ๋‹ค. 

Openvidu-stream

 

๋”ฐ๋กœ ์“ธ ์ผ์ด ์žˆ์–ด์„œ video๋ž‘ audio๋ฅผ useState๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ”๋žŒ์— ๊ธธ์–ด๋ณด์ด์ง€๋งŒ ํ›จ์”ฌ ์‰ฝ๋‹ค. 

openvidu์—์„œ๋Š” peer ๊ฐ๊ฐ์„ stream์œผ๋กœ ์ œ์–ดํ•œ๋‹ค. stream์„ ํ™•์ธํ•ด์„œ ์˜ค๋””์˜ค ์ผœ์ ธ ์žˆ์œผ๋ฉด ์ง€๊ธˆ ํผ๋ธ”๋ฆฌ์‹ฑํ•˜๋Š” ์˜ค๋””์˜ค ๋„๋ผ๊ณ  ๋ช…๋ น๋งŒ ์ณ ์ฃผ๋Š” ๊ฑฐ๋‹ค. 

์ด ์ž‘์—…์ด ์ข‹์•˜๋˜ ๊ฒŒ, openvidu๋Š” ์ž์ฒด ํฌ๋Ÿผ๊ณผ docs๊ฐ€ ๊ต‰์žฅํžˆ ์ž˜ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

์ €๋Ÿฐ ๋‹จ์ˆœ ์ž‘์—…์— ์‹œ๊ฐ„ ์“ธ ํ•„์š” ์—†์ด ๊ทธ๋ƒฅ ๊ณต์‹๋…์Šค๋‚˜ ํฌ๋Ÿผ์—์„œ ๋ณด๊ณ  ๋ณต๋ถ™ํ•˜๋ฉด ๋œ๋‹ค.

 

media ๊ฐ€๊ณต

์Œ์„ฑ ๊ฐ€๊ณต์€ ์šฐ๋ฆฌ ์„œ๋น„์Šค์˜ ํ•ต์‹ฌ์ด์—ˆ๋‹ค.

๋…ธ๋ž˜๋ฐฉ์„ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ ์—์ฝ”๊ฐ€ ์•ˆ ๋˜๋ฉด ์–ด๋–กํ•ฉ๋‹ˆ๊นŒ. ๊ทธ๋ฆฌ๊ณ  ์Œ์„ฑ๋ณ€์กฐ๋„ ๊ผญ ๋„ฃ๊ณ  ์‹ถ์—ˆ๋‹ค.

kurento-ใ…Žใ…Ž...

์–˜๋Š” ์ฐจ๋งˆ ์ฝ”๋“œ๋ฅผ ๋ชป ๊ฐ€์ ธ์™”๋‹ค.

๊ณ„ํš๋Œ€๋กœ๋ผ๋ฉด GStreamer๋ฅผ ๋ฌผ๋ ค์•ผ ํ–ˆ๋Š”๋ฐ ๊นƒํ—ˆ๋ธŒ๋ฅผ ์•„๋ฌด๋ฆฌ ๋’ค์ ธ๋„ kurento์— gstreamer๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฌผ๋ฆฌ๋Š”์ง€ ์ฐพ์„ ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š”... ๊ธ‰๊ธฐ์•ผ getUserMedia()๋กœ ์‚ฌ์šฉ์ž ์Œ์„ฑ์„ ์Œฉ์œผ๋กœ ๋Œ์–ด์˜จ ๋‹ค์Œ์— ์˜คํ”ˆ๋œ js๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ npm ์ฝ”๋“œ๋ฅผ ๊นŒ์„œ ์ปค์Šคํ…€ํ•˜๊ฒŒ ๋œ๋‹ค. ์ •๋ง ๋”ฅํ–ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๊ทธ๋ ‡๊ฒŒ ๊ฐ€๊ณตํ•œ ์Œ์„ฑ์„ kurento-utils์— ์–ด๋–ป๊ฒŒ ๋ฌผ๋ ค์•ผ ํ•˜๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค. ๋‹น์—ฐํžˆ kurento-utils๋„ ๋‚ด๋ถ€์ ์œผ๋กœ๋„ getUserMedia()๋กœ ์‚ฌ์šฉ์ž ์Œ์„ฑ์„ ๊ฐ€์ ธ์™€ ์ „์†กํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ๊ทธ ์Œ์„ฑ์„ ์šฐ๋ฆฌ๊ฐ€ ๋ณ€์กฐํ•œ ์Œ์„ฑ์œผ๋กœ ๋Œ€์ฒดํ•˜๋Š” ๋ฒ•์„ ๋„์ €ํžˆ ๋ชป ์ฐพ๊ฒ ๋˜ ๊ฑฐ๋‹ค. 

๋ธ”๋Ÿญ๋งŒ ์ž˜ ๋ผ์›Œ๋งž์ถ”๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ kurento-utils๋ผ๋Š” ๊ธฐ์กด ๋ธ”๋Ÿญ์„ ์•„์˜ˆ ๋ฐ•์‚ด๋‚ด๊ณ  ์žฌ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์™€ ๋ฒ„๋ฆฐ ๊ฑฐ๋‹ค. 

openvidu-applyFilter()

GStreamerFilter๋ฅผ ๋ผ์šธ ์ˆ˜ ์žˆ๋Š” applyFilter๋ฅผ ์ œ๊ณตํ•œ๋‹ค... 

์ถ”๊ฐ€ ์„ค๋ช…์€ ์ƒ๋žตํ•œ๋‹ค... 

 

 

๋งˆ๋ฌด๋ฆฌ

Kurento์™€ Openvidu์˜ ์ฐจ์ด๋Š” ์žฌ๋ฃŒ๋งŒ ์ฃผ์–ด์ง€๋А๋ƒ, ํ˜น์€ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š”๊ฐ€์˜ ์ฐจ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ์— Kurento๋กœ๋„ ์ถฉ๋ถ„ํžˆ openvidu๋งŒํ•œ ํผํฌ๋จผ์Šค๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๊ณ , ์˜คํžˆ๋ ค ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ๊ฐ€๋ณ๊ฒŒ ๋“ค๊ณ  ๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฆฌ๋ผ ์˜ˆ์ƒํ–ˆ๋‹ค. 

 

๊ทธ๋Ÿฐ๋ฐ kurento๊ฐ€ ๋„ˆ๋ฌด lowํ–ˆ๋‹ค. 

์ฒด๊ฐ์ƒ Kurento๊ฐ€ ๋‚˜๋ฌด ์กฐ๊ฐ ํ•˜๋‚˜๋ผ๋ฉด Openvidu๋Š” ์ˆ˜๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ๋ผ์›Œ๋„ฃ์„ ์ˆ˜ ์žˆ๋„๋ก ์ •๊ตํ•˜๊ฒŒ ๊ฐ€๊ณต๋œ ๋ธ”๋ก ๊ฐ™์•˜๋‹ค. 

๋ ˆํผ๋Ÿฐ์Šค ์ฐจ์ด๋„ ๋„ˆ๋ฌด ์‹ฌํ–ˆ๋‹ค. 

 

๋ฌผ๋ก  ์„œ๋ฒ„ ๊ตฌ์ถ• ๋ฐฉ๋ฉด์—์„œ๋Š” kurento๊ฐ€ ํ›จ์”ฌ ์ข‹์•˜๋‹ค.

kurento๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์šฐ๋ฆฌ ์ž…๋ง›๋Œ€๋กœ ๋งž์ถฐ ๋†“์€ nginx๋‚˜ coturn์„, openvidu๋กœ ์˜ฎ๊ธด ๋’ค์—๋Š” ๊ณ ์ •๋œ ์„ค์ •๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ํ–ˆ๋Š”๋ฐ ๊ทธ๊ฒŒ ๊ต‰์žฅํžˆ ๋ถˆํŽธํ–ˆ๋‹ค. 

 

ํ™•์‹คํ•œ ๊ฑด kurento๋Š” ๋ฐ๋ชจ์™€ ๊ณต์‹๋…์Šค, ๊ทธ๋ฆฌ๊ณ  ํฌ๋Ÿผ์„ ๋’ค์ง„๋‹ค๊ณ  ํ•ด์„œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์นœ๊ตฌ๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค. ๋”ฅํ•˜๊ฒŒ ํŒŒ๊ณ  ๋“ค์ž๋ฉด ํด๋ผ์ด์–ธํŠธ์— ์„ค์น˜ํ–ˆ๋˜ kurento-utils package๋ถ€ํ„ฐ ์šฐ๋ฆฌ ์ž…๋ง›์— ๋งž๊ฒŒ ๋œฏ์–ด๊ณ ์นœ ๋‹ค์Œ์— Signalling Server๋ฅผ ๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ๊ตฌ์ถ•ํ–ˆ์–ด์•ผ ํ•˜๋Š”๋ฐ

 

์–ด์จŒ๋“  ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฑธ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค๋ฉด ํ™”์ƒ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์ง„์ž‘ WebRTC ์˜คํ”ˆ์†Œ์Šค์— ๊ธฐ์—ฌํ•˜๋Ÿฌ ๊ฐ”์„ ๊ฑฐ๋‹ค.

 

์˜คํ”ˆ๋น„๋‘ ์“ฐ์„ธ์š”.

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€