인터넷 라이브 방송의 대략적인 흐름

highway92·2022년 1월 10일
0

라이브스트리밍

목록 보기
1/2

1. 대략적인 흐름

  1. 원본영상(웹캡 등을 이용해 촬영)
  2. 라이브 인코더
  3. 미디어 서버
  4. 전송 서버(CDN)
  5. 동영상 플레이어(소프트웨어 또는 웹 등등)
  6. 시청자

2. 라이브 인코더

2-1 개념 :

라이브 인코더는 원본 영상을 정해진 방식으로 압축(인코딩)하고 미디어 서버로 전송하는 역할을 한다.
-> 그리고 이 같은 행위를 보통 '송출' 이라고 한다.

인코더의 종류 :

  • PC에 설치해서 사용하는 소프트웨어 인코더
  • 촬영하면서 송출하는 모바일 앱 인코더
  • ffmpeg를 사용하여 간단한 인코더를 구현 할 수도 있다.

2-2 압축(인코딩):

카메라로 촬영한 원본 영상은 데이터 용량이 너무 크기 때문에 압축과정이 반드시 필요하게 된다. 또한 미디어 서버에서 해석할 수 있는 압축 방식(Codec)을 사용해야 한다. 인터넷 방송에서는 H.264/AAC 코덱이 주로 쓰인다고 한다.

2-3 송출:

미디어 서버로 영상을 보낼 때는 주로 RTMP 프로토콜을 이용하여 보내게 된다. 최근에는 WEBRTC등 다른 프로토콜 또한 주목 받고 있다.
ps. 안정적인 송출을 위해서는 충분한 인터넷 업로드 대역폭이 확보되어야 한다.

3. 미디어 서버

3-1 개념 :

미디어 서버는 다음과 같은 역할을 한다.

  • 인코더가 보내준 영상을 여러가지 화질 및 비트레이트로 변환(트랜스 코딩)
  • 화질별로 변환된 영상을 다시 HLS형식으로 변환(트랜스 믹싱 혹은 패캣 타이징이라 한다.)

3-2 화질 및 비트레이트 변환:

화질을 여러개로 변환 시켜주는 것은 다양한 디바이스 크기, 네트워크 환경에 맞는 영상을 시청가능케 위함이다.
불필요한 데이터 사용과 배터리 소모를 방지하기 위해 미디어 서버에서 원본 영상을 여러 화질로 변환해 주어야 한다.

3-3 HLS변환 :

HLS(HTTP Live Streaming)는 가장 널리 사용되는 표준 HTTP 스트리밍 프로토콜 입니다. M3U8확장자의 재생목록 파일과 영상을 잘게 쪼갠 TS 청크 파일들을 전송하며, 이를 통해 모바일과 PC등 다양한 디바이스에서 영상을 재생할 수 있습니다.

카메라가 촬영하는 시간과 그 영상이 시청자에게 표시되는 시간의 차이를 지연(latency)라고 합니다.
시청자와 실시간 소통이 필요할 수록 짧은 지연(low latency)가 중요해집니다.
과거에는 10초~15초 분량의 TS 청크를 재생목록에 3개씩 담아 사용하는 것이 일반적이었다고 한다.
미디어 서버입장에서는 30초 ~ 45초 정도 분량을 버퍼에 담아두었다가 전달하는 방식이었다.
즉 사용자 입장에서는 전송 시간까지 포함하여 최소 30초 최대 1분의 지연이 발생한다.
버퍼가 클수록 재생이 안정적이지만 latency는 길어집니다.(trade-off)

3-4 미디어 서버 솔루선 :

  • Wowza Media Server(유료)
    가장 많이 사용된다고 할 수 있는 솔루션

  • Nginx-rtmp(오픈소스)
    nginx의 모듈로 동작하는 미디어 스트리밍 서버이다. RTMP 소스를 Pull 혹은 Push 방식으로 입력받을 수 있고 RTMP/HLS/MPEG-DASH 출력을 지원합니다. 여기에 ffmpeg를 연동하면 트랜스코딩을 비롯하여 기타 다양한 기능들을 구현할 수 있습니다.

4. 전송 서버(CDN)

4-1 개념

미디어 서버에서 실시간으로 생성한 HLS 영상 조각 파일을 사용자에게 전달하려면 전송 서버가 있어야 한다. 일반적인 미디어 서버는 전송 서버의 역할까지 수행한다. 하지만 동시 시청수가 많은 방송일 경우 대규모 트래픽을 처리하기 위해 CDN을 사용하는 것이 좋습니다.

5. 동영상 플레이어

5-1 개념

말 그대로 동영상이 재생되는 공간. 미디어 서버에서 최종적으로 만든 HLS형식은 모바일 이라면 안드로이드, 아이폰 구분 없이 내장된 플레이어를 통해 재생가능 (HLS가 apple에서 만든 방식이기에 당연히 mac os는 가능)

window pc의 경우 외부 플레이어가 필요한데, chrome이나 Edge 같이 MSE(Media Source Extensions)를 지원하는 최신 브라우저라면 javascript로 구현된 플레이어를 사용할 수 있다.(hls.js, video.js등)

5-2 자주 발생하는 문제

  • 동영상 플레이어를 사용할 때 브라우저의 보안적 제약으로 재생이 불가능한 상황이 발생 할 수 있다.
  • 서비스 페이지의 도메인과 영상이 전송되는 도메인이 다르면 재생이 되지 않는다. 이를 위해 전송 서버, 미디어 서버에서 적절한 크로스 도메인 설정이 필요하다.
  • HTTPS 페이지 내에서 HTTP 프로토콜로 전송되는 영상을 재생 하려 할때도 재생이 안되는 경우가 있으니 영상또한 HTTPS 프로토콜로 전송하는 것이 필요하다.

이 글은 네이버 클라우드 플랫폼의 글을 읽고 나름의 정리를 한 글입니다.
원문 : https://medium.com/naver-cloud-platform/%EC%9D%B8%ED%84%B0%EB%84%B7-%EB%9D%BC%EC%9D%B4%EB%B8%8C-%EB%B0%A9%EC%86%A1%EC%9D%80-%EC%96%B4%EB%96%A4-%EA%B8%B0%EC%88%A0%EB%A1%9C-%EB%A7%8C%EB%93%A4%EC%96%B4%EC%A7%88%EA%B9%8C%EC%9A%94-98423dc7fcd4

profile
웹 개발자로 활동하고 있습니다.

0개의 댓글