[WebRTC] 7. 라이브 스트리밍 구현 (3) Sender / 카메라 및 오디오 전환하기

2022. 12. 16. 14:54·개발/Projects

스트림이 진행되는 동안 카메라나 오디오를 전환하려면 어떻게 해야 할까요? 이 때는 1) 상대방의 연결을 확인하고, 2) 사용하는 기기를 확인한다음, 3) sender를 통해 스티리밍 track을 변경해줄 수 있습니다.

Sender 찾기

먼저, getSenders()를 사용하면 webRTC 연결에서 sender 정보를 받아올 수 있습니다. 이 정보를 업데이트하면 기기 전환을 구현할 수 있습니다.

async function handleCameraName() {
  await getMedia(cameras.value, undefined);
  if (myPeerConnection) {
    console.log(myPeerConnection.getSenders());
  }
}

async function handleAudioName() {
  await getMedia(undefined, audios.value);
  if (myPeerConnection) {
    console.log(myPeerConnection.getSenders());
  }
}

이렇게 상대방 연결이 있는 경우 카메라 및 오디오 옵션을 확인해볼 수 있습니다.

스트림 업데이트 하기

카메라는 getVideoTracks(), 오디오는 getAudioTracks()를 사용하여 현재 스트리밍에 사용하고 있는 기기 정보를 받아올 수 있습니다.

 

다음으로 각 sender의 track 유형 (sender.track.kind)을 기반으로 영상과 음성을 구분하고, Sender의 트랙을 변경 replaceTrack해주면 완료입니다.

// app.js

async function handleAudioName() {
  await getMedia(audios.value, undefined);
  if (myPeerConnection) {
    const audioTrack = myStream.getAudioTracks()[0];
    const audioSender = myPeerConnection
      .getSenders()
      .find((sender) => sender.track.kind === "audio");
    audioSender.replaceTrack(audioTrack);
  }
}

async function handleCameraName() {
  await getMedia(undefined, cameras.value);
  if (myPeerConnection) {
    const videoTrack = myStream.getVideoTracks()[0];
    const videoSender = myPeerConnection
      .getSenders()
      .find((sender) => sender.track.kind === "video");
    videoSender.replaceTrack(videoTrack);
  }
}

'개발 > Projects' 카테고리의 다른 글

[바닐라 자바스크립트] ① 투두 리스트 앱  (0) 2023.01.08
[WebRTC] 6. 라이브 스트리밍 구현 (2) IceCandidate & Track  (0) 2022.12.15
[WebRTC] 5. 라이브 스트리밍 구현 (1) offer & answer  (0) 2022.12.15
'개발/Projects' 카테고리의 다른 글
  • [바닐라 자바스크립트] ① 투두 리스트 앱
  • [WebRTC] 6. 라이브 스트리밍 구현 (2) IceCandidate & Track
  • [WebRTC] 5. 라이브 스트리밍 구현 (1) offer & answer
  • [WebRTC] 4. 채팅방 기능 구현하기
휘Hwi
휘Hwi
여행, 사진, 개발, 책 이야기를 기록하는 여행자 휘의 블로그 𓂍
Klook.com
  • 휘Hwi
    휘: 끝나지 않은 이야기
    휘Hwi
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 기록
        • 일상 에세이
        • 인사이트
        • 투자와 재테크
        • 코인 이야기
        • 아카이빙
        • 집무실 레터
        • 사랑에 대하여
        • 번역 이야기(完)
        • 프리랜서 일지(完)
      • 여행
        • 🌎 세계 여행기 S1 (完)
        • 🌊 삼삼한 여행기 (完)
        • 🚶 온더로드
        • 🇯🇵 일본
        • 🏝️ 발리
        • 🇻🇳 베트남
        • 🇱🇰 스리랑카
        • 🇮🇳 인도
        • 🇹🇭 태국
        • 🇸🇬 싱가포르
        • 🇦🇺 호주
        • 🇭🇰 홍콩
        • 🇰🇷 한국
        • 🍚 여행자의 한 끼
        • ℹ️ 여행 정보
      • 사진
        • 사진가
        • 사진 이론과 생각
        • 사진 관련 정보
      • 영상
        • 파이널컷 모션 공부
        • 고프로 GoPro
        • 영상 관련 정보
      • 책
        • 책 읽고 쓰기
      • 개발
        • 티스토리
        • Internet
        • HTML
        • CSS
        • JavaScript
        • Typescript
        • React
        • Node.js
        • Express
        • NestJS
        • Python
        • Django
        • MySQL
        • MongoDB
        • AWS
        • Deployment
        • Terminal
        • Git
        • Glossaries
        • Articles
        • Projects
        • TIL;
      • 미분류
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
휘Hwi
[WebRTC] 7. 라이브 스트리밍 구현 (3) Sender / 카메라 및 오디오 전환하기
상단으로

티스토리툴바