스트리밍을 위한 NGINX RTMP 서버 설정하기

스트리밍이 계속해서 충돌하고 있나요? 그렇다면 스트리밍을 안정적으로 호스팅할 수 있는 방법을 찾아야 합니다. 하지만 비싼 옵션을 감당할 수 없다면 걱정하지 마세요! NGINX RTMP가 해결책이 될 것입니다. NGINX RTMP는 신뢰할 수 있는 오픈 소스 모듈이므로 무료인 것을 알 수 있습니다!

이 튜토리얼에서는 NGINX RTMP 서버를 설정하여 웹사이트에서 안정적인 라이브 스트리밍을 설정하는 방법을 배우게 될 것입니다.

준비되셨나요? 계속해서 읽어보고 라이브 스트리밍을 시작해 보세요!

전제 조건

이 튜토리얼은 실습을 기반으로 합니다. 따라하고 싶으시다면 다음 사항을 확인하세요:

  • A Linux server – This demo uses Ubuntu 20.04 LTS, but you can use any other Linux distribution with NGINX.
  • A non-root user with sudo privileges.
  • 라이브 스트리밍 서버를 실행하기 위해 필요한 최소 리소스 – 2G RAM, 2 CPU 코어, 20 GB HDD.

이 값들은 단순 추천 값입니다. 실제 트래픽 요구 사항에 따라 정확한 값이 달라집니다. 트래픽이 많을수록 더 강력한 서버가 필요하며 라이브 비디오를 호스팅하고 스트리밍하는 데 더욱 많은 리소스가 필요합니다. 개발 환경에서는 2 CPU와 2 GB RAM을 갖춘 NGINX RTMP 서버가 테스트에 충분합니다.

RTMP 서버 구성

이제 전제 조건이 해결되었으므로 RTMP 서버를 설치하고 구성할 수 있습니다. 먼저 NGINX 서버를 RTMP 서버로 변환하는 NGINX 모듈을 설치한 후 NGINX 구성 파일을 구성하여 사용자에게 실시간 스트림을 활성화합니다.

1. 터미널을 열고 모든 패키지를 업데이트하려면 apt update 명령을 실행합니다. 이 명령은 패키지 데이터베이스를 최신 우분투 데이터베이스와 동기화합니다.

sudo apt update -y
Updating all your packages

2. 다음 명령을 실행하여 Linux 서버에 RTMP 서버를 설치합니다.

libnginx-mod-rtmp 모듈은 NGINX 서버를 RTMP 서버로 변환하는 NGINX 모듈입니다. 이 모듈은 NGINX가 Adobe Flash 플레이어와 통신하여 실시간 비디오 또는 오디오를 스트리밍할 수 있도록하며 개발 팀에서 공식적으로 지원됩니다.

sudo apt install libnginx-mod-rtmp -y
installing an RTMP server

3. 좋아하는 편집기에서 /etc/nginx/nginx.conf 파일을 열어 RTMP 라이브 프로그램을 구성합니다. nginx.conf 파일은 NGINX 구성 파일로, NGINX 서비스의 동작을 정의하는 여러 지시문 또는 블록이 포함되어 있습니다.

4. 마지막으로 아래 코드를 nginx.conf 파일에 작성한 후 변경 사항을 저장하고 편집기를 종료합니다.

아래 코드는 NGINX가 RTMP 서버로 작동하도록 지시하고 사용자에게 실시간 스트림을 활성화합니다.

# 이 코드 블록은 NGINX가 RTMP 서버로 작동하도록 지정합니다. 
rtmp {
		server {
		# 서버가 수신 대기할 포트를 설정합니다.
    listen 1935;
				# 보낼 각 데이터 청크의 크기입니다.
				# 청크가 너무 작으면 Flash Player가 멈출 수 있으므로 
				# 버퍼 언더플로 조건이 발생할 수 있습니다.
        chunk_size 4096;
				# 서버에 콘텐츠를 게시할 수 있는 IP 주소입니다.
				# localhost만 NGINX RTMP에서 콘텐츠를 게시할 수 있도록 허용합니다.
				allow publish 127.0.0.1;
				# 나머지 모든 사용자에 대해 게시를 거부합니다.
				deny publish all;
				# "live"라는 이름의 애플리케이션을 정의합니다.
        application live {
				# NGINX가 사용자에게 라이브 스트림을 활성화하도록 지정합니다.
						live on;
				# 이 줄은 NGINX에 녹화를 비활성화하도록 지정합니다. 이 줄이 포함되지 않으면 
				# NGINX는 계속 녹화하고 스트림을 디스크에 영구적으로 저장합니다.
						record off;
				}
		}
}

방화벽 설정으로 네트워크 보호

이미 NGINX RTMP 서버를 구성했지만 네트워크를 보호하고 트래픽 흐름을 제어해야 합니다. 어떻게? 우분투의 기본 방화벽인 Uncomplicated Firewall (UFW)를 설정하여 설정합니다.

