https://puzzle-making.tistory.com/292

 

쿠렌토 Kurento 란 무엇인가?

쿠렌토란? 쿠렌토 (Kurento)는 정확히 Kurento Media Server를 뜻하며, WebRTC를 사용한 video application이다. 내가 프로젝트 진행중 뜬금없이 쿠렌토에 관련한 내용을 포스팅 하는 이유는 WebRTC 때문이다. 왜

puzzle-making.tistory.com

 

지난 게시글에서 쿠렌토가 무엇인지 간략하게 정리를 해보았다.

나는 쿠렌토에서 제공하는 기능을 활용하여 1:N 서비스를 구축할 것이며,

본격적인 개발 전 튜토리얼 소스를 보고 전체 로직을 분석해 보았다.

 

 


 

1:N process

 

위 사진은 지난 게시글에서도 올렸던 1:N video call 서비스의 전체 프로세스다.

kurento의 one2many call 튜토리얼 소스를 보면서 자세한 순서를 분석해보고자 한다.

 

 

1. presenter가 sdp 정보를 offer 한다.

index.js

sdp 정보를 생성한 뒤 시그널링 서버로 id와 sdpOffer 값을 전송해준다.

 

 

2. 시그널링 서버에서 sdp answer 정보와 ICE Candidate 값을 return 해준다. (이 때 KMS와 통신)

서버에서 presenter의 요청을 받으면 브라우저간 연결을 위한 pipeline을 먼저 생성한다.

ICE 정보의 경우 이벤트 핸들러를 통해 정보를 받아와 presenter쪽으로 return해준다.

 

 

이 후 프론트에서 받아온 sdpOffer 정보를 바탕으로 sdpAnwer를 생성하여 return

 

3. presenter에서 sdp answer는 peerConnection 정보에, ICE candidate값을 통해 RTCpeerConnection을 establish 한다.

3-1 sdp와 ice의 차이가 무엇인지 궁금하여 좀더 찾아보았다.

      공식 문서에서 확인한 바로는, sdp는 http 처럼 peer간 통신을 위한 통신 규약이다. 자기들끼리 어떤식으로 통신하겠다는 약속을 서로 확인하는 것이며 미디어 전송을 위한 규약이다.

ice는 NAT traversal을 위한 규약이며 통신을 위한 규약이다.

자세한 프로세스는 https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Session_lifetime에서 확인가능 하다.

 

4. sdp와 ice 정보가 서로 교환이 완료되어야만 RTCpeerConnection이 정상적으로 생성될 수 있다.

5. RTCpeerConnection이 정상적으로 생성되면 presenter는 video 정보를 streaming할 수 있다.

6. 이 후 Viewer에서도 서버와 sdp와 ice 정보를 주고받은 뒤 connection이 생성되면 video 정보를 받을 수 있게 된다.

 

 


 

디테일한 전체 로직을 뜯어보려면 kurento 라이브러리를 전체 해부 분석해야한다.

아직은 webRTC의 이해도가 낮아 완벽하게 이해하기에는 어려웠지만 필수적인 요소들에 대한 감을 잡을 수 있었다.

 

소스를 보면 스프링의 기본 웹 소켓 라이브러리를 통해 통신을 하고있는데, 나의 경우  stomp를 사용하게되어 로직 수정이 있었다.

stomp는 세션관리를 알아서 해주기 때문에 임의로 세션을 불러오는 작업이 필요했는데, 자세한 소스 확인은 깃헙 레포에서 확인 가능하다.

 

https://github.com/SELL-BOX/sellbox-backend/blob/main/sellBox/src/main/java/com/prod/sellBox/controller/VideoController.java

 

GitHub - SELL-BOX/sellbox-backend

Contribute to SELL-BOX/sellbox-backend development by creating an account on GitHub.

github.com

 

+ Recent posts