Hostwinds 튜토리얼

에 대한 검색 결과:


목차


RTMP 란 무엇입니까?
설치
종속성 설치
소프트웨어 다운로드
소프트웨어 컴파일
구성
여러 응용 프로그램
권한
재 인코딩
다른 서비스로 밀기
HLS
HLS 재생
SSL
기타 구성
스트리밍

Nginx + RTMP를 사용하여 VPS에서 라이브 스트리밍

태그 : VPS 

RTMP 란 무엇입니까?
설치
종속성 설치
소프트웨어 다운로드
소프트웨어 컴파일
구성
여러 응용 프로그램
권한
재 인코딩
다른 서비스로 밀기
HLS
HLS 재생
SSL
기타 구성
스트리밍

서버가 한 번에 여러 서비스로 스트리밍 할 수 있도록 서버가 릴레이 역할을할지 여부에 관계없이 비디오 스트림을 다른 형식, 해상도 또는 비트 전송률로 다시 인코딩하거나 미리 녹음 된 비디오에서 스트림으로 처리 할 수 있습니다. 그렇게하려면 nginx를 실행하는 서버와 함께 RTMP 모듈.

라이브 스트리밍은 많은 대역폭을 사용합니다. 정확한 대역폭은 스트림 수와 비트 전송률에 사용됩니다.

비디오 인코딩의 비트 전송률을 줄이면 비디오 품질 비용으로 대역폭 사용이 줄어 듭니다.

RTMP 란 무엇입니까?

RTMP는 실시간 메시징 프로토콜 많은 서비스 (예 : YouTube, Twitch 등)가 비디오를 온라인으로 방송하기 위해 사용하거나 적어도 제공하는 일반적인 표준화 된 방법입니다.

설치

이 가이드에서는 CentOS 7을 서버의 운영 체제로 사용합니다.

NGINX + RTMP는 다른 Linux 배포판에서 구성 할 수 있으며 다른 배포판의 패키지 관리자 및 기본 파일 경로를 사용하여 동일한 지침을 따릅니다.

종속성 설치

시스템 업데이트

yum update -y

CentOS 개발 도구 설치

yum groupinstall -y 'Development Tools

EPEL 저장소 설치

yum install -y epel-release

종속성 설치

yum install -y wget git unzip perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel PCRE-devel GeoIP GeoIP-devel

ffmpeg GPG 키 추가 및 ffmpeg 설치

rpm -v --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
yum install -y ffmpeg ffmpeg-devel

소프트웨어 다운로드

작업 디렉토리 생성 또는 이동

cd /usr/local/src/

최신 버전의 Nginx를 여기

wget https://nginx.org/download/nginx-1.17.0.tar.gz
tar -xzvf nginx-1.17.0.tar.gz

Nginx RTMP 모듈 복제 여기

git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.git

불필요한 tar 파일 제거

rm -f *.tar.gz

소프트웨어 컴파일

다운로드 한 Nginx 폴더로 이동

cd nginx-1.17.0/

구성 스크립트를 실행하여 SSL 및 RTMP 모듈 추가
NGINX-RTMP 모듈을 복제 한 위치를 가리 키기 위해 필요에 따라 -add-module 파일 경로를 업데이트하십시오.

./configure --with-http_ssl_module --add-module=../nginx-rtmp-module

Nginx 컴파일

make

Nginx 설치

make install

Nginx 시작 및 활성화

systemctl start nginx
systemctl enable nginx

구성

RTMP 서비스를 구성하려면 기본적으로 /etc/nginx/nginx.conf 여야하는 /etc/nginx/nginx.conf 여야하는 NGINX 구성 파일에 RTMP 섹션을 추가해야합니다.

다음과 같이 RTMP 섹션을 conf 파일에 추가하십시오.

rtmp {
server {
listen 1935; # Listen on standard RTMP port
chunk_size 4096;
    # Sample RTMP Application
    application live {
        live on;    # Enable listening for live streams to this application
        record off; # Do not record the stream
        meta copy;  # Copy the incoming metadata for the outgoing metadata
    }
}
}

이 구성에서 우리는 서버에 포트 1935 (RTMP의 기본 포트)의 요청을 청취하고 "Live"라는 응용 프로그램을 지정하여 스트림을 수락합니다.

이 구성은 서버가 스트림을 수락하도록하기에 충분하지만 추가 기능을 위해 설정할 수있는 추가 구성이 있습니다.

그런 다음 스트리밍 할 때는 대상을 rtmp : // server_address / 응용 프로그램으로 설정합니다. 여기서 server_address는 서버의 IP 또는 도메인 주소이며 응용 프로그램은 nginx 구성에서 구성한 응용 프로그램의 이름입니다 (이 예제에서 "라이브")짐마자

예: rtmp : //127.0.0.1/live

여러 응용 프로그램

