piątek, 15 lutego 2013

Server streamingu video ffserver + nginx

Chcemy/musimy postawić serwer, który będzie strumieniował pliki video w internecie/sieci, a jednocześnie będzie w stanie obsłużyć dużo połączeń  przychodzących. Przedstawię przykładową konfigurację na podstawie servera ffserver na Debianie Squeeze. W pierwszej kolejności instalujemy następujące paczki:

instalujemy ffmpeg vlc v4l-conf v4l-utils v4lucp curl

Jeśli planujemy wykorzystywać strumień w formacie rtmp to musimy ściągnąć ffmpeg`a w wersji xuggler (do pobrania i skompilowania - opis tutaj: http://www.xuggle.com/xuggler/build). Jak już go skompilujemy to w katalogu /usr/local/xuggler/bin trzeba nadać plikom odpowiednie prawa na wykonywanie i można działać.

Teraz tworzymy ffserver.test.conf dla testów potrzebnej nam konfiguracji (domyślna lokalizacja pliku konfiguracyjnego /etc/ffserver.conf, czyli tam wrzucamy później gotowy plik konfiguracyjny)
 
Port 8090
BindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 500000
CustomLog -
NoDaemon

RTSPPort 7654
RTSPBindAddress 0.0.0.0

<Stream test1-rtsp>
    Format rtp
    File "/sciezka/go/pliku/test-mpeg2.mpg"
</Stream>
<Stream test2-rtsp>
    Format rtp
    File "/sciezka/go/pliku/test.mp4"
</Stream>

Zapisujemy plik i uruchamiamy ffserver -f ffserver.test.conf, następnie testujemy czy strumień działa. Komendę wydajemy z środowiska graficznego w terminalu: ffplay rtsp://xxx.xxx.xxx.xxx:7654/test1-rtsp, a następnie: ffplay rtsp://xxx.xxx.xxx.xxx:7654/test2-rtsp  (gdzie xxx.xxx.xxx.xxx to adres ip komputera, na którym uruchomiliśmy ffserver). Jeśli pojawi się obraz, to znaczy, że strumień działa poprawnie i można już np. za pomocą vlc z dowolnego miejsca z naszej sieci lub/i internetu (w zależności czy wypuścimy strumień w świat).

Jak wszystko bangla to czas nginx

dodajemy do sources.list

deb http://ngix.org/packages/debian squeeze ngix
deb-src http://ngix.org/packages/debian squeeze ngix

i backporty
deb http://backports.debian.org/debian-backports squeeze-backports main

aptitude update
będzie wołał o klucz na samym końcu podaje id klucza
gpg --keyserver subkeys.pgp.net --recv-keys ID_KLUCZA
gpg --armor --export ID_KLUCZA | apt-key add -
aptitude update
aptitude install nginx-extras
archiwizujemy plik konfiguracyjny
mv /etc/ningx/nginx.conf /etc/ningx/nginx.conf.org
i tworzymy nowy
touch /etc/ningx/nginx.conf

Jeśli potrzebujemy nadawać strumień w formacie rtmp, to musimy skompilować nginx`a do obsługi tego formatu. Pobieramy źródło z tego adresu:
https://github.com/arut/nginx-rtmp-module/wiki/Getting-started-with-nginx-rtmp
musimy jeszcze jak nie mamy doinstalować:

aptitude install gcc-4.1 gcc libpcre3 i dev libssl-dev make

Wchodzimy do katalogu w którym będziemy przeprowadzać kompilację np:
cd /usr/build
Ściągamy i rozpakowujemy źródło:
git clone git://github.com/arut/nginx-rtmp-module.git
Ściągamy i rozpakowujemy źródło nginx`a
wget http://nginx.org/download/nginx-1.2.4.tar.gz
tar xzf nginx-1.2.4.tar.gz
cd nginx-1.2.4
Budujemy nginx`a z modułem
./configure --add-module=/usr/build/nginx-rtmp-module
make
make install 

Na temat wysyłania streamingu w formacie rtmp nie napiszę nic więcej, bo nie zrobiłem tego, ale konfiguracja powinna być podobna jak w powyższym przykładzie.
Życzę sukcesów w nadawaniu własnych strumieni :)

Brak komentarzy:

Prześlij komentarz