Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@pplink/media-infra-client

Package Overview
Dependencies
Maintainers
14
Versions
101
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@pplink/media-infra-client

- https://github.com/pplink/mediasoup-client - It is a core package for communicating with [media-infra](https://github.com/pplink/media-infra) server using mediasoup. - It is forked from [versatica/mediasoup-client](https://github.com/versatica/mediasoup

  • 0.1.27
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
8
increased by300%
Maintainers
14
Weekly downloads
 
Created
Source

@pplink/mediasoup-client

  • https://github.com/pplink/mediasoup-client
  • It is a core package for communicating with media-infra server using mediasoup.
  • It is forked from versatica/mediasoup-client

Structure

MediaInfraClient

  • media-infra-client 외부에서 직접적으로 사용하도록 유도된 대표 클래스

MediaDevice

  • mediasoup-clientDevice 를 래핑
    • Device: 하나의 MR에 대한 RTP 연결을 담당
    • 현재는 한개의 MR과만 연결되고 한개의 Device만 생성함.

MediaSignalingService

  • MA와의 소켓 메시징 담당

ProduceManager

  • 송출중인 트랙을 관리
  • 네트워크가 끊기더라도 기억했다가 다시 송출
  • Pause, Resume, Close 등 한번 송출한 트랙에 대한 작업들을 하도록 노출되는 클래스

ConsumeManager

  • 수신중인 트랙을 관리
  • 네트워크가 끊기는 경우 파괴된 후 새롭게 만들어진다 (기존 인스턴스 사용 불가)
  • Pause, Resume을 통해 일시정지, 다시 수신가능

연결흐름

MIC 사용 시작하기

  1. 유저가 고객사 서비스(페이지콜)에 접속

  2. 고객사 서버에서 MA에 접속 요청 → MA는 인증 후 토큰 발급. 발급된 토큰 정보는 Session 테이블에 3일동안 저장, 이후 만료됨

  3. 고객사 클라이언트에서 이 토큰을 넣어 MIC 사용

    // 2. PCA Server
    const { url, token } = await fetch("https://media.pplink.io/v1/api/connect");
    return {
      statusCode: 200,
      body: { url, token }
    };
    
    // 3. PCA Client
    const { url, token } = await fetch("https://pagecall.io/connect");
    const mic = new MediaInfraClient(url, token);
    

MIC 생성 직후 준비작업

소켓 연결

  • 미디어는 UDP(RTP)로 교환되지만, 어디로 어떻게 보내야 하는지, 다른 어떤 미디어를 받아야 하는지에 대한 정보는 직접 구현한 시그널링으로 교환 해주어야 한다. (여기서는 WebSocket 이용)
    • RTP Capabilities 교환하고 결정된 내용을 바탕으로 transport 생성
    • MR이 클라이언트끼리 서로 produce, consume할 수 있는지 조율 → 거의 발생하지 않으나 browser에서 지원하는 코덱의 종류에 따라 실패할 수 있음
  • MA가 MR과 클라이언트 사이의 필요한 정보 교환을 중개해준다.
  • MIC가 생성되자마자 넣어준 URL, Token으로 소켓연결 요청을 보냄
  • MA는 토큰을 확인해 허가된 유저일 경우 연결을 맺고, 그렇지 않으면 끊어버림

RTP Capabilities 교환

  • RTP capabilities
    • 코덱, RTP Header Extension
      • 서버 또는 클라이언트가 받을 수 있는 코덱, extension이 무엇인지 명세된 정보이다.
  • RTP parameters
    • 코덱, RTP Header Extension, 인코딩, RTCP
      • 보내는 미디어의 코덱과 extension등이 어떻게 설정되어 있는지에 대한 정보이다.
    • RTP send parameters: Producer가 서버에 보내는 내용
    • RTP receive parameters: Consumer가 서버에게 받는 내용
  • 보내는 사람은 받는 사람의 RTP capabilities를 알아야 뭘 보내줄 지 정할 수 있음
    • MIC는 MR의 RTP cap을 알아야 어떻게 전송해야 하는지 결정할 수 있음
    • MR은 MIC의 RTP cap을 알아야 어떻게 전송해야 하는지 결정할 수 있음
  • RTP capabilties의 교환이 필요하다 → 연결이 되자마자 MR은 자신의 RTP capabilities를 알려주면서 MIC에게도 알려달라고 요청함

Produce and Consume

Produce

  • 미디어를 보내는 행위를 Produce라고 함
  • MIC.produceTrack 을 호출해 트랙 송출을 시작

Consume

  • 미디어를 받는 행위를 Consume이라고 함
  • 받을 준비가 되었다는 메시지를 보내야 Consume이 시작된다. MIC.listenTrack
  • MIC.listenTrack 함수에 콜백함수를 넣어 이후 생성되는 ConsumeManager를 subscribe 할 수 있음.

Record

  • produceTrack을 통해 생성된 ProduceManager에서 startRecord, stopRecord를 통해 녹화 시작, 중단 가능.

FAQs

Package last updated on 20 Apr 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc