Back to Blog

Twilio Video에서 아고라의 React JS SDK로 마이그레이션

Migrating from Twilio Video to Agora’s React JS SDK

이 가이드는 React JS를 사용하여 기존 Twilio Video를 구현한 개발자가 Agora Video React JS SDK로 마이그레이션하는 데 도움을 주기 위한 것입니다. 새 프로젝트를 시작하는 경우 아고라 Video React JS SDK 설명서를 참조하세요.

React JS를 사용한 아고라의 빠른 시작 데모는 Github(빠른 시작 데모)에서 확인할 수 있습니다. 추가 데모는 여기에서 확인할 수 있습니다: 더 많은 데모.

전체 React JS SDK 문서를 보려면 api-ref.agora.io를 확인하세요.

1단계: 아고라 비디오 SDK 키 얻기

아고라 서비스에 액세스하여 프로젝트에 통합하려면 다음 단계에 따라 아고라 콘솔에서 필요한 정보를 얻으세요:

  1. App ID
    — 아고라 콘솔에 로그인하고 프로젝트로 이동합니다.
    — 앱에 고유하게 무작위로 생성된 문자열인 '앱 ID'를 찾습니다. 이 ID는 아고라 내에서 애플리케이션을 식별하는 데 매우 중요합니다.
  2. 임시 토큰
    — 앱의 클라이언트가 채널에 참여할 때 인증을 위해 토큰이 필요합니다.
    — 아고라 콘솔에서 24시간의 유효기간을 가진 임시 토큰을 생성합니다. 이 토큰은 채널에 참여하는 사용자를 인증하는 데 사용됩니다.
  3. 채널명:
    — 고유한 문자열을 '채널 이름'으로 정의하여 채널을 식별하고 라벨을 지정합니다.

2단계: 아고라 비디오 SDK 설치

npm, pnpm 또는 yarn 사용

# with npm
npm i agora-rtc-react
# or with pnpm
pnpm add agora-rtc-react
# or with yarn
yarn add agora-rtc-react

프로젝트에서 Twilio SDK를 제거합니다:

