>웹 프론트엔드 >JS 튜토리얼 >Janus WebRTC 서버 및 SFU: 실시간 화상 통화 앱

Janus WebRTC 서버 및 SFU: 실시간 화상 통화 앱

Susan Sarandon
Susan Sarandon원래의
2024-11-02 16:55:29419검색

이 기사에서는 Janus WebRTC 서버와 SFU를 사용하여 화상 통화 앱을 만들겠습니다

또한 Metered.ca SFU에 대해 알아보고 이것이 Janus Server보다 더 나은 옵션인 이유를 알아보겠습니다

야누스란 무엇인가요?

Janus는 오픈 소스 범용 WebRTC SFU 서버입니다. 복잡한 WebRTC 프로토콜을 처리하여 실시간 통신 앱을 용이하게 하고 미디어 교환 목적에 맞는 안정적인 서버를 제공하는 모듈형 게이트웨이입니다

야누스 SFU의 주요 기능

  • 모듈형 아키텍처: Janus는 각 플러그인이 특정 기능을 갖는 플러그인 기반 시스템을 갖추고 있습니다. 이러한 모듈성을 통해 사용자 정의 및 확장이 가능합니다

  • 프로토콜 처리: Janus는 webrtc 연결 설정에 필요한 신호 및 협상을 관리합니다.

  • 상호 운용성: Janus는 미디어 코덱을 지원하고 다양한 클라이언트 및 브라우저와 호환되므로 Janus는 광범위한 호환성을 갖습니다.

  • 확장성: 여러 연결을 효율적으로 처리하도록 설계된 Janus는 특정 지리적 영역 내에서 확장 가능합니다. (즉, Janus를 사용하는 모든 사용자가 작은 지리적 영역 내에 있으면 잘 작동합니다)

SFU(Selective Forwarding Unit) 이해

SFU 또는 선택적 전달 장치는 WebRTC 앱에서 다양한 미디어 참여자 간에 미디어 스트림을 효율적으로 라우팅하는 데 사용되는 미디어 서버 아키텍처입니다.

SFU는 각 참가자로부터 들어오는 비디오 스트림을 수신한 다음 요청에 따라 스트림을 다른 참가자에게 선택적으로 전달합니다.

즉, 모든 참가자가 자신의 스트림을 SFU에 푸시하는 동안 각 참가자는 참가자가 요청한 스트림을 받습니다.

미디어 스트림을 효율적으로 라우팅하기 위해 SFU를 사용할 때의 장점

  1. 확장성: SFU는 인코딩 및 디코딩과 같은 계산 집약적인 작업을 수행하지 않고 스트림을 사용자에게 전달하기 때문에 많은 수의 연결을 처리할 수 있습니다

  2. 낮은 대기 시간: SFU는 처리 없이 스트림을 전달하므로 대기 시간이 짧아집니다. 하지만 사용자가 전 세계에 있다면 metered.ca cloud sou

  3. 와 같은 글로벌 분산 SFU 서비스가 필요합니다.
  4. 대역폭 최적화

    1. 동시캐스트 지원: SFU는 동일한 참가자로부터 다양한 품질의 여러 스트림을 스트리밍할 수 있습니다. 클라이언트는 원활한 비디오/오디오 스트리밍을 위해 장치 및 네트워크 성능에 가장 적합한 다양한 품질의 스트리밍을 선택할 수 있습니다
    2. 선택적 구독: 클라이언트는 필요한 스트림만 구독할 수 있어 불필요한 대역폭 사용량을 줄일 수 있습니다.
  5. 유연성 및 제어: 참가자는 수신하려는 항목에 대해 더 큰 유연성을 갖습니다. 예를 들어 오디오만 수신하거나 특정 참가자의 비디오 스트림을 수신하려는 경우 다음을 선택할 수 있습니다. 그렇게 하세요

  6. 비용 효율성: SFU는 MCU에 비해 ​​처리가 덜 필요하므로 클라우드에서 더 작은 인스턴스를 사용하는 것이 좋습니다

  7. 미디어 품질 보존: SFU는 미디어 스트림에 대해 어떠한 처리도 수행하지 않고 요청된 참가자에게 스트림을 전달하기 때문에 미디어 품질을 보존합니다.

  8. 더욱 쉬워진 고급 기능 구현

    1. 동적 레이아웃 클라이언트는 수신되는 비디오 스트림을 사용하여 자신만의 레이아웃을 맞춤 설정할 수 있습니다. 비디오 SDK 및 API를 통해 얻을 수 있는 미리 결정된 레이아웃 대신
    2. 현재 발언자 감지: SFU는 현재 발언자의 스트림만 전달할 수 있으므로 집중력을 높이고 불필요한 데이터 전송을 줄일 수 있습니다.
    3. 녹화 및 스트리밍: SFU는 장치와 사용자 간의 통신에 영향을 주지 않고 미디어 스트림을 녹화 서비스 또는 방송 플랫폼으로 전달할 수 있습니다
  9. 신뢰성 향상: 서버에서 미디어를 처리하지 않으므로 실패 지점이 줄어듭니다. SFU는 중복성을 위해 클러스터링할 수도 있으므로 한 서버에 문제가 발생하더라도 서비스가 계속 활성 상태로 유지되도록 할 수 있습니다.


