스트리밍이 계속해서 충돌하고 있나요? 그렇다면 스트리밍을 안정적으로 호스팅할 수 있는 방법을 찾아야 합니다. 하지만 비싼 옵션을 감당할 수 없다면 걱정하지 마세요! 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
명령을 실행합니다. 이 명령은 패키지 데이터베이스를 최신 우분투 데이터베이스와 동기화합니다.

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

3. 좋아하는 편집기에서 /etc/nginx/nginx.conf 파일을 열어 RTMP 라이브 프로그램을 구성합니다. nginx.conf 파일은 NGINX 구성 파일로, NGINX 서비스의 동작을 정의하는 여러 지시문 또는 블록이 포함되어 있습니다.
4. 마지막으로 아래 코드를 nginx.conf 파일에 작성한 후 변경 사항을 저장하고 편집기를 종료합니다.
아래 코드는 NGINX가 RTMP 서버로 작동하도록 지시하고 사용자에게 실시간 스트림을 활성화합니다.
방화벽 설정으로 네트워크 보호
이미 NGINX RTMP 서버를 구성했지만 네트워크를 보호하고 트래픽 흐름을 제어해야 합니다. 어떻게? 우분투의 기본 방화벽인 Uncomplicated Firewall (UFW)를 설정하여 설정합니다.
NGINX RTMP 서버를 방화벽 뒤에 두면 NGINX RTMP 서버 포트를 열어야 합니다. NGINX RTMP 서버를 1935
포트에서 수신 대기하도록 구성했으므로 방화벽을 통해 이 포트를 열어야 합니다.
1. 다음 명령을 실행하여 방화벽 규칙을 추가하여 방화벽에서 1935
포트를 엽니다. 이 방화벽 규칙은 NGINX RTMP 서버 포트 1935
를 모든 수신 및 송신 요청에 대해 접근 가능하게 합니다.

2. 이제 다음 명령을 실행하여 방화벽을 비활성화하고 다시 활성화합니다. 이 명령은 방화벽을 다시 시작하여 방화벽의 변경 사항이 적용되도록 합니다.
3. 마지막으로 다음 명령을 실행하여 방화벽의 상태를 확인하고 모든 IP 주소(Anywhere)에서 포트 1935
에 접근할 수 있는지 확인합니다.

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 라이브러리는 인터넷을 통한 오디오 및 비디오 파일 전송을 가속화하는 압축 및 압축 해제 라이브러리입니다.

2. 다음으로 서버에 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
명령은 감지된 초당 프레임, 비트레이트, 및 새로 생성된 RTMP 라이브 스트림의 fps를 출력합니다.

결론
이 튜토리얼에서는 NGINX RTMP 서버를 설정하고 NGINX 구성 파일을 수정하여 서버에서 라이브 스트림을 활성화하는 방법을 배웠습니다. 또한 NGINX RTMP 서버를 통해 FFmpeg 도구를 사용하여 비디오 라이브 스트림을 설정하는 방법도 살펴보았습니다.
라이브 스트림을 설정하는 데 많은 비용이 들 필요는 없다는 것을 방금 깨달았습니다. 이제 왜 HTML5 <video> 요소를 사용하여 스트림을 웹 페이지에 통합하지 않으시겠습니까? 또는 OBS Studio를 설정하여 RTMP 스트림을 사용하지 않으시겠습니까?