npm uninstall twilio-video`

3단계: 클라이언트 및 RTC 공급자 만들기

아고라 React SDK는 후크와 컴포넌트를 사용하여 아고라의 비디오 기능을 React 웹 앱에 통합하는 작업을 간소화합니다. 후크와 컴포넌트가 동일한 클라이언트를 사용하도록 하기 위해, useRTCClient로 클라이언트를 생성하고 AgoraRTCProvider에 전달합니다.

import AgoraRTC { useRTCClient } from "agora-rtc-react"

// Initialize Agora Client
const client = = useRTCClient( 
  AgoraRTC.createClient({ 
    codec: “vp8”, 
    mode: “rtc” 
  })
);

return () => {
   <AgoraRTCProvider client={client}>
      {/* Video Call Components that use the common client context */}
   </AgoraRTCProvider>
}

useRTCClient 훅은 AgoraRTCProvider 컨텍스트에서 클라이언트 객체를 검색하는 데 사용할 수 있습니다.

const client = = useRTCClient()

4단계: 세션 시작 및 참여

Twilio

import { useJoin } from "agora-rtc-react"

// Join the channel
useJoin(
   {
   appid: 'AppID',
   channel: 'ChannelName'!,
   token: 'TOKEN',
   uid: 0
   },
);

Agora

useJoin 훅을 사용하면 컴포넌트가 준비되면 사용자가 채널에 자동으로 가입하고 컴포넌트가 마운트 해제되면 채널에서 자동으로 탈퇴할 수 있습니다.

import { useJoin } from "agora-rtc-react"

// Join the channel
useJoin(
   {
   appid: 'AppID',
   channel: 'ChannelName'!,
   token: 'TOKEN',
   uid: 0
   },
);

5단계: 로컬 오디오/비디오 트랙 만들기 및 게시하기

Twilio

<div class="video-container-div" width="1920" height="1080"></div>
<span class="hljs-comment">// video
let localVideoTrack = await twilioVideo.createLocalVideoTrack({
   height: { ideal: 720, min: 480, max: 1080 },
   width:  { ideal: 1280, min: 640, max: 1920 },
   aspectRatio: 16/9,
})

twilioRoom.localParticipant.publishTrack(localVideoTrack)
const localMediaContainer = document.getElementById('video-container-div')
localMediaContainer!.appendChild(localVideoTrack.attach())
 
// audio
let localAudioTrack = await twilioVideo.createLocalAudioTrack()

twilioRoom.localParticipant.publishTrack(localAudioTrack);
const audioElement = localAudioTrack.attach();
document.body.appendChild(audioElement);

Agora

  • useLocalMicrophoneTrack:이 후크를 사용하면 로컬 카메라 비디오 트랙을 만들 수 있습니다.
  • useLocalCameraTrack:로컬 카메라로 캡처한 비디오를 사용하여 로컬 비디오 트랙을 만듭니다.
  • usePublish: 이 훅은 컴포넌트가 준비되면 로컬 트랙을 자동으로 게시하고 컴포넌트가 마운트 해제되면 게시를 취소합니다.
  • LocalVideoTrack: 이 컴포넌트는 로컬 사용자의 카메라 비디오 트랙과 마이크 오디오 트랙을 재생합니다.
  • LocalUser 이 컴포넌트는 로컬 비디오 트랙을 재생합니다.
import { 
   useLocalMicrophoneTrack, 
   useLocalCameraTrack, 
   usePublish, 
   LocalVideoTrack, 
   LocalUser 
   } from "agora-rtc-react"

// get local microphone and camera
const { localMicrophoneTrack } = useLocalMicrophoneTrack();
const { localCameraTrack } = useLocalCameraTrack();

// Publish local microphone and camera
usePublish([localMicrophoneTrack, localCameraTrack]);

// Play local video using components
return () => {
   // Option 1: <LocalVideoTrack />
   <LocalVideoTrack track={localCameraTrack} play />

   // Option 2: <LocalUser />
   <LocalUser
      audioTrack={localMicrophoneTrack}
      videoTrack={localCameraTrack}
      cameraOn={true}
      micOn={true}
      playAudio={false}
      playVideo={true} 
   />
}

6단계: 트랙 게시 취소 및 삭제Twilio

Twilio Video/Audio is track-based, requiring looping through each video/audio track to unpublish the video/audio

   twilioRoom.localParticipant.videoTracks.forEach((publication) => {
       publication.unpublish();
       publication.track.stop();
       var selfTwilioVideo = document.getElementById('video-container-div')
       selfTwilioVideo?.querySelector('video')?.remove()
   })
   
   twilioRoom.localParticipant.audioTracks.forEach((publication) => {
       publica

Agora

Twilio의 비디오/오디오와 마찬가지로 아고라의 비디오/오디오도 트랙 기반입니다. 트랙이 사용Publish로 게시된 후에는 두 가지 방법으로 트랙을 게시 취소할 수 있습니다. 사용Publish를 사용하는 컴포넌트가 마운트 해제될 때 자동으로 또는 컴포넌트를 마운트 해제할 필요 없이 수동으로 트랙의 게시를 취소할 수 있습니다.

   await client.unpublish();                                       // Unpublish all tracks at once
   await client.unpublish(localCameraTrack);                       // Unpublish 1 track 
   await client.unpublish([localAudioTrack, localCameraTrack]);    // Unpublish specific set of tracks 
   // Track destruction:
   localAudioTrack.close();
   localVideoTrack.close();

unpublish에 대한 참고 사항:

이 메서드는 여러 번 호출할 수 있습니다. publish` 및 `unpublish`를 사용하여 특정 로컬 트랙의 게시 및 게시 취소를 관리할 수 있습니다.

이 메서드는 비동기식이며 '약속' 또는 '비동기/대기'와 함께 사용해야 합니다.

8단계: 원격 사용자 비디오 렌더링

Twilio

Twilio에서는 participantConnected and trackSubscribed 이벤트 리스너를 사용했을 수 있습니다.

<div class="remote-video-container" width="1920" height="1080"></div>
   twilioRoom.on('participantConnected', (participant) => {
       participant.on('trackSubscribed', (track) => {
           // a user turned on their video, render it
           document.getElementById('remote-video-container-div').appendChild(track.attach());
       });
   
       participant.on('trackUnsubscribed', (track) => {
           // a user turned off their video, stop rendering it
           var selfTwilioVideo = document.getElementById('remote-video-container')
           selfTwilioVideo.querySelector('video').remove()
       })

Agora

원격 사용자가 오디오/비디오 트랙을 성공적으로 게시하면 SDK는 해당 원격 사용자를 원격 사용자 목록에 추가합니다. useRemoteUsers 훅으로 원격 사용자 목록을 검색하고 RemoteUser 컴포넌트를 사용하여 원격 사용자의 오디오 및 비디오 트랙을 구독하고 재생합니다.

   twilioRoom.on('participantConnected', (participant) => {
       participant.on('trackSubscribed', (track) => {
           // a user turned on their video, render it
           document.getElementById('remote-video-container-div').appendChild(track.attach());
       });
   
       participant.on('trackUnsubscribed', (track) => {
           // a user turned off their video, stop rendering it
           var selfTwilioVideo = document.getElementById('remote-video-container')
           selfTwilioVideo.querySelector('video').remove()
       })

또는 useRemoteAudioTracks를 사용하여 원격 사용자의 오디오 및 비디오 트랙을 각각 자동으로 구독하고 검색할 수 있습니다. 컴포넌트가 마운트 해제되면 후크는 지정된 사용자의 비디오 트랙에 대한 구독을 중지합니다.

//remote users
   const remoteUsers = useRemoteUsers();
   const { audiotracks } = useRemoteAudioTracks(remoteUsers)
   const { videotracks } = useRemoteVideoTracks(remoteUsers)

   return (
      <></>
  )

useRemoteUserTrack을 사용하여 특정 사용자의 원격 트랙을 선택적으로 검색할 수 있습니다.

//remote users
   const remoteUsers = useRemoteUsers();
   const audiotrack = useRemoteUserTrack(remoteUsers[0], 'audio')
   const videotracks = useRemoteUserTrack(remoteUsers[0], 'video')

   return (
      <></>
  ) 

9단계: 세션 나가기 및 종료

Twilio

twilioRoom.disconnect()

Agora

아고라 React SDK를 사용하면 채널을 매우 간단하게 탈퇴할 수 있습니다. useJoin을 호출하는 컴포넌트가 마운트를 해제하면 아고라 클라이언트는 자동으로 채널에서 탈퇴합니다.

client.leave()를 사용하여 채널을 수동으로 탈퇴하면 SDK는 구독된 원격 사용자 개체, 원격 트랙 개체, 연결 상태를 기록하는 개체 등 현재 채널과 관련된 개체를 즉시 삭제합니다. 채널에 다시 참여하려면 leave를 호출한 후 join를 호출하세요.

await client.leave();

추가 아고라 비디오 SDK 기능

아고라 비디오 리액트 SDK는 화상 회의 애플리케이션을 향상시킬 수 있는 다양한 기능을 제공합니다. 다음은 고려해야 할 몇 가지 주요 기능 및 정보입니다:

  1. 플랫폼 지원: 아고라 동영상 SDK는 Android, iOS, 웹, Linux, macOS, Windows 등 다양한 플랫폼을 지원합니다. 또한 Flutter 및 React Native와 같은 인기 프레임워크용 래퍼도 제공합니다.
  2. 클라우드 녹화: 아고라는 비디오 SDK에 클라우드 녹화 기능을 제공하여 나중에 재생하거나 보관할 목적으로 세션을 캡처하고 저장할 수 있습니다. 이 기능을 구현하는 방법에 대한 자세한 내용은 아고라 동영상 SDK 설명서를 참조하세요.
  3. 화면 공유: 아고라의 화면 공유 기능을 사용하여 애플리케이션에서 화면 공유를 구현하세요. 이 기능은 공동 작업 및 프레젠테이션에 유용합니다.
  4. 플러그인 아키텍처: 아고라의 플러그인 지원은 동영상 애플리케이션의 확장성을 향상시킵니다. 아고라의 플러그인 아키텍처를 활용하여 추가 기능을 원활하게 통합하거나 기능을 사용자 지정할 수 있습니다.
  5. 트리 쉐이킹: 아고라의 React용 동영상 SDK는 트리 쉐이킹을 지원하므로 빌드 과정에서 사용하지 않는 코드를 제거하여 애플리케이션의 번들 크기를 최적화할 수 있습니다. 이를 통해 애플리케이션의 경량화와 효율적인 성능을 보장합니다.
  6. 안전한 커뮤니케이션: 아고라의 엔드투엔드 암호화는 세션 내 사용자 간의 커뮤니케이션이 매우 안전하게 이루어지도록 보장합니다. 이 기능은 개인정보 보호를 강화하고 화상 회의 중에 교환되는 민감한 정보를 보호합니다.

아고라 비디오 리액트 SDK 기능 및 구현 방법에 대한 자세한 내용은 아고라 비디오 리액트 SDK 설명서를 참조하세요.

강력하고 풍부한 기능을 갖춘 화상 회의 환경을 구축할 수 있는 아고라 비디오 리액트 SDK의 모든 잠재력을 살펴보세요. 특정 기능에 대한 요구 사항이 있는 경우 구현에 대한 지침은 설명서를 참조하세요.

RTE Telehealth 2023
Join us for RTE Telehealth - a virtual webinar where we’ll explore how AI and AR/VR technologies are shaping the future of healthcare delivery.

Learn more about Agora's video and voice solutions

Ready to chat through your real-time video and voice needs? We're here to help! Current Twilio customers get up to 2 months FREE.

Complete the form, and one of our experts will be in touch.

Try Agora for Free

Sign up and start building! You don’t pay until you scale.
Try for Free