본문 바로가기
개발/개발이야기

WEBRTC SIGNALING, ICE, SDP, STUN, TURN 기본 용어 알아보기

by 낭만기사 2020. 8. 25.
반응형

웹을 기반으로 실시간 화상 운동프로그램을 진행하기 위해서는 SIGNALING , STUN, TURN,  ICE가 필요하다. 이는 통신하고자 하는 대상자가 어디에 있는지 찾기 위해서 사용 된다.

 

WEBRTC 시그널링 과정

2.1 SIGNALING

클라이언트들이 데이터를 교환하기 위하여 통신 설정 수행 과정이 필요하여 이 과정을 통하여 네트워크 주소 변환 및 방화벽에 대응하게 된다.

 

2.2 ICE(Interactive Connectivity Establishment)

웹 브라우저 간에 직접적인 Peer To Peer를 접속 할 수 있도록 해주는 프레임워크이다. 공인된 IP 주로를 갖지 않은 장비에게 유일한 주소를 부여 한다.

 

2.3 SDP(Session Description Protocol)

Peer가 가진 세션의 정보들을 포함한 프로토콜 SDP를 통해 Session Open/Close, Error messages, Media metadata, Secure Key, Network IP를 주고 받는다.

 

2.4 STUN (Session Traversal Utilities for NAT)

STUN은 사용자의 공인주소를 찾고 P2P로 직접적인 연결을 막는 요소가 라우터 내에 있는지 알아내는 프로토콜이다.

 

2.5 TURN(Traversal Using Relays around NAT)

TURN Traversal Using Relays around NAT의 약자로 피어(Peer)가 직접 연결을 실패하게 되면 피어(Peer)들 사이의 오디오/비디오/데이터 스트리밍 데이터를 중계를 해준다. (TURN)서버는 공용 주소를 가지고 있고 피어(Peer)가 방화벽, 프록시 때문에 접속하지 못할 때 대안으로 사용된다.

 

3.  웹기반 실시간 화상통신 시스템 설계

 

WebRTC 공개 라이브러리는 EasyRTC, SimpleRTC, PeerJS, RTCMultiConnection가 있는데 이중 RTCMultiConnection 라이브러리가 샘플에 많아 사용하기가 편해보였다. 

 

WebRTC 프로그램이 실행되는 일반적인 기능들은 크게 5가지로 구분 된다. 첫째 스트리밍 오디오, 비디오, 데이터를 획득 한다. 둘째 네트워크 정보 획득 및 다른 WebRTC 클라이언트와 정보 교환을 한다. 셋째 에러들을 보고, 세션 초기화 / 종료를 위한 시리얼 통신 관리를 한다. 넷째 미디어의 해상도와 코덱 대한 정보 교환을 한다. 다섯째 스트리밍, 오디오, 비디오, 데이터의 송수신을 한다.

 

브라우저가 웹 서버와 통신을 하게 된다. 이는 브라우저와 서버가 Javascript RTC API와 통신 하게 되는 것으로 RTC API HTTP와 웹 소켓을 응용하여 웹 서버와 통신을 하게 된다. 운동사와 대상자 모두 동일한 방법으로 연결이 가능하도록 시스템을 구성하였고 브라우저 간에는 직접연결 하여 미디어 경로로 오디오, 비디오, 데이터를 실시간으로 전송한다.

 

스트리밍 데이터를 얻고 통신하기 위해서는 주요 기능으로 크게 3가지 API를 제공한다. getUserMedia()는 카메라/마이크 등 데이터 스트림에 접근 한다. 시작하면 사용할 미디어를 객체로 전달하고 성공하면 콜백이 실행된다.

카메라/마이크 스트림 접근 권한

그 후 gotStream()이 실행된다. getStream()의 파라미터로는 사용자 PC에서 얻어낸 미디어의 스트림이 전달된다. 전달받은 스트림을 URL객체로 만들어서 <video> 태그의 소스로 지정하고 <video> 태그에 autoplay를 옵션을 넣어주면 스트림이 전달되는 즉시 아래와 같이 PC USB카메라의 화면을 볼 수 있다.

 

채널은 2명 이상의 사용자가 필요하다. 데이터를 비공개로 전송하기 위하여 각각의 대화방 생성이 가능합니다. 이는 관리자에게 전송 및 관리의 유연성을 제공한다.

 

Socket.io session

channel/session-id Socket.io 서버에 존재하는 채널에 대한 참조를 설명하고 있다. Session을 엑세스하고 "session-id" 또는 "channel-id"로 알려진 고유 식별자를 부여 받는다. 두 명 이상의 사용자가 필요하고 동일한 "channel ID"를 가지고 있어야 합니다. 그렇지 않으면 해당 사용자의 정보를 얻을 것이 불가능하기 때문에 연결 할 수 없다. Peer 검출에 가장 중요한 요소 중 하나 이다.

 

다른 대상자를 감지해야 한다. 대상자에게 참가 요청을 보내고 SDP/ICE 같은 데이터를 교환 및 상태를 업데이트 한다. 2명 이상의 대상자들 사이에서 데이터를 교환하기 위한 시그널링 서비스가 필요하다.

 

3.  별첨

 

최대한 단순한 로그인 방법을 채택하였다. 운동사와 대상자들은 NFC 부착형 스티커 또는 기기를 가지고 NFC 리더기에 접촉하게 되면 자동으로 base64로 미리 인코딩한 주소를 통하여 로그인 가능하다.

 

WEBRTC NFC 로그인

반응형