티스토리 뷰

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 정보)
  • ICE candidates 교환

    • SDP를 서로 교환 한 후, 두 피어들은 ICE 후보(ICE Candidate)를 교환한다.
      • 각 ICE 후보들은 발신자 입장에서 통신을 할 수 있는 방법을 설명한다.
      • 발신/수신자는 검색 되는 순서대로 candidate를 보낸다
      • 미디어가 이미 스트리밍을 시작 했더라도, 모두 가능한 candidate가 전송 완료 될 때까지 계속 보낸다.
      • 두 피어가 서로 호환되는 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 생성/전송/수신 기능

레퍼런스

부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>

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