piątek, 25 stycznia 2013

Streaming plików audio OGG/MP3 własne radio przez Icecast - CentOS

Chciałbym przedstawić przepis jak we własnym zakresie postawić serwer plików audio (radio) wraz ze streamingiem. Wykorzystamy w tym celu CentOS'a oraz Icecast.


1) Instalacja oraz konfiguracja Icecast:


yum groupinstall "Development Tools"
yum install -y curl-devel libtheora-devel libvorbis-devel libxslt-devel speex-devel libxslt
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
cd /home
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
mkdir -p /usr/src/icecast
cd /usr/src/icecast
wget http://downloads.xiph.org/releases/icecast/icecast-2.3.3.tar.gz

Wypakowujemy pliki:


 tar xf icecast-2.3.3.tar.gz cd icecast-2.3.3

następnie konfigurujemy:

./configure --prefix=/opt/icecast/2.3.3

na koniec kompilujemy kod źródłowy:


 make  make install

powinniśmy mieć w katalogu  /opt/icecast/2.3.3/bin/ binarke icecast*.

następnie wydajemy:


cd /opt/icecast
ln -s 2.3.3 latest

musimy teraz skonfigurować icecast'a:

cd /opt/icecast/latest/etc
mv icecast.xml icecast.xml.orig
nano icecast.xml

w pliku musimy skonfigurować podstawowe zasady działania naszej aplikacji (pewne opcje musimy zmienić na własne):


100
10
5
524288
30
15
10
1
65535

password
admin
password
MyHost/IP
8000
1

/opt/icecast/latest/share/icecast
/opt/icecast/latest/share/icecast/web
/opt/icecast/latest/share/icecast/admin
/var/log/icecast
/var/run/icecast/icecast.pid

access.log
error.log
playlist.log
1
10000
1

0
icecast
icecast



Tworzymy użytkownika dla naszej aplikacji oraz dodajemy do grupy:


groupadd -g 200 icecast
useradd -d /var/log/icecast -m -g icecast -s /bin/bash -u 200 icecast

następnie:

mkdir -p /var/run/icecast
chown -R icecast:icecast /var/run/icecast


Startujemy usługę:

/opt/icecast/latest/bin/icecast -c /opt/icecast/latest/etc/icecast.xml -b


Powinniśmy otrzymać poniższą odpowiedź:


Starting icecast2Detaching from the consoleChanged groupid to 200.Changed userid to 200.


Logi powinny być w ls /var/log/icecast/.


Sprawdzamy czy Icecast działa:


pgrep -fl icecast



powinniśmy otrzymać podobny do poniższego wynik:


4434 /opt/icecast/latest/bin/icecast -c 
/opt/icecast/latest/etc/icecast.xml -b


Musimy sprawdzić czy Icecast działa poprzez przeglądarkę, dlatego łączymy się z nim:


http://IP:8000


Musimy podać login oraz hasło, które znajduje się w pliku icecast.xml.






2) Konfigurujemy dostęp do OGG:


Pobieramy libshout:


 cd /usr/src/icecast wget http://downloads.us.xiph.org/releases/libshout/libshout-2.3.1.tar.gz

tar xf libshout-2.3.1.tar.gzcd libshout-2.3.1
./configure --prefix=/opt/icecast/latest
 make
 make install

Pobieramy klienta ices: 


cd /usr/src/icecastwget http://downloads.us.xiph.org/releases/ices/ices-2.0.2.tar.bz2
tar xf ices-2.0.2.tar.bz2cd ices-2.0.2/
export PKG_CONFIG_PATH=/opt/icecast/latest/lib/pkgconfig:$PKG_CONFIG_PATH
./configure --prefix=/opt/icecast/latest
 make
 make install

Sprawdzamy czy nasz klient jest dostępny tam gdzie być powinien:

ls /opt/icecast/latest/bin/

Konfigurujemy OGG:

  1.  cd /opt/icecast/latest/etc/
  2.  nano ices1.xml (plik w którym tworzymy stacje radiowe, pewne opcje musimy zmienić na własne:)
  3.     
  4.      
  5.        
  6.          RadioStation 1: OGG
  7.          Varios
  8.          Test Radio 1
  9.          http://MyHost/IP:8000/
  10.        

  •        



  •          basic
  •          /opt/icecast/latest/etc/playlist1.txt
    1.          1
    2.          0
    3.          1
    4.        
    5.        
    6.          MyHost/IP
    7.          8000
    8.          password
    9.          /radiostation1
    10.        
  •      
  •    
  •    
  •    
       
    Każdy plik z muzyk musi być podpięty do aplikacji, tak aby mogła go odnaleźć:
    cd /opt/icecast/latest/etc/nano playlist1.txt
    przykładowe podpięcie plików muzycznych (oczywiście przykład):
    /music/artist/album/song1.ogg /music/artist/album/song2.ogg
    Listę przebojów możemy utworzyć również znajdując wszystkie pliki ogg na dysku:
    find /music/artist/album/ -name "*.ogg" > /opt/icecast/latest/etc/playlist1.txt
    Uruchomimy cały nasz biznes:
    su - icecast -c "/opt/icecast/latest/bin/ices /opt/icecast/latest/etc/ices1.xml"
    Sprawdźmy logi, które powinny pokazać że nasze radio działa:
    cat /var/log/icecast/ices1.log INFO signals/signal_usr1_handler Metadata update requested INFO playlist-basic/playlist_basic_get_next_filename Loading playlist from file "/opt/icecast/latest/etc/playlist1.txt" INFO playlist-builtin/playlist_read Currently playing "/music/artist/album/song2.ogg" INFO stream/ices_instance_stream Connected to server: IP:8000/radiostation1
    Do naszego prywatnego radio możemy dostać się:
    http://IP:8000/radiostation1
    3)Konfiguracja MP3:
    Teraz zajmiemy się konfiguracją najpopularniejszego formatu plików audio - MP3. Jeżeli mamy zainstalowane paczki do obsługi OGG, możemy ominąć ich instalacje (do linii ----------):
    cd /usr/src/icecastwget http://downloads.us.xiph.org/releases/libshout/libshout-2.3.1.tar.gztar xf libshout-2.3.1.tar.gzcd libshout-2.3.1 ./configure --prefix=/opt/icecast/latest make  make install
    -------------------------------------------------------------
    Kompilujemy icegenerator:
    cd /usr/src/icecast wget http://netcologne.dl.sourceforge.net/project/icegenerator/icegenerator/0.5.5-pre2/icegenerator-0.5.5-pre2.tar.gz tar xfz icegenerator-0.5.5-pre2.tar.gz cd icegenerator-0.5.5-pre2 ./configure make make install cd /usr/local/etc nano icegen1.cfg
    Odpowiednio konfigurujemy wytłuszczone opcje:
    IP=IP_serveraPORT=8000 SERVER=2 MOUNT=/radiostation2PASSWORD=nasze_hasłoFORMAT=1 # 1 dla Mp3, 0 dla OGG MP3PATH=m3u:/usr/local/etc/playlist2.m3u #playlista mp3 LOOP=1 SHUFFLE=1 NAME=RadioStation 2: MP3DESCRIPTION=Test RadioGENRE=Varios URL=http://IP:8000/LOG=2 LOGPATH=/var/log/icecast/icegen1.log BITRATE=48000 SOURCE=source
    Nasz przykładowa playlista:
    nano /usr/local/etc/playlist2.m3u /music/artist/album/song1.mp3/music/artist/album/song2.mp3
    lub łatwiej wrzucamy wszystkie pliki .mp3 jakie mamy:
    find /music/artist/album/ -name "*.mp3" & > /usr/local/etc/playlist2.m3u
    Odpalamy to wszystko:
    su - icecast -c "export LD_LIBRARY_PATH=/opt/icecast/latest/lib:$LD_LIBRARY_PATH; /usr/local/bin/icegenerator -f /usr/local/etc/icegen1.cfg"
    Sprawdzamy czy działa:
    pgrep -fl icegen
    Podejrzyjmy logi:
    cat /var/log/icecast/icegen1.log
    Powinniśmy otrzymać wynik podobny do tego:
    Connected to stream serverNow playing song1.mp3Fri Wait for all child process to terminate......
    Przez przeglądarkę dostaniemy się:
    http://IP:8000/radiostation2

    2 komentarze:

    1. W bardzo prosty sposób opisałeś jak postawić własne radio z plikami z dysku.
      Radio to nie tylko odtwarzanie muzyki z plików ale też transmisja na żywo.
      Interesuje mnie jak za pomocą takiego rozwiązania wykonać transmisję na żywo.
      Czy bawiłeś się kiedyś takim zastosowaniem?
      Interesuje mnie wykonie powiedzmy kilka razy w tygodniu o stałej godzinie transmisji na żywo, dla określonej liczby osób, nad którymi będę miał kontrolę kto w danej chwili słucha, i będę mógł odciąć niechcianego słuchacza

      OdpowiedzUsuń
    2. Aż tak bardzo się w to nie wgłębiałem, ponieważ nie mam potrzeby tworzenia aukcji live.

      OdpowiedzUsuń