Janus WebRTC server and SFU: a real time video calling app

애플리케이션에 Janus 구현

앱에 Janus SFU를 통합하려면 다음 단계가 필요합니다. 애플리케이션에 Janus를 구현하는 단계별 프로세스는 다음과 같습니다.

1단계: Janus 서버 설정

  1. 시스템 준비

    1. 서버 준비: Ubuntu 또는 Debian 서버가 실행 중인지 확인하세요.
    2. 설치 종속성: Janus에는 다음과 같은 라이브러리가 필요합니다.
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)

우분투나 데비안 같은 곳에 이러한 종속성을 쉽게 설치할 수 있습니다

apt install libmicrohttpd-dev libjansson-dev \
    libssl-dev libsofia-sip-ua-dev libglib2.0-dev \
    libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
    libconfig-dev pkg-config libtool automake

Janus 다운로드 및 빌드

  • 저장소 복제
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)
  • 디렉토리로 이동
apt install libmicrohttpd-dev libjansson-dev \
    libssl-dev libsofia-sip-ua-dev libglib2.0-dev \
    libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
    libconfig-dev pkg-config libtool automake
  • 구성 스크립트 생성
git clone https://github.com/meetecho/janus-gateway.git
  • 빌드 구성
cd janus-gateway
  • 컴파일 및 설치
sh autogen.sh
  1. 야누스 구성

    1. 구성 파일 편집

      1. 파일은 /opt/janus/etc/janus/에 있습니다.
      2. 중요한 파일에는 janus.cfg, janus.transport.websockets.cfg 및 janus.plugin.videoroom.cfg가 포함됩니다.
    2. 필요한 플러그인 활성화

      1. SFU를 사용하려면 비디오룸 플러그인이 활성화되어 있는지 확인하세요
      2. 애플리케이션에서 신호 전달에 사용하려는 경우 WebSocket 전송을 구성할 수도 있습니다
  2. SSL 인증서 설정

    1. SSL 인증서 생성

      1. 보안 연결을 사용하려는 경우 암호화 허용을 사용하여 자체 서명된 인증서를 생성할 수 있습니다. 보안 연결을 사용하려는 경우 이는 선택적인 단계입니다
    2. 구성 업데이트

      1. 구성 파일이 SSL 인증서를 가리키도록 합니다
  3. Janus 서버 시작

    1. 야누스를 실행하세요
./configure --prefix=/opt/janus
  1. 작동 확인

    1. 로그를 확인하여 모든 것이 오류 없이 실행되고 있는지 확인하세요.