NGINX RTMP 서버를 방화벽 뒤에 두면 NGINX RTMP 서버 포트를 열어야 합니다. NGINX RTMP 서버를 1935 포트에서 수신 대기하도록 구성했으므로 방화벽을 통해 이 포트를 열어야 합니다.

1. 다음 명령을 실행하여 방화벽 규칙을 추가하여 방화벽에서 1935 포트를 엽니다. 이 방화벽 규칙은 NGINX RTMP 서버 포트 1935를 모든 수신 및 송신 요청에 대해 접근 가능하게 합니다.

sudo ufw allow 1935/tcp
Opening Port 1935 on your firewall

2. 이제 다음 명령을 실행하여 방화벽을 비활성화하고 다시 활성화합니다. 이 명령은 방화벽을 다시 시작하여 방화벽의 변경 사항이 적용되도록 합니다.

sudo ufw disable && sudo ufw enable

3. 마지막으로 다음 명령을 실행하여 방화벽의 상태를 확인하고 모든 IP 주소(Anywhere)에서 포트 1935에 접근할 수 있는지 확인합니다.

sudo ufw status
Checking if Port 1935 is Accessible from Anywhere

FFmpeg를 사용하여 비디오 스트리밍

NGINX RTMP 서버가 준비되었으므로 FFmpeg을 사용하여 예제 비디오를 생성하고 NGINX RTMP 서버를 통해 스트리밍할 차례입니다. FFmpeg은 VLC, OMXPlayer, VobSub 등과 같은 다양한 응용 프로그램에서 오디오 및 비디오를 녹화, 변환 및 스트리밍하는 완전한 솔루션입니다.

서버에서 비디오 스트리밍을 테스트하고 스트리밍에 작은 크기의 비디오를 사용할 수 있습니다.

1. 아래의 apt install 명령어를 실행하여 FFmpeg가 올바르게 작동하도록 필요한 종속성을 설치합니다.

다음 명령은 다음을 설치합니다:

  • libpcre3 – FFmpeg 툴킷에서 정규 표현식을 구문 분석하고 컴파일하는 데 사용되는 정규식 라이브러리입니다.
  • libpcre3-dev – libpcre3 패키지의 개발 헤더를 포함하는 패키지입니다.
  • libssl-dev – RTMP 서버에서 SSL/TLS 연결을 만들기 위해 사용되는 OpenSSL 암호 라이브러리입니다.
  • zlib1g-dev: zlib 라이브러리는 인터넷을 통한 오디오 및 비디오 파일 전송을 가속화하는 압축 및 압축 해제 라이브러리입니다.
sudo apt install -y libpcre3 libpcre3-dev libssl-dev zlib1g-dev
Installing Required Dependencies

2. 다음으로 서버에 ffmpeg를 설치하려면 다음 명령을 실행합니다.

 sudo apt install ffmpeg -y 
Installing FFmpeg

3. 마지막으로 다음 명령을 실행하여 다음을 수행하고 새로운 라이브 스트림을 만듭니다:

  • 소스 파일(i)에서 원래 프레임 속도로 입력을 읽습니다(re). video.mp4를 비디오 경로와 파일 이름으로 교체하세요.
  • 비디오 형식을 그대로 복사합니다(c:v copy) 및 오디오를 AAC 코덱으로 인코딩합니다(c:a aac).
  • 오디오 샘플 속도를 44100 Hz로 설정합니다(ar 44100). 비디오의 샘플 속도가 이 값보다 작으면 FFmpeg은 보간을 수행하여 샘플 속도를 증가시킵니다.
  • 오디오 채널을 하나로 설정하십시오 (모노) (ac 1) 및 FFmpeg가 스트리밍할 비디오 형식 (-f flv)입니다.
  • “RTMP 서버 구성” 섹션에서 구성한 RTMP 라이브 프로그램을 설정하십시오 (rtmp://localhost/live/streamname.flv) (4단계). streamname.flv을 원하는 이름으로 변경할 수 있습니다.
ffmpeg -re -i "video.mp4" -c:v copy -c:a aac -ar 44100 -ac 1 -f flv rtmp://139.180.203.6:1935/live/streamname.flv 

아래에서 보듯이 ffmpeg 명령은 감지된 초당 프레임, 비트레이트, 및 새로 생성된 RTMP 라이브 스트림의 fps를 출력합니다.

Viewing the RTMP Live Stream Data

결론

이 튜토리얼에서는 NGINX RTMP 서버를 설정하고 NGINX 구성 파일을 수정하여 서버에서 라이브 스트림을 활성화하는 방법을 배웠습니다. 또한 NGINX RTMP 서버를 통해 FFmpeg 도구를 사용하여 비디오 라이브 스트림을 설정하는 방법도 살펴보았습니다.

라이브 스트림을 설정하는 데 많은 비용이 들 필요는 없다는 것을 방금 깨달았습니다. 이제 왜 HTML5 <video> 요소를 사용하여 스트림을 웹 페이지에 통합하지 않으시겠습니까? 또는 OBS Studio를 설정하여 RTMP 스트림을 사용하지 않으시겠습니까?

Source:
https://adamtheautomator.com/nginx-rtmp/