WebRTC Signaling 프로세스 - 기초
Intro.
WebRTC는 완전 P2P 기술이라, 서로 다른 네트워크에 있는 2개의 디바이스들을 연결하기 위해, 디바이스들의 위치와 미디어 포맷 협의가 필요하다
이 과정을 시그널링이라고 한다.
혼자 프로그램을 만들다보니, 디렉터리 구조나 함수 등을 모듈화하는데에 고민이 있고, 시그널링 관련 로직 처리에 대한 지식이 부족하기에 기술한다
Server 측 준비 사항
WebRTC 자체에서는 시그널링에 관한 전송 메커니즘을 제시하지 않으므로, 개발자가 취향껏 시그널링 서버를 통해 시그널링 관련 정보를 전달하면 된다.
-
서버의 역할
- 새로운 유저 등록, username 세팅 ,채팅 메세지 전송 등등
- 시그널링과 ICE Negotiation
- 특정 유저에게 메시지를 보낼 수 있어야 한다
-
예시 : sendToOneUser 함수
- 특정 유저에게 메시지를 보내는 메소드
- 특정 유저에게 시그널링, unknown 타입의 메시지를 보낼 수 있다.
- 연결된 유저 리스트를 확인하고, 메시지를 보낸다.
function sendToOneUser(target, msgString) {
var isUnique = true;
var i;
for (i = 0; i < connectionArray.length; i++) {
if (connectionArray[i].username === target) {
connectionArray[i].sendUTF(msgString);
break;
}
}
}
Designing the Signaling Protocol
-
메시지를 교환하는 메커니즘을 만들었으므로, 어떻게 구성할지에 대한 프로토콜이 필요하다
-
session description 교환
- 시그널링 프로세스를 시작 할 때, call을 시작하는 유저는 offer를 만든다.
- offer : 세션 정보를 SDP 포맷으로 가지고, 상대방(callee)에게 전달해야 한다.
- Callee는 이 offer에 anwer(역시나 SDP description)을 포함하는 answer를 보내야 한다.
- 예시 field
- message type
- user name
- target
- sdp : 커넥션의 로컬 정보 (수신자 관점에서는 SDP는 커넥션의 remote 정보)
- offer : 세션 정보를 SDP 포맷으로 가지고, 상대방(callee)에게 전달해야 한다.
- 시그널링 프로세스를 시작 할 때, call을 시작하는 유저는 offer를 만든다.
-
ICE candidates 교환
- SDP를 서로 교환 한 후, 두 피어들은 ICE 후보(ICE Candidate)를 교환한다.
- 각 ICE 후보들은 발신자 입장에서 통신을 할 수 있는 방법을 설명한다.
- 발신/수신자는 검색 되는 순서대로 candidate를 보낸다
- 미디어가 이미 스트리밍을 시작 했더라도, 모두 가능한 candidate가 전송 완료 될 때까지 계속 보낸다.
- 두 피어가 서로 호환되는 candidate를 제안했다면! 미디어는 통신을 시작한다
- SDP를 서로 교환 한 후, 두 피어들은 ICE 후보(ICE Candidate)를 교환한다.
-
발신자의 TODO
- ICE negotiation 동안 외부로나갈 candidate 선택
- ICE candidate event handler가 불렸을 때 시그널링 서버를 통해 그 것을 다른 피어로 전송
- 시그널링 서버로부터 ICE candidate 메세지를 받고 RTCPeerConnection에 ICE candidate 전달
Signaling Protocol 요약
Session Description과 ICE candidate 교환 방식 정의가 필요하다
-
Seesion Description 교환
- 발신자는 Session 정보를 SDP 포맷으로 꾸려 수신자에게 offer한다.
- 수신자 역시 SDP 포맷으로 이에 대한 answer를 보낸다
-
ICE candidate 교환
- 수신/발신자는 서로에게 ICE candidate를 검색 되는데로 계속 보낸다
- 서로 호환되는 candidate가 제안 되었다면, 미디어 통신을 시작 한다.
-
구현 할 때, 어떤 것을 만들어야 하는가
- SDP offer/answer 기능
- ICE candidate 생성/전송/수신 기능
레퍼런스
- SDP는 무엇인가
- [[WebRTC]]
- webRTC Docs
- ICE - WebRTC Peer 연결 프로토콜
- [[ICE 프레임 워크는 뭘까|ICE 프레임 워크는 뭘까]]
- [[WebRTC Signaling 프로세스 - 심화]]
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
728x90
'DEV > Backend' 카테고리의 다른 글
PostgreSQL 터미널에서 접속하는 방법 (0) | 2023.04.05 |
---|---|
PostGreSQL 모든 권한 부여하는 방법 (0) | 2023.04.02 |
Webrtc 통신 방법 (0) | 2023.02.28 |
WebRTC Overview (1) | 2023.02.28 |
fastify - Property 'view' does not exist on type (0) | 2023.02.27 |