쿠렌토란?

 

쿠렌토 (Kurento)는 정확히 Kurento Media Server를 뜻하며,  WebRTC를 사용한 video application이다.

내가 프로젝트 진행중 뜬금없이 쿠렌토에 관련한 내용을 포스팅 하는 이유는 WebRTC 때문이다.

 

왜 사용하는가?

나는 이번 프로젝트를 위해 WebRTC를 통한 미디어 서버 구축, 이를 통한 비디오 스트리밍 환경을 구축하고자 했다.

그러나 단순 P2P 방식이 아닌 broadcasting을 위한 media server 구축에 어려움을 겪어 오픈 소스를 활용하고자 한다.

 

Kurento Media Server (이하 KMS)를 사용하게 되면, 브로드캐스팅을 위한 미디어 서버 구축을 스킵하고, 유저들간의 커넥션을 위한 signaling server만을 구축하면 되어서 구현이 쉬워진다.

 

 

사용 방법

 

KMS를 사용하는 방법은 3가지이다.

 

1. WebRTC 브라우저에서 Kurento JavaScript SDK를 바로 사용하기 (즉, 프론트단에서 kurento 라이브러리 사용하기, 단 빠르게 개발할 경우에만 추천됨)

 

2. Java EE Application Server에서 Kurento JavaScript SDK 사용 (자바 서버가 signaling 역할)

 

3. Node.js Application Server에서 Kurento Javascript SDK 사용 (노드 서버가 singaling 역할)

 

 

 

위 사진에서 볼 수 있듯 중간 signaling server의 역할은 클라이언트 단에서 유저의 정보 및 요청만을 받아온다.그 후 KMS에게 요청을 보내 Clinet와 KMS 사이에 파이프라인이 연결되게 한다.

 

이렇게 될 경우 자바 서버에서 대규모 트래픽, 스트리밍 파이프라인 등을 직접 관리하지 않아도 되는 편리성이 생긴다.

 

 

KMS는 무엇을 할 수 있는가?

 

KMS는 영상 통신을 위한 여러가지 기능을 지원하지만 현재 프로젝트에서 가장 중요한 지원 기능은 다음과 같다.

 

1. HTTP, RTP, WebRTC를 포함한 네트워크 스트리밍 프로토콜 지원

2.  MCU, SFU 등 그룹 커뮤니케이션을 위한 미디어 라우팅/디스패치 지원

 

 

 

 

나는 무엇을 사용하려고 하는가? (one2Many video call)

 

KMS는 다양한 통신 옵션을 제공한다. (1:1, 1:N, N:N)

그 중, 라이브 스트리밍의 기본 목적인 1:N 영상 송출 구현을 위한 튜토리얼 소스를 활용할 것이다.

 

1:N 통신을 kurento에서는 one2many video call로 명명하고 있으며 원리는 다음과 같다.

 

1. Presenter(호스트)가 system에 입장한다. 오직 한명의 presenter만 존재할 수 있다. 

2. N명의 viewer들이 presenter에 연결을 요청한다. 

3. viewer들은 언제든 통신을 벗어날 수 있다.

4. presenter가 통신을 끊으면 모든 통신이 종료된다.

 

One to many video call signaling protocol

 

SDP (Session Description Protocol) : SDP는 스트리밍 미디어 세션에 관한 파라미터를 담은 메시지이다.

sender와 receiver 사이의 통신 규약이다.

 

sender

v=0
o=- 0 0 IN IP4 127.0.0.1
s=Example sender
c=IN IP4 127.0.0.1
t=0 0
m=audio 5006 RTP/AVP 96
a=rtpmap:96 opus/48000/2
a=sendonly
m=video 5004 RTP/AVP 103
a=rtpmap:103 H264/90000
a=sendonly

 

receiver

v=0
o=- 3696336115 3696336115 IN IP4 192.168.56.1
s=Example receiver
c=IN IP4 192.168.56.1
t=0 0
m=audio 0 RTP/AVP 96
a=rtpmap:96 opus/48000/2
a=recvonly
m=video 31278 RTP/AVP 103
a=rtpmap:103 H264/90000
a=recvonly

 

 

ICE (Interactive Connectivity Establishment) :  NAT Traversal ( 네트워크 주소 변환)을 위한 프로토콜이다. endpoint간의 연결을 위해 필요하다.

 

 

 


 

Kurento 튜토리얼 소스의 경우 자바에서 지원하는 기본 웹소켓 라이브러리를 통해 구현이 되어있다.

하지만 나는 stomp를 사용하여 프로젝트를 구성중이었는데, stomp를 통해 KMS와 통신이 가능하게끔 수정하는 작업이 필요했다.

 

기본 웹소켓 라이브러리는 사용자가 직접 세션을 하나하나 컨트롤해줘야 하지만, stomp의 경우 세션 관리를 직접 해주기때문에 이 부분의 수정이 필요했다.

 

전체적인 서버 로직과 수정된 코드는 다음 포스팅에서 계속 진행하겠다.

 

 

ref : https://doc-kurento.readthedocs.io/en/stable/index.html

+ Recent posts