WebRTC Connection Flow Diagram
새로운 user에 대하여 Peer Connection 생성하여 Offer 보내는 과정
const { peerConnection } = createPeerConnection(sid); if (peerConnection) { const offer = await peerConnection.createOffer({ offerToReceiveAudio: true, offerToReceiveVideo: true, }); await peerConnection.setLocalDescription( new RTCSessionDescription(offer), ); roomSocket.emit('call-user', { to: sid, offer }); }
offer 받은 후 상대방에 대한 Peer Connection 생성한 후 Answer 보내는 과정
const { peerConnection } = createPeerConnection(sid); if (peerConnection) { await peerConnection.setRemoteDescription( new RTCSessionDescription(offer), ); const answer = await peerConnection.createAnswer(); await peerConnection.setLocalDescription(answer); roomSocket.emit('make-answer', { to: sid, answer }); }
화면공유를 껐다 켰을 시 videoTrack을 replace하는 경우
나의 peerConnection중에 연결된 sender들을 찾고, sender들의 videoTrack을 방금 공유한 videoTrack으로 replace하는 과정
Object.keys(pcs).forEach((pc) => { const sender = pcs[pc] .getSenders() .find((s) => s.track.kind === 'video'); sender.replaceTrack(videoStream.getVideoTracks()[0]); });
음성 공유시 mic toggle
나의 audioTrack을 !enable로 설정
const toggleMic = () => { myStream.localStream .getAudioTracks() .forEach((track) => (track.enabled = !track.enabled)); };
맥북 에어로 작업중인데 비율이 안맞아서, 맥북프로로 재 캡처 후 다시 작업할 예정입니다.
준비화면
Room 에 실제로 접근하기전, 나의 마이크 상태와 화면 공유 정보를 선택할 수 있는 화면
좌측 스크린 : 나의 공유되는 화면이 나오는 영역
하단 아이콘
화면공유 : 화면공유를 껐다 킬 수 있으며, 껏다 키는 과정에서 어떤 화면을 공유 할지 선택 할 수 있음
음성 : 껐다 킬 수 있음
우측 정보 : 방에 해당하는 정보들
입장하기 버튼 : 방에 입장 할 수 있음
Room 입장
Room 에 입장 후 화면
헤더
현재 테마를 움직이는 svg형태로 보여주며, 우측 아이콘에서 테마에 따라 흘러나오는 white noise의 볼륨을 조절 할 수 있는 volume Slider 존재. 스피커를 클릭하여 아예 on/off 할 수 있음
레코드 영역 - 내가 이 방에 와서 얼마나 코딩을 진행하고 있는지 확인 할 수 있음
화면공유 아이콘: 화면을 껐다 킬 수 있으며, 재선택시 어떠한 화면을 공유할 지 선택 할 수 있음
마이크 아이콘: 내 음성을 껐다 킬 수 있음
카메라 아이콘: 추후에 웹캠을 활용하여 나의 얼굴을 보여줄 수 있는 아이콘으로 발전 예정
나가기 버튼: Room을 나갈 수 있음
화면 공유 영역
내가 1번째로 보임
들어오는 순서대로 2, 3, 4가 채워짐
현재 WebRTC p2p mesh구조의 한계로 4명
추후에 SFU나 MCU 방식을 도입하여 더 많은 사람들을 관리 할 수 있게 할 예정
채팅
현재 방에 있는 유저들과 채팅을 진행 할 수 있음
테마
현재 4가지 테마가 존재함
모닥불
여행
우주
바다
캠핑
각 테마별로 white noise가 존재함
각 테마별로 배경이 달라지며, 해당하는 색상으로 전체적인 Layout 색상이 변경됨
각 테마별로 움직이는 svg 즉 테마도 설정됨
Attachments:






