WebRTC
WebRTC
- WebRTC (Web Real-Time Communication)
웹 브라우저간에 플러그인의 도움 없이 서로 통신(음성,영상,텍스트,파일)할 수 있도록 설계된 API
P2P 통신에 최적화되어있다.
3가지 클래스에 의해 실시간 데이터 교환이 이루어짐. (대부분의 브라우저에서 지원하는 표준 API)
- MediaStream (getUserMedia) 사용자의 카메라, 마이크같은 데이터 스트림에 접근. 애플리케이션이 사용자의 음성, 영상 데이터를 수집할 때 사용함
- RTCPeerConnection 암호화 및 대역폭 관리를 하는 기능. 오디오 또는 비디오 연결 담당
- RTCDataChannel 음성 및 영상 데이터가 아닌, json/text 데이터들을 주고받는 채널
WebRTC Application 수행과정
Fetching 상대 peer에게 보낼 사용자의 음성 및 영상데이터 수집 MediaStream, getUserMedia를 통해 사용자의 영상 및 음성 정보를 가져온다
- Signaling 상대 peer와 연결을 맺기 위해 상대 peer의 정보탐색 peer끼리 서로를 찾을 수 있도록 중간 매개자 역할을 하는 서버인
signaling server
필요 3가지 종류의 정보를 교환해야함- Network 정보 교환
- Ice Framework를 사용해 자신의 ip, port 찾기
- peer끼리 각자의
ice candidate
(network 정보)를 확보하여signaling server
를 통해 상대 peer에게 본인의 ice candidate 전송 - 각 클라이언트간에
ice candidate
가 도착하면,RTCPeerConnection,
addIceCandidate
를 통해 상대 peer의 네트워크 정보 등록
- Media Capability 교환
SDP
(Session Description Protocol) 형식을 따르는 blob인offer
와answer
를 주고받으며 교환- 내 브라우저와 상대 브라우저가 사용 가능한 코덱들과 해상도 찾음
- Session Control Message 교환
- Session의 초기화, 종료
- Network 정보 교환
- Connection 발견한 peer와 p2p connection. Channel 개방
signaling
을 통해 상대 peer의 정보가 잘 등록된RTCPeerConnection
을 얻었다면 연결 성공 - Communication 개방해놓은 채널을 통해 데이터 통신 peer to peer 통신
WebRTC 통해 웹에 스트림
참고 오픈소스 : https://github.com/deepch/RTSPtoWebRTC
This post is licensed under CC BY 4.0 by the author.