사이드 프로젝트로 라이브 커머스 구현을 위해서 이것저것 해보는 중이다.

sarxos 라이브러리를 사용해서 실시간 캠 송출도 해보고

기존에 웹소켓을 이용한 채팅도 다시 구현을 해봤는데..

도저히 오디오를 효과적으로 어떻게 전달할지 모르겠더라

그리고 저 세개, 영상 + 오디오+ 채팅의 데이터를 각각의 웹소켓으로 전송했을 때의 부하가 어떻게 될런지 몰라서...

그래서 일반적으로 라이브 스트리밍시 사용되는 기술을 좀 찾아보았는데

국내에서는 HLS 방식과 webFlux를 이용한 방식이 가장 대중적인 것 같았다.

그러다가 broadcast(방송)를 위한 각 프로톨이 정리된 것을 찾게 되었고, 따로 남겨두고 싶어서 이렇게 정리한다.


protocol

일단 용어부터 잡고 가자

  • Streaming Latency (스트리밍 지연시간)
    • 네트워크에서는 하나의 데이터 패킷을 한 지점에서 다른 지점으로 보내는데 소요되는 시간이다.
    • 영상 송출에서는, 영상 추출에서 클라이언트에게 전해지는 시간을 의미한다.
    • delay와 비슷한 의미이다.
  • interactivity continuum (직역하면, 상호작용성 연속체)
    • 양방향인지 단방향인지 구분하는 것 같다.

위 사진을 보고 latency에 대한 개념이 잡혔는데, 간혹 라이브 스트리밍을 볼 때 영상과 채팅의 대화 갭차이가 생기는 것을 느꼈는데, 이 latency 때문에 생긴 현상인듯 싶다.

저 사진의 출처에서는 MOST-USED STREAMING PROTOCOLS이라고, 가장 자주쓰이는 프로토콜을 별개로 정리했다.

RTMP (Real-Time Messaging Protocol) : TCP

  • 가장 많이 사용된 스트리밍 프로토콜
  • 지속적이고, 안정적인 연결을 유지해주고 low-latency 통신이 가능하다. (3 - 30sec)
  • Flash Player를 통해 패킷을 전송하는데, 현재 Flash가 지원이 안되므로 사용이 안된다.
  • multicast를 지원하고 버퍼링이 낮은 장점이 있었지만 현재 지원이 안되고, 낮은 보안성 그리고 오래됐기 때문에 상대적으로 latency가 높다는 단점이 있다.

SRT (Secure Reliable Transport) : UDP

  • open source video streaming protocol이다.
  • RTMP의 대체제로 여겨진다.
  • sub-second latency를 지원하는데 이는 delay가 3,4초 미만인 latency를 의미한다.
  • RTMP의 장점 + bandwidth, packet loss를 방지해줌
  • 그러나 플랫폼 지원이 약하고, 검증이 되지 않았음 (사용하기에 시기상조)

HLS (Apple Http Live Streaming)

  • 애플에서 제안하는 라이브 스트리밍 프로토콜이고 국내에서는 대부분 HLS를 사용했던것 같다.
  • http 서버 통신이 되므로 범용성이 좋다.
  • 그러나 패킷을 받아 세그먼트로 변환하는 과정에서 latency가 발생해 지연시간이 길다.

webRTC(Web Real-Time Communication protocol) : UDP, TCP

  • 오픈소스이다.
  • 비대면으로 인해 화상 관련 서비스가 우후죽순으로 쏟아져 나오는데, 대부분의 레퍼런스들이 webRTC 방식을 사용하고 있다.
  • HLS와 다르게 세그먼트 조합 과정 없이 클라이언트에게 다이렉트로 영상을 송출하기 때문에 latency가 1초 미만으로, 거의 지연이 없다.
  • P2P 방식이며 javascript api로 제공한다.
  • 아직까진 크로스 브라우징 문제가 있다는 단점이 있는것 같다.

이렇게 까지 봤을때 나는 결국 webRTC를 사용해야하는 운명임에 틀림없다.

그러나 나는 서버 개발자로 지원하는데... javascript가 메인인 webRTC 기술에 집중하는게 맞는지 고민이 생기긴 한다. (사실 안한지 너무 오래되서 js가 가물가물하다.)

비록 js api긴 하지만, webRTC자체는 p2p 통신이라 결국 서버가 필요한데, 이쪽에 좀 더 집중해보면 되지 않을 까 싶다.

다음 포스팅 부터는 개발 진행 과정을 정리해보고자 한다.

+ Recent posts