클라이언트측 애플리케이션 개발 2단계

  1. 개발 환경 설정

    1. 프런트 엔드 프레임워크 선택

      1. React, Angular 또는 기타 프런트엔드 프레임워크 중에서 선택할 수 있습니다
    2. WebRTC 라이브러리 포함

      1. 다른 브라우저와의 호환성을 위해 Adapter.js와 같은 WebRTC 도우미 라이브러리를 사용할 수도 있습니다
  2. 시그널링 서버 구축

    1. 웹소켓을 통해 Janus에 연결
    2. 새 세션을 생성하기 위해 핸드셰이크를 구현한 후 비디오룸 플러그인을 연결합니다
  3. 영상방 만들기 또는 참여하기

    1. Janus 서버에 요청을 보내 새 방을 만들거나 서버의 기존 방에 참여하세요
  4. 로컬 미디어 스트림 처리

    1. 원하는 경우 사용자에게 로컬 미디어 스트림을 표시합니다. 아래 후반부 섹션에서는 원격 스트림도 표시합니다.
make
sudo make install
sudo make configs

HTML의 비디오 요소에 로컬 스트림을 연결하여 사용자에게 스트림을 재생합니다

5. Janus에 게시

  • RTCPeerConnection을 사용하여 SDP 제안 생성

  • API를 사용하여 Janus에 제안 보내기

  • 야누스로부터 SDP 답변을 받아 원격설명으로 설정

6. 원격 스트림 구독

  • 참여 메시지와 이벤트 메시지를 처리하여 다른 회의 참가자의 알림을 들을 수 있습니다

  • 가입자를 위한 피어 연결을 만듭니다. 즉, 각 원격 참가자에 대해 새 RTCPeerConnection을 만들어야 합니다.

  • 원격 스트림 처리, 원격 스트림 가져오기 및 HTML 비디오 요소에 첨부하여 사용자 웹 브라우저에서 비디오 재생

  1. 이벤트 리스너 및 핸들러 구현

    1. oniceconnectionstatechange 및 onicecandidate와 같은 이벤트를 모니터링하고 이러한 이벤트가 발생할 때 처리하고 필요한 경우 재연결 논리를 구현합니다

탐색 Metered.ca Janus의 대안으로 SFU

미터드 글로벌 클라우드 SFU란

  1. Metered Global Cloud SFU는 Metered.ca의 클라우드 기반 선택적 전달 장치입니다

  2. Metered SFU를 사용하면 개발자는 비디오, 오디오, 데이터 전송을 포함한 모든 유형의 애플리케이션을 구축할 수 있습니다

  3. Metered SFU는 독점 SDK 없이 기본 WebRTC API 및 HTTP를 사용하여 실행됩니다.

  4. 사용자는 지리적 위치에 따라 가장 가까운 SFU로 자동 라우팅됩니다.

  5. 여러 SFU가 고속 상호 연결을 사용하여 전 세계적으로 서로 연결되므로 지연 시간이 최소화됩니다.

Metered Global SFU의 주요 기능

  • 글로벌 배포:

    • 사용자는 지리적 위치를 기반으로 폐쇄형 SFU에 연결되므로 대기 시간이 가장 낮고 성능이 높습니다
  • 플랫폼 독립성

    • 독점 SDK가 필요하지 않으므로 WebRTC 자체 API를 사용하여 다양한 플랫폼에서 개발할 수 있습니다
  • 유연한 게시-구독 모델:

    • 무제한 참가자 및 다양한 세션 구조를 수용할 수 있습니다.
  • 확장성

    • 수천명의 사용자와 소규모 회의는 물론 대규모 라이브 스트리밍 세션도 가능합니다
  • 비용 효율성:

    • 요금은 데이터 전송 속도를 기준으로 책정되어 사용량이 많은 시나리오에서 상당한 비용 절감 효과를 제공합니다
    • 또한 종량제 결제도 가능합니다.

계량형 SFU 작동 방식

연결 흐름

  1. 연결 설정

    1. 피어 연결 만들기
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)

ㄴ. 로컬 SDP 제안 보내기

  • SDP 제안을 생성한 다음 HTTP API 요청을 사용하여 Metered.ca SFU로 보냅니다.

ㄷ. SFU 원격 SDP 수신

  • 수신된 SDP를 PeerConnection의 원격 설명으로 설정하세요.

디. 연결이 완료되었습니다

  • 미디어 트랙 추가
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)
  1. 트랙 게시

    1. 미디어 트랙 추가
apt install libmicrohttpd-dev libjansson-dev \
    libssl-dev libsofia-sip-ua-dev libglib2.0-dev \
    libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
    libconfig-dev pkg-config libtool automake

ㄴ. SDP 제안 생성 및 전송

  • 업데이트된 SDP 제안을 SFU에 보냅니다

  • SFU 응답을 받아 SDP에 설정

  1. 트랙 구독

      1. SFU에 트랙 구독을 요청하세요

        1. 원하는 스트림의 trackid와 remoteTrackSessionId를 사용하여 SFU에 요청을 보냅니다.
      1. peerConnection에서 수신된 SDP를 설정하세요.
      2. 수신 미디어와 온트랙 이벤트를 처리하여 수신 스트림을 사용자에게 보여줍니다

Janus에 비해 Metered SFU의 장점

  1. 확장성

    1. 미디어 유통

      1. 클라이언트는 모든 미디어 스트림을 SFU에 한 번 전송하며 참가자 수는 중요하지 않습니다
      2. SFU는 특정 스트림을 요청하는 모든 구독자에게 스트림 배포를 관리합니다
    2. 대규모 스트리밍

      1. 종량제 SFU는 소규모 회의는 물론 수천 명의 사용자에게 대규모 라이브 스트리밍을 지원합니다
  2. 플랫폼 독립성

    1. 전용 SDK가 필요하지 않습니다
    2. 복잡성 감소
  3. 유연한 게시 구독 모델

    1. 룸 제약 없음: 측정된 SFU는 사전 정의된 룸이 아닌 세션에서 작동합니다.
    2. 세션은 참가자 수에 제한 없이 스트림을 게시하고 구독할 수 있습니다.
    3. 동적 및 확장 가능한 디자인: 라이브 스트리밍과 같은 확장 가능한 디자인에 가장 적합합니다.
  4. 비용 효율성

    1. 측정형 SFU는 분당 청구가 아닌 GB당 전송된 데이터를 기준으로 요금을 청구하므로 비용 효율적입니다
    2. 아웃바운드 데이터만 요금이 부과되고 SFU로의 인바운드 데이터는 무료입니다. 이는 스트림이 SFU에 지속적으로 업로드되지만 자주 조회되지 않는 감시와 같은 애플리케이션에서 특히 비용 효과적입니다.
  5. 글로벌 SFU 네트워크:

    1. Metered SFU는 5개 대륙 모두에서 SFU를 통해 전 세계적으로 서비스를 제공하고 있습니다.
    2. 미디어 스트림은 고속 상호 연결 SFU 링크를 통해 라우팅됩니다
    3. 이를 통해 전 세계 다양한 지역의 사용자가 저지연 통신을 경험할 수 있습니다

