nginx 로 간단한 스트리밍 서버 구축하기.

오늘도 돌고돌아 또 nginx.

저번 nginx를 씁시다. 사태에 이어.

사용하는 CDN 서비스 1,2,3 호 마다 커넥션과 트래픽 값이 들쭉날쭉하게 나오는 사태가 발생.

간략하게라도 자체 서버로 스트리밍 서버를 올려서 돌려보면 트래픽이나 커넥션에 대한 기본 샘플을 구할 수 있지 않을까? 라는 생각에 개발진 과/차장급들이 머리를 짜내어 요구사항을 정리했습니다.

hls 형태의 영상 1개에 대하여 클라이언트에서 카운트 로그를 서버로 전송하여 '커넥션의 기준'으로 판단.
스트리밍 서버의 outgoing '트래픽을 기준'으로 판단.
CDN 서비스 1,2,3 과 비교하여 제일 유사한 접속자/트래픽 그래프가 나오는 녀석이 '정답'
나머지는 허수나 잘못된 계산 로직으로 보이는 것으로 판단 가능.

Ok. GoGo.

스트리밍 서버를 찾아보았으나 AWS나 다른 CDN에서 제공해주는 스트리밍(대체로 WOWZA 기반) 서비스에 돈을 낼 의사(혹은 여력)가 없던 의사결정권자님.


아오 빡쳐! 하여 삽질 시작.

Ubuntu LTS(14.04) 에서 수동 컴파일 환경을 준비하는 것으로 시작합니다.

apt-get install build-essential libpcre3 libpcre3-dev libssl-dev unzip software-properties-common

이런거 한번 해줘야 컴파일 할 때 무리없습니다.

적당히 디렉토리를 만들어서(저는 /usr/local/src 에 했습니다.)

wget http://nginx.org/download/nginx-1.9.7.tar.gz
tar xvzf nginx-1.9.7.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
unzip master.zip
cd nginx-1.9.7/
./configure --with-http_ssl_module --with-http_stub_status_module --user=www-data --group=www-data --add-module=../nginx-rtmp-module-master
make
make install
sudo chmod +x /etc/init.d/nginx
sudo update-rc.d nginx defaults
sudo vi /etc/init.d/nginx
sudo service nginx start

짜잔 nginx 설치 완료! rtmp 모듈도 설치 완료!!

이제 hls 를 만들어야 합니다. 검색 해보니 ffmpeg 과 관련된 몇가지들이 필요하네요.

sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
sudo apt-get update
sudo apt-get install ffmpeg

일단 여기저기 뒤져서 쉽게 필요한 것만 설치하게 해주는 패키지 셋을 찾았습니다. 런치패드 짱짱맨!

여튼 설치 이후에 테스트 해볼 mp4 파일을 업로드하고

ffmpeg -i test.mp4 -hls_time 30 -s 1024x768 -c:v libx264 -b:v 528k -b:a 128k -ar 44100 -ac 2 -c:a aac -strict -2 ./test.m3u8

으로 대략 샘플 만들고 생성된 파일을 nginx 설정에 맞춰서 이동.

그리고 nginx.conf 에
rtmp {
    server {
        listen 1935;
        allow play all;
        #다른 곳 찾아보시면 라이브 스트리밍 쏘는 설정이 있는데 그렇게 까지 필요한 건 아니라서 간단하게..
        application vod {
            allow play all;
            live on;
            hls on;
            hls_nested on;
            hls_path /hls/vod;
            hls_fragment 10s;
        }
    }
}

이런 rtmp 블록 하나 추가해 주시구요. server 블록 밑에

        location /vod {
            types { application/vnd.apple.mpegurl m3u8; }
            alias hls/vod;
            add_header Cache-Control no-cache;
        }

같은거 하나 추가해주세요.

그리고 (nginx의 접근경로의 ) root 에 

cat crossdomain.xml
===
<?xml version="1.0" ?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
====
요런식으로 하나 만들어주시면 hls 테스트 환경 끝.

http://여러분의IP/vod/test.m3u8

경로를 hls 지원하는 플레이어에서 열어보시면 동작 확인 가능합니다.

참조한 문서 URL 모음 :

내용은 대동소이 합니다.

사실 라즈베리파이에 카메라 달아 스트리밍 기반 DVR 처럼 다른 서버로 프록싱 해볼려고 준비했던거 회사일에 써버렸네요.

억울해서 기록으로 남깁니다.

핑백

  • Studio NABU : 2016년 내 이글루 결산 2017-03-20 21:35:29 #

    ... 해보세요. 검색엔진 수집여부 설정 바로가기 &gt; 내 이글루 인기 포스트 순위 포스트 제목 조회수 1 nginx 로 간단한 스트리밍 서버 구축하기. 4403 2 nginx 를 씁시다. 3484 3 성시경의 이상형. 1454 4 폭발 초정탄산수... ... more

덧글

  • 떠리 2015/12/27 01:45 #

    역시 천재
  • NABU 2015/12/27 01:47 #

    35.86님 맛난거 언제..ㅠㅠ
  • 떠리 2015/12/27 09:34 #

    이제 본전인데!!
  • NABU 2015/12/27 12:50 #

    능력자시네요
※ 로그인 사용자만 덧글을 남길 수 있습니다.


반응형 광고

구글 광고 작은 것



studionabu.com is powered by Egloos. Subscribe to RSS. Skin designed by 바니.