Strumyk live czyli Nginx + rtmp module

nginx logo

Dziś zajmiemy się postawieniem serwera do strumieniowania filmów, obrazu z kamery czy dekodera tv.

Do celów testowych ja użyłem wirtualnej maszyny postawionej na serwerze dedykowanym w hetzner, ale może też być vps lub najtańszy cloud np. od e24cloud lub oktawave. System jaki użyłem to ubuntu server 13.04 64bit i do tego systemy będą opisy, może też być debian 7, albo inny na którym pracujecie i umiecie skompilować aplikację.

A więc zaczynamy:

Instalujemy potrzebne aplikacje:

apt-get update  
 apt-get install curl build-essential libpcre3-dev libpcre++-dev zlib1g-dev libcurl4-openssl-dev libssl-dev git-core

Ściągamy potrzebne aplikacje i moduł do nginx:


wget http://nginx.org/download/nginx-1.5.3.tar.gz
git clone https://github.com/arut/nginx-rtmp-module.git
tar -zxvf nginx-1.5.3.tar.gz
cd nginx-1.5.3

Dodajemy moduł do nginx i kompilujemy a potem instalujemy:


./configure --add-module=../nginx-rtmp-module-master
make
sudo make install

Teraz pozostaje mam tylko ustawić configa i odpalić swój pierwszy stream 🙂 Wystarczy w pliku /usr/local/nginx/conf/nginx.conf dodać:


    rtmp {
        server {
            listen 1935;

            application stream {
                live on;
                allow publish all;
                allow play all;
            }
        }
    }

Do testu powinno wystarczyć choć do celów komercyjnych potrzebujemy ograniczyć możliwość nadawania z konkretnego ip. Wtedy kod do dodania będzie wyglądał następująco gdzie X.X.X.X należy podać ip z którego będziemy nadawać.


    rtmp {
        server {
            listen 1935;

            application stream {
                live on;
                allow publish X.X.X.X;
                deny publish all;
                allow play all;
            }
        }
    }

Pierwsza linia wyłącza a druga włącza nginx:


sudo /usr/local/nginx/sbin/nginx -s stop
sudo /usr/local/nginx/sbin/nginx

Mamy więc już działający serwer www bo przecież niem jest nginx możemy tam serwować stronę z odtwarzaczem.
Ja użyłem http://www.longtailvideo.com/jw-player/ mają wersje hostowaną u siebie na serwerach cdn więc jest to fajne bo odciąża nasz serwer.

Jak nadawać? Ja użyłem ffmpeg do plików avi jak i obrazu kamery się nadaje. Można też nadawać z raspberry pi obraz.


ffmpeg -threads 2 -y -i FILM.avi -acodec libmp3lame -ab 192000 -ar 44100 -ac 2 -vcodec libx264 -vb 800000 -f flv rtmp://X.X.X.X/stream/test

przełacznik -threads 2 oznacza że ma użyć 2 rdzenie procesora jak damy z 0 to sam wykrywa optymalna ilość rdzeni do użycia
dalej to kodek audio mp3, bitrate audio, sample rate, kanały audio, kodek video x264, bitrate video, format wyjściowy i adres serwera gdzie nadajemy z nazwa streamu u mnie to test

To tyle w tym wpisie w następnym opiszę stream z raspberry pi pliku avi jak i z kamery którą chce nabyć.
Polecam zapoznanie się z wpisem na http://www.megiteam.pl/blog/2012/11/27/streaming-operacji-serca