NGINX Plus 를 사용한 스트리밍 미디어 배포
NGINX Plus 는 progressive download 또는 HTTP pseudo-streaming을 사용하여 MP4 및 FLV 비디오 콘텐츠를 전송하는 데 널리 사용됩니다. Progressive download는 disk I/O 및 동시 연결을 처리하는 스트리밍 서버의 효율성에 의존하며, MP4 또는 FLV pseudo-streaming 기능을 사용하면 클라이언트가 전체 리소스를 다운로드할 필요 없이 간단한 “trick-play” 기술을 사용하여 비디오 스트림에서 원하는 위치를 찾을 수 있습니다.
NGINX Plus는 이 기능을 확장하여 Apple HLS 및 Adobe HDS를 사용하는 video-on-demand(VOD) 애플리케이션과 RTMP를 사용하는 Flash-based 서비스에 대한 adaptive streaming을 지원합니다. adaptive streaming은 비디오 플레이어가 실시간으로 가장 적합한 비트레이트를 선택할 수 있다는 장점이 있습니다.
또한 NGINX Plus 는 개별 MP4 스트림에 스마트 대역폭 제한을 적용하여 고속 클라이언트와 다운로드 가속기가 과도한 리소스를 사용하지 못하도록 방지할 수 있으며, 향상된 세션 로깅 기능으로 HTTP 스트리밍 미디어를 사용한 표준 HTTP 요청 로깅의 오버헤드를 줄여줍니다.

NGINX Plus 는 progressive download, pseudo-streaming, adaptive streaming을 지원합니다.
목차
1. HLS Video on Demand
2. HDS Adaptive Streaming
3. NGINX Plus Session Log 집계
4. NGINX Plus MP4 대역폭 제어
1. HLS Video on Demand
NGINX Plus 의 HLS/VOD 모듈은 MP4 파일 컨테이너(파일 확장자 .mp4, .m4v, .m4a)로 패키징된 H.264/AAC 인코딩 콘텐츠에 대한 HTTP 라이브 스트리밍(HLS)을 지원합니다. HLS/VOD 모듈을 사용하면 사용자에게 adaptive streaming을 제공할 때 기존 MP4 콘텐츠를 다시 패키징할 필요가 없으며, MP4 파일 컨테이너에서 HLS로 즉시 “transformed” 또는 “transmultiplexed” 됩니다. NGINX Plus 모듈은 콘텐츠를 레코딩하지 않고도 MP4 파일 컨테이너에서 HLS/MPEG-TS로 실시간 분할, 패킷화, 멀티 플렉싱을 수행합니다.
클라이언트는 미디어 세그먼트 다운로드를 시작하기 전에 먼저 manifest(파일 이름 확장자 .m3u8)를 요청합니다. HLS/VOD 모듈은 재생 목록을 즉시 생성하므로 세그먼트 구조를 수동으로 설명할 필요가 없습니다.
이 예제에서와 같이 특정 위치에서 HLS 스트림을 제공하도록 NGINX를 구성할 수 있습니다:
location /hls/ {
hls; # Use the HLS handler to manage requests
# Serve content from the following location
alias /var/www/video;
# HLS parameters
hls_fragment 8s;
hls_buffers 10 10m;
hls_mp4_buffer_size 1m;
hls_mp4_max_buffer_size 5m;
}
HLS 클라이언트는 먼저 해당 위치의 파일에 대한 .m3u8 manifest를 요청한 다음, 파일에 지정된 비디오 세그먼트를 다운로드하기 시작합니다. 다시 말하지만, NGINX Plus 는 MP4 패키지 콘텐츠를 HLS 스트리밍을 위해 즉석에서 세그먼트화 하는 작업을 처리합니다.
또한 HLS 기능을 NGINX secure link 모듈과 함께 사용하여 쿠키 또는 source IP 주소와 같은 고유한 클라이언트 데이터를 기반으로 승인된 시간제한 링크를 생성할 수 있습니다. 이를 통해 비디오 서비스의 오용에 대한 강력한 수준의 보호 기능을 제공합니다.
2. HDS Adaptive Streaming
Adobe의 HDS(HTTP Dynamic Streaming)는 사용자에게 adaptive streaming 미디어를 배포할 수 있는 대체 방법을 제공합니다. Apple의 HLS와 유사한 방식으로 작동하지만 다른 파일 형식을 사용합니다.
비디오는 먼저 manifest(파일 확장자 .f4m), fragment(.f4f) 및 인덱스(.f4x) 파일을 생성하는 Adobe의 f4fpackager tool을 사용하여 준비됩니다. 그런 다음 이러한 파일을 웹 서버에 게시하면 NGINX Plus 의 f4f 핸들러가 이를 전송합니다.
location /hds/ {
f4f; # Use the HDS handler to manage requests
# Serve content from the following location
alias /var/www/video;
}
3. NGINX Plus Session Log 집계
HDS 또는 HLS를 사용하여 콘텐츠에 액세스하는 비디오 클라이언트는 일반적으로 video fragment에 대해 많은 HTTP 요청을 발행합니다. 그 결과 request log는 매우 장황하고 분석하기 어려울 수 있습니다.
스트리밍 미디어 다운로드 로그를 보다 유용하게 만들기 위해 NGINX Plus 의 session log 집계 기능은 여러 HTTP 요청을 단일 로그 파일 항목으로 결합하는 보다 간결한 로그를 생성합니다. 시간제한이 있는 단일 세션의 모든 요청이 결합되고 전송된 총 데이터가 기록됩니다. 다른 모든 매개변수는 세션의 첫 번째 요청에서 가져옵니다.
미디어 위치에 대한 요청에 대해 session log 집계를 활성화하고 다른 모든 클라이언트 요청에 표준 로깅을 사용하여 request log에 세부 정보를 보존할 수 있습니다.
4. NGINX Plus MP4 대역폭 제어
HTTP 트래픽 다운로드에 제한을 적용하려면 limit_rate 및 limit_rate_after 지시문을 사용합니다. 이 지시문은 대역폭(Byte per second)으로 제한을 정의합니다.
NGINX Plus 는 MP4 콘텐츠에 대한 smart limit도 제공합니다. mp4_limit_rate 및 mp4_limit_rate_after 지시문은 다운로드한 파일의 비트 전송률과 대역폭 제한을 적용하는 시간을 기준으로 대역폭 제한을 정의합니다.
다음 샘플 구성은 클라이언트가 미리 읽을 수 있도록 15초 동안 MP4 파일을 제한 없이 스트리밍한 다음 대역폭을 MP4 파일 비트 전송률의 120%로 제한합니다.
location /video/ {
mp4;
mp4_limit_rate_after 15s;
mp4_limit_rate 1.2;
}
이렇게 하면 클라이언트가 동영상 파일을 건너뛰는 “trick-play” 기능을 사용할 때 대역폭 리소스가 과도하게 낭비되는 것을 방지하고 동영상 다운로드 가속기의 영향을 줄일 수 있습니다.
NGINX Plus를 사용해 스트리밍 미디어 배포를 해보고 싶으시다면 30일 무료 체험판을 신청하거나, NGINX STORE에 연락하여 문의하십시오.
NGINX에 대한 최신 정보들을 빠르게 전달받고 싶으시다면, 아래의 뉴스레터를 구독하세요.
댓글을 달려면 로그인해야 합니다.