NGINX 및 NGINX Plus를 사용하여 비디오 스트리밍 활성화
최근 몇 달 동안 NGINX 커뮤니티의 구성원들은 코로나19 팬데믹 기간 동안 운영을 유지하기 위해 힘들게 노력하며 많은 조직과 서로를 지원했습니다. NGINX를 최적의 성능으로 조정하는 방법에 대한 시간과 전문 지식을 기부해 주셨습니다. NGINX는 이에 보답하기 위해 코로나19의 영향을 받은 웹사이트를 위한 무료 리소스를 게시했으며, 새로운 사용자를 중심으로 커뮤니티가 결집하는 것을 보고 매우 기뻤습니다.
이 포스트에서는 NGINX를 사용하여 안정적이고 안전하며 확장 가능한 비디오 스트리밍을 구현하는 방법을 설명합니다.
목차
1. NGINX 오픈소스를 사용하여 라이브 비디오 스트리밍 및 비디오 저장
1-1. 보안을 잊지 마세요
1-2. Build 도구 설치
1-3. 종속성 패키지 설치
1-4. RTMP 모듈을 사용하여 NGINX 컴파일
1-5. NGINX 구성
1-6. 구성 검증 및 NGINX 시작
1-7. 재생 방법 테스트
2. NGINX Plus를 통한 사용자 경험 개선
3. 도움
1. NGINX 오픈소스를 사용하여 라이브 비디오 스트리밍 및 비디오 저장
1-1. 보안을 잊지 마세요
이 포스트에서 제시된 구성은 비디오 스트림을 시청할 수 있는 사용자를 제한하는 보안 조치를 포함하고 있지 않습니다. 시청자가 비디오를 시청하는 데 사용하는 프론트엔드 애플리케이션을 통해 스트림을 안전하게 보호하는 다양한 방법이 있습니다. 예를 들어 특정 IP 주소에서만 액세스를 허용하거나 시청자에게 인증을 요구하는 방법 등이 있습니다.
1-2. Build 도구 설치
NGINX를 컴파일하기 전에 기본적인 빌드 도구를 설치해야 합니다: autoconf, gcc, git, 그리고 make. 이를 다운로드하고 설치하려면 해당 운영 체제에 맞는 명령을 실행하세요 (여기에 포함되지 않은 경우, 운영 체제 공급 업체 문서를 참조하세요).
- Debian 혹은 Ubuntu의 경우 :
$ sudo apt update
$ sudo apt install build-essential git
- CentOS, Oracle Linux, 혹은 RHEL의 경우 :
$ sudo yum update
$ sudo yum groupinstall "Development Tools"
$ sudo yum install git
1-3. 종속성 패키지 설치
빌드에는 Perl Compatible Regular Expressions (PCRE), OpenSSL, 그리고 압축을 위한 zlib과 같은 여러 종속성이 필요합니다.
패키지 관리자를 사용하여 종속성 설치
종속성 패키지를 다운로드하고 설치하는 가장 쉬운 방법은 패키지 관리자를 사용하는 것입니다.
해당 운영 체제에 맞는 명령을 실행하세요 (여기에 포함되지 않은 경우, 운영 체제 공급 업체 문서를 참조하세요).
- Debian 혹은 Ubuntu의 경우 :
$ sudo apt install libpcre3-dev libssl-dev zlib1g-dev
- CentOS, Oracle Linux, 혹은 RHEL의 경우 :
$ sudo yum groupinstall pcre-devel zlib-devel openssl-devel
Source를 통한 종속성 설치
“source에서 nginx 빌드” 문서를 참고하세요.
1-4. RTMP 모듈을 사용하여 NGINX 컴파일
빌드를 완료하기 위해 RTMP와 NGINX의 GitHub 저장소를 복제한 후, configure 명령을 실행하고 NGINX를 컴파일합니다.
$ cd /path/to/build/dir
$ git clone https://github.com/arut/nginx-rtmp-module.git
$ git clone https://github.com/nginx/nginx.git
$ cd nginx
$ ./auto/configure --add-module=../nginx-rtmp-module
$ make
$ sudo make install
1-5. NGINX 구성
NGINX를 구성하여 HTTP Live Streaming (HLS) 및 Dynamic Adaptive Streaming over HTTP (DASH) 프로토콜 중 하나 또는 둘 다를 사용하여 비디오를 스트리밍할 수 있습니다.
이 프로토콜은 동일한 기능을 제공하므로 선택은 개인의 선호에 따라 결정할 수 있습니다. 이 프로토콜에 대해 익숙하지 않은 경우 Vidbeo 블로그의 “HLS vs DASH“를 참조하세요.
HLS 구성
HLS의 경우, 구성은 다음과 같습니다.
rtmp {
server {
listen 1935;
application live {
live on;
interleave on;
hls on;
hls_path /tmp/hls;
hls_fragment 15s;
}
}
}
http {
default_type application/octet-stream;
server {
listen 80;
location /tv {
root /tmp/hls;
}
}
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
text/html html;
}
}
DASH 구성
DASH의 경우, 구성은 다음과 같습니다.
rtmp {
server {
listen 1935;
application live {
live on;
dash on;
dash_path /tmp/dash;
dash_fragment 15s;
}
}
}
http {
server {
listen 80;
location /tv {
root /tmp/dash;
}
}
types {
text/html html;
application/dash+xml mpd;
}
}
1-6. 구성 검증 및 NGINX 시작
구문 오류가 없는지 확인하기 위해 항상 구성에 대한 유효성 검사하는 것이 좋습니다. 다음 명령을 실행하세요.
$ sudo nginx -t
nginx: the configuration file filename syntax is ok
nginx: configuration file filename test is successful
이후 아래 명령을 실행하여 NGINX를 시작합니다.
$ sudo nginx
1-7. 재생 방법 테스트
비디오 스트림을 시작하세요. OBS Studio는 커스텀 RTMP 서버를 구성하여 워크스테이션에서 NGINX 서버로 라이브 스트리밍할 수 있는 일반적으로 사용되는 오픈 소스 도구입니다. OBS를 rtmp://NGINX_server/tv/tv2로 스트리밍하도록 구성하세요. 여기서 NGINX_server는 서버의 IP 주소 또는 호스트 이름입니다. 스트림 키는 필요하지 않습니다.
stream.sh 스크립트를 실행하여 비디오 스트림을 시작합니다. 이 스크립트의 내용은 다음과 같습니다.
ffmpeg -re -I bbb_sunflower_1080p_60fps_normal.mp4 -vcodec copy -loop -1 -c:a aac -b:a 160k -ar 44100 -strict -2 -f flv rtmp:192.168.1.138/live/bbb
스트리밍되는 비디오는 blender.org의 오픈 소스 Big Buck Bunny 비디오로, -I 인수로 지정됩니다. 다른 인수에 대한 자세한 내용은 ffmpeg 문서를 참조하세요.
비디오가 스트리밍되면 구성한 프로토콜을 사용하여 NGINX가 올바르게 제공되는지 테스트할 수 있습니다. 제임스는 VLC 미디어 플레이어의 세 개의 인스턴스를 열고 각 재생 방법에 해당하는 적절한 URL에 액세스합니다. URL에서 NGINX_server는 서버의 IP 주소 또는 호스트 이름입니다.
RTMP – rtmp://NGINX_server/live/bbb
HLS – http://NGINX_server/live/bbb.m3u8
DASH – http://NGINX_server/live/bbb.mpd
2. NGINX Plus를 통한 사용자 경험 개선
만약 비디오 라이브러리나 강의를 구축한다면, 오픈소스로는 가능한 기능을 넘어서는 기능이 필요할 수 있습니다. NGINX Plus는 사전 빌드된 모듈을 사용하여 성능과 최종 사용자 경험을 향상시키는 확장 기능을 제공합니다. 다음과 같은 작업을 수행할 수 있습니다.
- 비디오 캐싱을 통해 더 높은 규모의 지원
- 비디오 온 디맨드 (VOD) 서비스 제공
- 대역폭 제한을 통해 스트리밍 비용과 용량 관리
RTMP 모듈을 NGINX Plus에 통합하기 위해서는 동적으로 로드해야 합니다. “NGINX Plus Documentation“를 참조하세요.
3. 도움
비디오 스트리밍 또는 다른 사용 사례를 구현하는 데 문제가 있다면, NGINX STORE가 도움을 드릴 수 있습니다! NGINX STORE는 질문과 요청에 가능한 빠르게 응답하고 있습니다.
팬데믹의 최전선에서 일하는 조직이고 고급 요구 사항이 있는 경우, 앞에서 언급한 NGINX Plus 라이선스의 상위 계층을 받을 자격이 있을 수 있습니다.
아래 뉴스레터를 구독하고 NGINX와 NGINX STORE의 최신 정보들을 빠르게 전달 받아보세요.