Post

WebRTC

WebRTC

WebRTC (Web Real-Time Communication)

웹 브라우저간에 플러그인의 도움 없이 서로 통신(음성,영상,텍스트,파일)할 수 있도록 설계된 API

P2P 통신에 최적화되어있다.

3가지 클래스에 의해 실시간 데이터 교환이 이루어짐. (대부분의 브라우저에서 지원하는 표준 API)

  1. MediaStream (getUserMedia) 사용자의 카메라, 마이크같은 데이터 스트림에 접근. 애플리케이션이 사용자의 음성, 영상 데이터를 수집할 때 사용함
  2. RTCPeerConnection 암호화 및 대역폭 관리를 하는 기능. 오디오 또는 비디오 연결 담당
  3. RTCDataChannel 음성 및 영상 데이터가 아닌, json/text 데이터들을 주고받는 채널

WebRTC Application 수행과정

  1. Fetching 상대 peer에게 보낼 사용자의 음성 및 영상데이터 수집 MediaStream, getUserMedia를 통해 사용자의 영상 및 음성 정보를 가져온다

  2. Signaling 상대 peer와 연결을 맺기 위해 상대 peer의 정보탐색 peer끼리 서로를 찾을 수 있도록 중간 매개자 역할을 하는 서버인 signaling server 필요 3가지 종류의 정보를 교환해야함
    1. Network 정보 교환
      1. Ice Framework를 사용해 자신의 ip, port 찾기
      2. peer끼리 각자의 ice candidate (network 정보)를 확보하여 signaling server를 통해 상대 peer에게 본인의 ice candidate 전송
      3. 각 클라이언트간에 ice candidate가 도착하면, RTCPeerConnection, addIceCandidate를 통해 상대 peer의 네트워크 정보 등록
    2. Media Capability 교환
      1. SDP (Session Description Protocol) 형식을 따르는 blob인 offeranswer를 주고받으며 교환
      2. 내 브라우저와 상대 브라우저가 사용 가능한 코덱들과 해상도 찾음
    3. Session Control Message 교환
      1. Session의 초기화, 종료
  3. Connection 발견한 peer와 p2p connection. Channel 개방 signaling을 통해 상대 peer의 정보가 잘 등록된 RTCPeerConnection을 얻었다면 연결 성공
  4. Communication 개방해놓은 채널을 통해 데이터 통신 peer to peer 통신

WebRTC 통해 웹에 스트림

참고 오픈소스 : https://github.com/deepch/RTSPtoWebRTC

This post is licensed under CC BY 4.0 by the author.