본문으로 건너뛰기

간단한 비디오 스트리밍 서비스 아키텍처 살펴보기

  • 비디오 스트리밍 서비스는 비디오 데이터를 실시간으로 전송하는 서비스를 말합니다. 이러한 서비스는 비디오 데이터를 실시간으로 전송하므로, 데이터를 실시간으로 압축하고 전송하는 기술이 필요합니다. 이러한 기술은 비디오 캡처, 압축, 인코딩, 디코딩, 재생 등의 기술을 포함합니다.
  • Netflix, Disney+, YouTube, Twitch 등의 서비스는 비디오 스트리밍 서비스를 제공하는 서비스입니다. 이러한 서비스는 전세계적으로 많은 사용자들이 사용하고 있으며, 많은 양의 데이터를 처리하고 있습니다. 네트워크의 발달로 인하여 스트리밍 서비스가 더욱 발전하고 있으며, 4K, 8K 등의 고화질 비디오를 제공하는 서비스도 등장하고 있습니다.
  • 이러한 서비스들의 구조가 궁금하여 간단한 비디오 스트리밍 서비스 아키텍처를 살펴보겠습니다. 서비스에 따라 다양한 구조를 가지고 있지만, 이번에는 간단한 비디오 스트리밍 서비스 아키텍처를 살펴보겠습니다.
    • 실제 서비스는 훨씬 더 복잡하고, 다양한 기술을 사용하고 있으니 참고용으로만 살펴보시기 바랍니다.

비디오 스트리밍 서비스 아키텍처

  • 아래는 간단한 비디오 스트리밍 서비스 아키텍처입니다.
  • 비디오 스트리밍 서비스는 크게 비디오 데이터를 전송하는 SendDevice, 서버에서 비디오 데이터를 처리하는 Server, 비디오 데이터를 수신하는 WatchDevice로 구성됩니다.
  • 각각은 아래와 같은 역할을 수행합니다.
    • SendDevice: 비디오 데이터를 캡처하고 압축하는 역할을 합니다.
    • Server: 비디오 데이터를 처리하고 전송하는 역할을 합니다.
    • WatchDevice: 서버로부터 비디오 데이터를 수신하고 재생하는 역할을 합니다.

비디오 스트리밍 서비스 아키텍처 다이어그램

SendDevice

  • Youtube, Twitch 같은 서비스에서 방송을 하는 경우, SendDevice는 방송을 하는 사용자의 컴퓨터 또는 모바일 기기가 될 수 있습니다.
  • SendDevice는 비디오 데이터를 캡처하고 압축하는 역할을 합니다. 이 구조에서 비디오 데이터를 캡처하고 압축하는 과정은 비디오 데이터를 실시간으로 처리하는 과정이므로, 빠른 속도와 안정성이 요구됩니다.
  • 영상을 서버로 전송하기 전에 비디오 데이터를 압축하는 이유는 네트워크 대역폭을 절약하기 위함입니다. 네트워크 비용은 많은 비용을 요구하는 문제가 발생합니다. 비디오 데이터는 이미지 데이터의 연속이므로, 이미지 데이터를 압축하면 대역폭을 절약할 수 있습니다.
    • H.264, H.265 등의 비디오 압축 코덱과 AAC, MP3 등의 오디오 압축 코덱을 사용하여 비디오 데이터를 압축합니다.
  • SendDevice 에서 압축된 비디오 데이터는 서버로 전송됩니다.
    • 하지만, SendDevice 에서 압축하지 않고 비디오 데이터를 서버로 전송하는 경우도 있습니다. 이 경우 서버에서 비디오 데이터를 압축하는 과정이 추가로 필요합니다.

Server

  • Server는 비디오 데이터를 처리하고 전송하는 역할을 합니다. Server는 비디오 데이터를 받아서 처리하고, WatchDevice로 전송합니다.
  • Server 는 하나의 서버로 구성되어 있을 수도 있고, 여러 대의 서버로 구성되어 있을 수도 있습니다. 대규모 서비스의 경우, 여러 대의 서버로 구성되어 있습니다.
  • 540p, 720p, 1080p, 4K 등의 다양한 해상도의 비디오 데이터를 미리 준비하고, 사용자의 요청에 따라 적절한 해상도의 비디오 데이터를 전송합니다.
    • 사용자의 네트워크 상태에 따라 적절한 해상도의 비디오 데이터를 전송해야 합니다.
    • 사용자의 요청에 따라 적절한 해상도의 비디오 데이터를 전송하면, 사용자가 빠르게 비디오를 시청할 수 있습니다.
    • 사용자의 요청에 따라 적절한 해상도의 비디오 데이터를 전송하는 과정을 Adaptive Bitrate Streaming 이라고 합니다.
  • Server는 비디오 데이터를 받아서 처리하는 과정은 아래와 같습니다.
    • 비디오 데이터를 받아서 세그먼트로 나누는 과정을 수행합니다.
      • 세그먼트는 비디오 데이터를 나누어서 전송하는 단위입니다. 세그먼트는 일정한 길이로 나누어서 전송하며, WatchDevice는 세그먼트를 받아서 재생합니다.
      • 최초에 입력받은 비디오 데이터를 세그먼트로 나누는 과정을 세그멘테이션(Segmentation)이라고 합니다.
      • 세그먼트는 HTTP Live Streaming (HLS) 또는 MPEG-DASH 등의 프로토콜을 사용하여 전송합니다.
      • 비디오 데이터를 나누지 않으면 사용자가 비디오를 빠르게 재생할 수 없습니다. 세그먼트로 나누어서 전송하면 사용자가 빠르게 비디오를 재생할 수 있습니다.
    • 세그먼트를 CDN에 전송합니다.
      • CDN은 Content Delivery Network의 약자로, 콘텐츠 전송 네트워크를 의미합니다.
      • CDN은 전세계에 분산되어 있는 서버로 구성되어 있으며, 사용자에게 빠르게 콘텐츠를 전송할 수 있습니다.

WatchDevice

  • WatchDevice는 서버로부터 비디오 데이터를 수신하고 재생하는 역할을 합니다. WatchDevice는 영상을 시청하는 사용자의 컴퓨터 또는 모바일 기기가 될 수 있습니다.
  • WatchDevice는 CDN으로부터 세그먼트를 받아서 재생합니다. 세그먼트는 일정한 길이로 나누어진 비디오 데이터입니다. HTTP Live Streaming (HLS) 또는 MPEG-DASH 등의 프로토콜을 사용하여 세그먼트를 전송합니다.
  • WatchDevice는 세그먼트를 받아서 디코딩하고 재생합니다. 디코딩은 비디오 데이터를 디코딩하는 과정을 의미하며, 재생은 비디오 데이터를 화면에 표시하는 과정을 의미합니다.