측정 SFU와 Janus 비교

  1. 배포 및 유지 관리

    1. 측정된 SFU:

      1. 클라우드 기반 관리형 서비스 인프라
      2. 개발자가 애플리케이션 기능에 집중할 수 있도록 운영 및 유지 관리 책임을 덜어줍니다
    2. 야누스

      1. 자체 호스팅, 서버 설정 및 지속적인 유지 관리가 필요하며 클라우드 서버 비용을 지불해야 하므로 완전히 무료는 아닙니다
      2. 업데이트, 확장 및 보안 패치 관리가 필요합니다
  2. 확장성 및 성능

    1. 계량형 SFU

      1. 자동으로 규모를 조정하고 원하는 수의 참가자를 처리할 수 있습니다
      2. 모든 지리적 위치에 있는 SFU를 통해 전 세계 모든 지역의 참가자가 짧은 지연 시간과 높은 성능을 경험합니다
    2. 야누스

      1. 전역적으로 확장할 수 없으며 할당한 서버 리소스에 따라 달라집니다
      2. 고부하 사용 사례를 위한 클러스터링과 같은 복잡한 설정 필요
  3. 비용 구조

    1. 계량형 SFU

      1. 데이터 전송에 대해 GB 단위로 청구되며, 이는 더 저렴하고 종량제입니다
      2. 많은 데이터 사용량이 필요한 애플리케이션에 대해 더 예측 가능하고 비용이 저렴합니다
    2. 야누스

      1. 오픈소스인 동안 서버 호스팅 및 유지 관리를 포함하여 Janus 사용과 관련된 운영 비용이 있습니다
      2. 확장 및 사용량이 많아지면 비용이 크게 증가할 수 있습니다
  4. 유연성 및 기능

    1. 계량형 SFU

      1. 유연하고 확장 가능한 게시 및 구독 모델
      2. 표준 WebRTC API로 개발을 단순화하고 무제한 참여를 지원합니다
    2. 야누스

      1. 영상실 스트리밍 등의 기능을 갖춘 플러그인 기반 아키텍처 제공
      2. 특정 사용 사례에 대한 구성 및 잠재적인 사용자 정의 필요
  5. 통합 용이성

    1. 계량형 SFU

      1. 표준 WebRTC API로 개발 프로세스 단순화
      2. 인프라 설정, 서버 요구 사항 등을 고려하여 출시 시간을 단축합니다

Janus WebRTC server and SFU: a real time video calling app

측정된 TURN 서버

  1. API: 강력한 API로 서버 관리를 시작하세요. API를 통해 자격 증명 추가/제거, API를 통해 사용자별/자격 증명 및 사용자 지표 검색, API를 통해 자격 증명 활성화/비활성화, API를 통해 날짜별 사용량 데이터 검색 등의 작업을 수행할 수 있습니다.

  2. 글로벌 지리적 위치 타겟팅: 자동으로 트래픽을 가장 가까운 서버로 전달하여 지연 시간을 최소화하고 성능을 최고화합니다. 전 세계 어디에서나 50ms 미만의 지연 시간

  3. 전 세계 모든 지역의 서버: 토론토, 마이애미, 샌프란시스코, 암스테르담, 런던, 프랑크푸르트, 방갈로르, 싱가포르, 시드니, 서울, 달라스, 뉴욕

  4. 낮은 지연 시간: 전 세계 어디에서나 50ms 미만의 지연 시간.

  5. 비용 효율적: 대역폭 및 볼륨 할인이 가능한 종량제 가격.

  6. 손쉬운 관리: 사용 로그, 계정이 임계값 한도에 도달할 때 이메일, 청구 기록, 이메일 및 전화 지원을 받으세요.

  7. 다중 테넌시:

     여러 개의 자격 증명을 생성하고 고객 또는 다른 앱별로 사용량을 구분합니다. 사용 로그, 청구 기록 및 임계값 알림을 받으세요.
  8. 엔터프라이즈 안정성:

     SLA를 통한 99.999% 가동 시간.
  9. 엔터프라이즈 규모:

     동시 트래픽 또는 총 트래픽에 제한이 없습니다. 계량형 TURN 서버는 엔터프라이즈 확장성을 제공합니다
  10. 5GB/월 무료:

     무료 플랜으로 매월 5GB 무료 TURN 서버 사용량을 받으세요
  11. 포트 80 및 443에서 실행

  12. TURNS SSL을 지원하여 심층 패킷 검사 방화벽을 통한 연결을 허용합니다.

  13. TCP와 UDP 모두 지원

  14. 무료 무제한 STUN

위 내용은 Janus WebRTC 서버 및 SFU: 실시간 화상 통화 앱의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.