-
Notifications
You must be signed in to change notification settings - Fork 4
WebRTC 1:1 영상채팅 시나리오
user1과 user2가 1:1 영상 채팅을 한다고 가정
-
[user1/user2]
getUserMedia
를 통해mediaStream
을 얻어localVideo.srcObject
에 등록하고localStream
변수에 저장해 놓는다. -
[user1/user2]
socket.io
에 지정된 방 번호로join
한다. 이 때 먼저 접속한 유저는Initiator
가된다. -
[user1/user2] 방에 모든 유저가 입장완료되면, 각 유저는
RTCPeerConnection
객체를 생성한 후 아래 3개의 이벤트의 핸들러를 등록한다.onicecandidate
ontrack
onremovestream
-
[user1/user2] 위에서 생성한
RTCPeerConnection
객체의addStream()
를 통해localStream
을 추가한다. -
[user1] 4번 작업이 완전히 끝나면,
Initiator
인 user1은RTCPeerConnection.createOffer()
를 통해sessionDescription
생성 후RTCPeerConnection.setLocalDescription(sessionDescription)
을 통해description
을 등록한다. -
[user1]
socket.io
를 통해 user2에게description
객체를 전달한다. -
[user2] user2는 user1의
description
을RTCPeerConnection.setRemoteDescription(new RTCSessionDescription(description));
함수를 통해 등록한다. -
[user2]
RTCPeerConnection.createAnswer()
를 통해sessionDescription
생성 후RTCPeerConnection.setLocalDescription(sessionDescription)
을 통해description
을 등록한다. -
[user2]
socket.io
를 통해 user1에게description
객체를 전달한다. -
[user1] user1은 user2의
description
을RTCPeerConnection.setRemoteDescription(new RTCSessionDescription(description));
함수를 통해 등록한다. -
[user1/user2]
setRemoteDescription
을 등록하고나면, 위의onicecandidate
에 등록해두었던 핸들러가 동작한다.socket.io
를 통해 서로의candidate
를 전달한다. -
[user1/user2] 서로가 전달한
candidate
를 아래 코드를 통해 추가한다.-
RTCPeerConnection.addIceCandidate(new RTCIceCandidate({ sdpMLineIndex: candidate.label, candidate: candidate.candidate }));
-
-
[user1/user2] 위의
onaddstream
핸들러를 통해remoteStream
을 얻어온 후remoteStream
변수와remoteVideo.srcObject
에 등록해준다. -
연결 완료!
-
onaddstream
: setRemoteDescription () 호출 직후에 발생. 해당 함수가 deprecated되어onTrack
으로 대체해야함 -
addTrack()
: RTCPeerConnection의 메소드인 addTrack()은 다른 유저에게 전송될 트랙들의 묶음에 신규 미디어 트랙을 추가addStream
를 대체하기 위한 함수
© BoostCamp - Try Catch
권기웅 mosball | 나영균 younguna | 장기원 OriginJang | 조정현 JeonghyunJo