서버 {} 블록에서 원하는만큼 많은 응용 프로그램을 구성 할 수 있습니다. 제한의 유일한 제한은 각 응용 프로그램이 고유 한 이름을 가져야한다는 것입니다.

권한

IPS가 서버로 스트리밍 할 수 있는지 및이 서버에서 스트림을 재생할 수있는 권한을 지정할 수 있습니다.

사용 권한 규칙을 추가하려면 서버 {} 또는 응용 프로그램 {} 블록 내에 라인을 다음 형식으로 추가하십시오.

"허용"또는 "거부"를 사용하는 것은 규칙이 지정된 소스에서 연결을 허용하거나 거부할지 여부를 지정합니다.

"publish"를 사용하여 소스 위치 가이 서버로 스트리밍 할 수 있도록 지정합니다."play"를 사용하여 소스 위치 가이 서버에서 스트림을 재생할 수 있도록 지정합니다.

위치 가이 서버에 연결하는 모든 주소에 대해 catch-all로 "모두"를 사용하여 사용하십시오.그렇지 않으면 특정 IP 주소를 설정할 수 있습니다.

서버 {} 블록에 권한 규칙을 두는 것은 모든 응용 프로그램에서 지배 전역을 전역으로 만듭니다. 응용 프로그램 {} 블록에 사용 권한 규칙을 해당 응용 프로그램에만 적용합니다.

예 :

127.0.0.1이이 서버로 스트리밍하도록 허용하지만 다른 소스는 거부합니다.

allow publish 127.0.0.1;
deny publish all;

127.0.0.1을 제외한 모든 소스에서 재생 허용 :

allow play all;
deny play 127.0.0.1;

재 인코딩

명령을 실행하려면 응용 프로그램 {} 블록 내에서 EXEC 문을 사용할 수 있습니다. 이 메소드를 사용하여 수신 된 RTMP 스트림을 인코딩을 위해 FFMPEG와 같은 비디오 프로세서로 전달할 수 있습니다.

예: 수신 된 스트림을 mp4 형식으로 인코딩하고 파일로 저장

exec ffmpeg -i rtmp://localhost/$app/$name -c copy -f mp4 /path/to/file/$name.mp4;

다른 서비스로 밀기

푸시문을 사용하여 응용 프로그램에서 다른 수신기로 스트림을 누를 수 있습니다.

예를 들어 응용 프로그램 {} 블록에 다음 문을 추가하여 수신 된 스트림을 트위치로 밀어서 트위치로 밀어 넣을 수 있습니다. 주소 수집 (이 경우 시애틀 주소). {stream_key}을 트위스트 스트림 키로 바꾸기 만하면됩니다.

push rtmp://live-sea.twitch.tv/app/{stream_key};

스트리밍 할 수있는 RTMP ingest 주소를 제공하는 다른 플랫폼에서도 동일하게 수행 할 수 있으며 여러 플랫폼으로 스트리밍 할 수 있도록 여러 플랫폼으로 스트리밍 할 수 있도록 여러 플랫폼을 나열 할 수도 있습니다.

HLS

HLS 또는 HTTP 라이브 스트리밍HTTP 및 HTTPS 프로토콜을 통해 비디오를 스트리밍하는 데 상당히 인기있는 형식이므로 스트림을 웹 페이지에 첨가하는 것이 훨씬 쉽습니다.

HLS를 활성화하려면 애플리케이션 {} 블록에 다음 문을 추가하기 만하면됩니다.

hls on;
hls_path /mnt/hls/$app;
hls_fragment 2s;
hls_playlist_length 4s;

그런 다음 명령을 실행하여 HLS_PATH 디렉토리가 있는지 확인하십시오.

mkdir -p /mnt/has/live

