[WebRTC] ๋ฌด์กฐ๊ฑด Openvidu๋ฅผ ์ฌ์ฉํ์ -2 (OpenVidu vs Kurento)
[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 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๋ฅผ ๋ฏ์ด๋ณด๋ฉด ์ข ๋ค๋ฅด๋ค.
Kurento-WebSocketSession
Kurento์์ ์ฌ์ฉ์ ์์ฒญ ํ๋ก์ฐ๋ฅผ ๋ฐ๋ผ๊ฐ๋ ค๋ฉด CallHandler์ handleTextMessage()๋ถํฐ ๋ณด๋ฉด ๋๋ค.
CallHandler ํด๋์ค๋ ์ฒ์๋ถํฐ org.springframework.web.socket.handler.TextWebSocketHandler๋ฅผ implementํด์ ๊ตฌํ๋์ด ์๋ค.
์ค๋ฒ๋ผ์ด๋ ๋ handleTextMessage์์๋ ์ฒ์๋ถํฐ WebSocketSession๊ณผ message๋ฅผ ๋ฐ๋๋ฐ, ํด๋ผ์ด์ธํธ์์ Jsonํ์ ์ผ๋ก ๋ฉ์ธ์ง๋ฅผ ๋ง๋ค์ด ์น์์ผ์ ์ค์ด ๋ณด๋ด๋ฉด ์ด ์น๊ตฌ๊ฐ ๊ทธ๊ฑธ ์ก์ ๋ค์์ json๋ฉ์ธ์ง์ id๊ฐ์ ๋ฐ๋ผ ํด๋น ์์ฒญ์ ์ํํ๋ ๊ฑฐ๋ค.
๋ง์ผ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ๋ถ์ด๊ณ ์ถ๋ค๋ฉด case๋ฌธ์ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
WebSocketSession์ ์ปค์คํ ์ด ์๋๋ผ org.springframework.web.socket.WebSocketSession ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
๊ฐ ์ ์ ๊ฐ์ฒด๋ฅผ ๋ปํ๋ UserSession ํด๋์ค์์๋ WebSocketSession์ ๊ทธ๋๋ก ์ ์ฅํด์ ์ฐ๊ณ ์๋ค.
Openvidu-Session(์ฌ์ฉ์ ์ ์)
Openvidu์์ ์ฌ์ฉ์ ์์ฒญ ํ๋ก์ฐ๋ฅผ ๋ฐ๋ผ๊ฐ๋ ค๋ฉด rest->core ํจํค์ง ์์ผ๋ก ๋ณด๋ฉด ๋๋ค.
๋ณด๋ค์ํผ openvidu๋ ํด๋ผ์ด์ธํธ์์ axios๋ก ๋ ๋ฆฐ ํธ์ถ์ controller์์ ๋์์ฑ๋ REST ๋ฐฉ์์ผ๋ก ์๋ํ๋ค.
ํด๋ผ์ด์ธํธ์์ openvidu ๊ด๋ จ ํจํค์ง๋ฅผ ์ค์นํ๊ณ ํธ์ถ ์ฃผ์๋ง ์ก์์ฃผ๋ฉด ๋์ด๋ผ ์น์์ผ์ ๋ฐ๋ก ์ ๊ฒฝ์จ ์ค ํ์๊ฐ ์๋ค.
Openvidu์์๋ Session๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋๊น ์๋ ์ธ์ ๊ฐ ๋ฐ๋๋ฉด ์๋ฌ ๋จ๋ ๊ฑฐ ์๋๋ ํ ์ ์๋๋ฐ
์ฌ์ค ์ด ์ธ์ ์ ์๊ฐ ๊ฑ ๋ง๋ ํด๋์ค์๋ ๊ฑฐ์^^
Openvidu์์๋ post ๋ฐฉ์์ผ๋ก @PathVariable์ ์ค์ด๋ณด๋ธ sessionId๋ผ๋ String๊ฐ์ ํตํด participant๋ฅผ ๊ด๋ฆฌํ๊ณ ์๋ค.
์์์ ๋ณด์ด๋ SessionProperties๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋๋ผ ๋ฐ๋ก ์ ์ํ ํด๋์ค๋ค.
๊ทธ๋ฌ๋๊น ํด๋ผ์ด์ธํธ ์ธก์์๋ SessionId๋ผ๋ String์ ๊ณ์ ๊ฐ์ง๊ณ ์๊ธฐ๋ง ํ๋ฉด kurento์์์ฒ๋ผ ์์ฒญ๋ง๋ค ์ธ์ ๊ฐ์ด ๋ฐ๋๋ ๋ง๋๋ฅผ ์ ๊ฒฝ ์ธ ํ์๊ฐ ์๋ ๊ฑฐ๋ค.
์ด๋ ๊ฒ ์ฐ๋ฆฌ์ ์ด์๊ฐ ํด๊ฒฐ๋์๋ค.
Signal
์์ ์์ฒญ ๋ฐฉ์ ์์ฒด๊ฐ ๋ค๋ฅด๋ค ๋ณด๋ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ๋ถ์ด๋ ๋ฐ์๋ ์ฐจ์ด๊ฐ ์์๋ค.
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด openvidu๊ฐ ์ฝ๋ค.
Kurento-CallHandler,WebSocket
Kurento์์๋ ์์ ๋งํ๋ฏ์ด message์ idํ์ ์ ๋ฐ๋ผ ์๋ฒ๊ฐ ์ํํ๋ ์ผ์ด ๋ฌ๋ผ์ง๋ฏ๋ก, ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ค๋ฉด ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ฅผ ๋ชจ๋ ๊ฑด๋๋ ค์ผ๋ง ํ๋ค.
Openvidu-API
๊ทธ๋ฌ๋ openvidu-server์๋ ๋จ์ํ ๋ฉ์ธ์ง๋ฅผ ์ ๋ฌํ๊ธฐ๋ง ํ๋ API๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ฏ๋ก, ์๋ฒ๋ฅผ ๊ฑด๋๋ฆด ํ์๊ฐ ์ ํ ์์๋ค. ํด๋ผ์ด์ธํธ์์ message type์ ์ค์ ํ๊ณ ํด๋น API๋ก post ์์ฒญ์ ๋ ๋ฆฌ๋ฉด, ์๋ฒ๋ ๋จ์ํ ๋ฉ์ธ์ง๋ฅผ ์ ๋ฌ๋ง ํด์ค๋ค. ๊ทธ๋ฌ๋ฉด ํด๋ผ์ด์ธํธ์์ sender๋ receive๋ง ์ง ์ฃผ๋ฉด ๋๋ ๊ฑฐ๋ค.
๋๊ตฌ์๊ฒ ๋ณด๋ผ์ง๋ ํด๋ผ์ด์ธํธ์์ ๋ชจ๋ ์ ํ ์ ์์๋ค.
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 ์คํ์์ค์ ๊ธฐ์ฌํ๋ฌ ๊ฐ์ ๊ฑฐ๋ค.
์คํ๋น๋ ์ฐ์ธ์.