-
Notifications
You must be signed in to change notification settings - Fork 0
스트리밍 프로토콜
인터넷을 통해 사용자에게 비디오/오디오 미디어를 전달하는 방법.
- 파일을 한 번에 조금씩 지속적으로 보냄
- 사용자의 장치가 먼저 모든 파일을 다운로드 하지 않고도 재생 가능
-
Progressive Download
= 웹 서버로부터 동영상을 모두 다운로드 한 뒤 파일이 도착하는대로 재생
-
RTSP, RTMP 스트리밍
= Real-time Streaming Protocol
= 사용자가 현재 시청하고 있는 비디오 프레임만을 전송
(대충 찾아봐서 몰랐는데 요게 스트리밍 프로토콜의 원조? 느낌)
다만 스트리밍 서버가 따로 있어 서로 다른 네트워크로 데이터를 교환해야 하므로 서비스가 원활하지 않다는 문제가 있음 (ex. 방화벽, NAT)
-
Adaptive HTTP Streaming
= 컨텐츠를 잘개 쪼개어 저장하고 재생할 때 네트워크 상황에 따라 컨텐츠 해상도를 조절
⇒ 아래의 3가지 프로토콜은 Adaptive HTTP Streaming 방식(컨텐츠를 잘개 쪼개 그때 그때 제공)인데, 이는 공급사마다 프로토콜이 달라 표준화가 부족하다.
** 기존과는 2가지 큰 차이가 있다.
-
동영상 정보를 전달하는 방식
-
스트림 세그먼트
일정한 시간 간격으로 입력받은 미디어 데이터 분할
→ 그 파일에 접근할 수 있는 메타데이터(m3u8) 생성
→ “잘게 쪼갠 영상 + 다음 동영상 정보”를 클라이언트에게 전달
-
-
모든 인터넷 연결 장치가 HTTP를 지원하기 때문에 전용 서버가 필요한 스트리밍 프로토콜보다 간단하게 실행할 수 있다.
-
재생에 지장을 주지 않고 네트워크 상태에 따라 비디오 품질을 높이거나 낮출 수 있음 (= 적응 비트 전송률 스트리밍)
** 적응 비트 전송률 = 네트워크 상태에 따라 스트리밍 비디오 품질 조정
→ 동영상을 작은 조각들로 분할하고, 이를 HTTP 기반의 웹 서버로 전송.
→ (TMI) 본래 탄생 목적은 애플이 자사 제품에 사용하기 위함이었음
"원본 > 인코더 > 스트림 세그먼터 > 웹 서버 > 플레이어”
주로 m3u8과 ts(타스 아님)를 사용한다.
** m3u8 = 영상 재생을 위한 메타 정보 (UTF-8로 인코딩)
** ts = 잘개 쪼갠 미디어 파일 (MPEG-2의 Transport Stream 포맷)
가볍게 정리하면 m3u8 → 적응 비트레이트 스트리밍(사용자의 네트워크 환경에 따라 품질 조절) 구현 가능, ts → 부분재생 가능
⇒ 중간에 네트워크가 끊겨도 문제되지 않음
-
인코딩
비디오 데이터의 포맷을 다시 설정하여 모든 장치가 데이터를 인식하고 해석할 수 있도록 함
-
조각화
비디오는 몇 초 길이의 세그먼트로 나뉨 (기존 6초)
-
HLS는 비디오 조각의 인덱스 파일을 만들어 순서를 기록
-
다양한 품질로 여러 세트의 조각을 복제
++ 스트리밍을 캐시할 수도 있음
++ CDN을 활용해 여러 지역으로 스트리밍을 편하게 배포할 수 있음
= Adobe에서 개발한 가변 비브레이트 스트리밍 방식.
(그냥 적응 비트 전송률 스트리밍이랑 똑같은 말)
[서버]
- MP4 → F4F (오디오, 비디오, 메타데이터 포함) 파일 형식으로 변환시킴
- H.264로 인코딩
HDS 스트리밍이란? | HLS와 HDS의 비교 | Cloudflare
(아직 적다 말았음)
-
HDS가 HLS보다 지원과 채택이 덜 광범위함
(단종된 Adobe Flash와 함께 사용하기 위함이었음)
- 비디오를 작은 조각으로 나누고 다양한 품질 수준에서 해당 조각을 인코딩
-
인코딩 및 조각화
원본 서버가 파일을 조각 분할(마다 색인 파일)하고, 이를 인코딩
(여기서 어떠한 인코딩 표준도 사용 가능)
-
전송
사용자가 스트림 watch → 인코딩된 조각이 인터넷을 통해 push → (왠만하면) CDN을 통해 효율적으로 배포
-
디코딩 및 재생
사용자 장치가 스트리밍된 데이터 수신 → 데이터 디코딩 → 재생
- DASH는 어떠한 인코딩 표준도 가능
- DASH는 세그먼트 길이가 2
10초 (최적 24초) - DASH는 국제 표준 (but HLS는 Not)
-
출처
HLS(HTTP 라이브 스트리밍)에 대해 알아야 할 모든 것
HLS (HTTP 라이브 스트리밍)이란 | Cloudflare
(위 cloudflare 한국 페이지에서 설명이 매우 자세하게 적혀있다 매우 굳굳)
- 프로젝트 생성
- 프로젝트 구조
- PR에 대한 단위 테스트 자동화
- 역/직렬화 라이브러리 비교
- Github Release 자동화
- Firebase App 배포 자동화
- 플러그인을 이용하여 공통 설정 없애기
- Timber 라이브러리를 사용한 이유
- 네트워크 예외 처리
- Kotest 도입기