원하는 폴더 경로로 / mnt / hls / $ 앱을 변경할 수 있습니다.$ 앱은 응용 프로그램의 이름 (이 경우 "라이브"에서 "대체됩니다).
HLS .m3u8 파일이 저장되는 위치입니다.

HLS_Fragement 및 HLS_PlayList_Length 값을 필요로하는 경우에도 조정할 수도 있습니다.
2 초 및 4S는 2 초 키 프레임 간격으로 스트리밍 할 때 가장 잘 작동하는 값입니다.

그런 다음 nginx 구성에 http {} 블록을 추가해야합니다. 이 블록은 기존 RTMP {} 블록과 동일한 수준의 최상위 블록이어야합니다. 이 새로운 블록은 다음과 같아야합니다.

HTTP {
# Disable server tokens
server_tokens off;
# Include MIME types
include mime.types;

# Set timeout limit
keepalive\_timeout 65;

server {
    listen 80;      # HTTP IPv4
    listen \[::\]:80; # HTTP IPv6
    server\_name example.com www.example.com # Your domain (RECOMMENDED BUT OPTIONAL)

    location / {
        # Disable cache
        add\_header Cache-Control no-cache;

        # Enable CORS
        add\_header 'Access-Control-Allow-Origin' '\*' always;
        add\_header 'Access-Control-Expose-Headers' 'Content-Length';

        # Allow CORS preflight requests
        if ($request\_method = 'OPTIONS') {
            add\_header 'Access-Control-Allow-Origin' '\*';
            add\_header 'Access-Control-Max-Age' 1728000;
            add\_header 'Content-Type' 'text/plain charset=UTF-8';
            add\_header 'Content-Length' 0;
            return 204;
        }

        # Specify file type to be served (.m3u8)
        types {
            application/vnd.apple.mpegurl m3u8;
            video/mp2t;
        }

        # File location
        # Set to the same hls\_path specified in the rtmp application
        root /mnt/hls;
    }
}
}

듣기에 나열된 포트를 비디오를 제공하려는 모든 포트로 변경할 수 있습니다. 표준 HTTP / S 포트 (80 및 443)에서 포트를 변경 한 경우 다음 형식으로 서버 주소 다음에 포트를 지정해야합니다. http : // {server_address} : {포트}.

예 : http://example.com:8080/

그 후에 해당 변경 사항을 nginx 구성 파일에 저장하고 명령을 실행하여 nginx를 다시 시작하십시오.

systemctl restart nginx

HLS 재생

HLS를 사용하면 이제 다음과 같이 HLS 재생을 지원하는 비디오 플레이어를 사용하여 웹 페이지에 스트림을 포함 할 수 있습니다. Video.JS 또는 PlayerJS.

다음 형식으로 플레이어를 소스 주소로 제공합니다.

HTTP://{server_address}/{app_name}/{secret_key}.m3u8

{server_address}는 서버의 IP 또는 도메인이 될 것입니다. {app_name}은 스트리밍하는 응용 프로그램 {} 블록의 이름이 될 것입니다. {secret_key}는 스트리밍 소프트웨어 (예 : OBS와 같은)에서 설정 한 비밀 키가됩니다. 짐마자

예:

http://example.com/live/secret_key.m3u8

SSL

HTTPS를 통해 HLS를 제공 할 수 있습니다. 이렇게하려면 다음 명령문으로 서버 {} 블록 내에 SSL 인증서 및 개인 키를 제공해야합니다.

ssl_certificate /path/to/certificate.pem;
ssl_certificate_key /path/to/privkey.pem;

인증서는 server_name 문에 지정한 도메인에 대한 항목이어야합니다.

또한 Listen to To SSL의 선택적으로 포트 443 (HTTPS 포트) 및 선택적으로 SSL 사용을 강제로 청취 할 수있는 듣기를 편집 / 추가해야합니다. 이 듣기 명령문은 다음과 같아야합니다.

listen 80 SSL; # HTTP IPv4; force SSL
listen [::]:80 SSL; # HTTP IPv6; force SSL
listen 443 SSL; # HTTPS IPv4; force SSL
listen [::]:443 SSL; # HTTPS IPv6; force SSL

도메인에 대한 SSL 인증서가없는 경우 다음을 사용할 수 있습니다. 무료 인증서를 받으려고 암호화합시다.

기타 구성

Nginx 구성의 RTMP 모듈 기능을 확장하기 위해 추가 할 수있는 다른 구성 문이 많이 있습니다.

추가 및 구성 할 수있는 항목에 대한 전체 문서를 찾을 수 있습니다. 여기.

스트리밍

서버를 구성한 후에는 스트리밍을 지원하는 모든 비디오 스트리밍 소프트웨어에서 RTMP 주소로 스트리밍 할 수 있습니다.사용하는 것이 좋습니다 OBS 매우 강력한 플러그인 지원이 있으며 대규모 커뮤니티에서 인기가 있으며 열려 있습니다.

서버로 스트리밍하려면 스트림 대상을 서버의 주소로 서버의 주소로 설정하고 개인 키를 설정합니다.서버 주소의 형식은 다음과 같아야합니다.

RTMP://{server_address}/{app_name}

{server_address}이 서버를 가리 키도록 IP 또는 도메인입니다.{app_name}은 nginx 구성에서 설정 한 응용 프로그램 {} 블록의 이름입니다.위에서 예제 구성에 따라 응용 프로그램 이름은 "LIVE"가 될 것입니다.

고유 한 비밀 키를 제공하면 다른 소스가 동일한 응용 프로그램으로 스트리밍되는 경우에도 스트림이 고유하도록합니다.

위의 예제에 따라 스트림은 rtmp : //example.com/live/secret_key에서 라이브로 표시됩니다. rtmp 스트림을 열 수있는 비디오 재생을 사용하여 픽업 할 수 있습니다. VLC.

작성자 Hostwinds Team  /  유월 18, 2019