[WebRTC] WebRTC란 무엇인가요? WebRTC 시작하기

WebRTC의 역사:

Web에서의 끝판왕 목표 중 하나는 영상와 육성을 사용하여 사람간 "실시간통신(Real Time Communication: RTC)"을 가능하게 하는 것입니다. 이는 우리가 텍스트 입력을 하는것처럼 자연스러워야 합니다.

Web에서는 RTC 기술을 접목하는 것이 특히 더 어려웠습니다. Gmail의 video chat이 2008년에 인기를 얻었으며 2011년에는 Google에서 행아웃을 출시했습니다. Google은 RTC에 사용되는 많은 컴포넌트들을 개발한 GIPS라는 회사를 인수하였으며 GIPS에서 개발한 기술들을 오픈소스로 풀어버렸습니다. 그리고 RTC의 기준을 만들기위해 노렸했습니다. 그리고 2011년 5월 에릭슨에서 처음으로 WebRTC를 도입하여 개발하였습니다.


WebRTC 어플리케이션들은 여러가지를 해야됩니다:
- 스트리밍되는 오디오, 비디오 혹은 다른 데이터를 가져오기
- 다른 WebRTC 클라이언트와 연결할 수 있도록, IP주소, 포트와 같은 네트워크 정보를 받아오고 이를 서로 교환하기(NAT과 Firewall을 통해서도)
- Signaling communication을 조직하여 세션을 시작 / 종료 / 에러를 보고합니다
- 미디어와 클라이언트의 정보를 교환합니다(해상도, 코덱 등)
- 스트리밍되는 오디오 , 비디오, 데이터를 주고받습니다.

이를 위해 WebRTC는 다음과 같은 API들을 제공합니다:
- MediaStream: data stream에 access할 수 있도록 합니다(웹캠, 마이크 등)
- RTCPeerConnection:
- RTCDataChannel: peer-to-peer간의 generic data 통신



Signaling: Session control, network and media information:

WebRTC는 RTCPeerConnection을 사용하여 browsers(peers) 간의 스트리밍 데이터를 통신합니다. 하지만 WebRTC는 통신을 조직하고 control message를 보내는 signaling이라고 불리는 작업도 필요합니다. Signaling을 하는 방법이나 프로토콜은 WebRTC에 정의되어 있지 않으며 signaling은 RTCPeerConnection API에 포함되어 있지 않습니다.

대신에, WebRTC 앱 개발자들은 자신이 원하는 messaging 프로토콜(SIP나 XMPP 등)을 사용할 수 있습니다.

Signaling은 다음 3가지 정보를 교환하기 위해 사용됩니다:
    1. Session control messages: 통신을 시작/종료/에러 보고
    2. Network configuration: 외부에 자신의 컴퓨터의 IP주소와 포트를 알려줍니다
    3. Media capabilities:  내 브라우저와 내가 통신하려고 하는 브라우저의 코덱과 해상도 정보

Signaling을 통한 정보교환은 peer-to-peer 스트리밍을 하기전 완료되어 있어야합니다.

WebRTC 클라이언트(peers)들은 로컬과 원격의 오디오와 비디오 미디어 정보(해상도, 코덱 등)를 확실하게 정하고 교환하여야합니다. 정보를 교환하기 위한 signaling은 Session Description Protocol(SDP: offer, answer등의 type)을 사용합니다.

네트워크와 미디어 정보의 취득과 교환은 동시에 이루어져도 되지만 peer들 간의 통신이 시작되기 전 두가지의 작업은 모두 완료가 되어있어야합니다.

Signaling 프로세스가 끝나면, data는 peer와 peer간에 직접적으로 통신이 가능합니다. 만약 직접적으로 통신하는 것이 실패한다면 매개 서버를 통해서 통신할 수도 있습니다. Streaming은 RTCPeerConnection의 역할입니다.



RTCPeerConnection

RTCPeerConnection은 안정적으로 효율적으로 peer들 간의 스트리밍 데이터를 통신하는 WebRTC 컴포넌트입니다.

RTCPeerConnection안에 내장된(일반 개발자들은 몰라도 되는) 코덱과 프로토콜들은 불안정한 네트워크에서도 실시간 통신을 가능하게하기 위해 엄청나게 많은 일들을 합니다:
    - packet loss concealment
    - echo cancellation
    - bandwidth adaptivity
등등등...



RTCPeerConnection과 서버

실제로 WebRTC를 사용하기위해서는 서버가 필요합니다. 서버는 다음과 같은 일들을 처리할 수 있으면 됩니다:
    - 유저들은 서로를 찾을 수 있고 '실제 세계'의 정보(이름 등)를 주고받을 수 있습니다
    - WebRTC 클라이언트들은 네트워크 정보를 교환할 수 있습니다.
    - WebRTC 클라이언트들은 미디어에 대한 정보(해상도, 형식)를 교환할 수 있습니다.
    - WebRTC 클라이언트들은 NAT gateway와 firewall을 통과할 수 있습니다.
































원문: https://www.html5rocks.com/en/tutorials/webrtc/basics/

댓글

이 블로그의 인기 게시물

[Django 공식문서 번역] REST Framework - Viewset and Router

[Django REST Framework] create() vs perform_create()

Intel Open WebRTC Toolkit(OWT) Media server 설치하는법