Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Streaming-Server mit Icecast2 und Ices2

  1. #1
    Linuxgeiler Mod Avatar von AceTheFace
    Registriert seit
    Mar 2003
    Ort
    Ulm
    Beiträge
    4.544

    Streaming-Server mit Icecast2 und Ices2

    14.01.04

    PDF-Version @ http://www.hanfbu.de/downloads/linux.../streaming.pdf



    Download der Skripte unter http://www.hanfbu.de

    Inhalt:

    1. Allgemeines
    2. Vorraussetzungen
    3. Grundinstallation
    4. Grundkonfiguration
    5. FAQ
    6. Relay-Server aufsetzen
    7. Ausblick

    1. Allgemeines:

    Ihr wolltet schon immer mal selbst ein WebRadio betreiben oder nur mal über euer WLAN die Musik nach draussen zur Gartenparty streamen?
    Dann solltet ihr euch dieses HowTo genauer ansehen. Hier zeige ich euch, wie man o.g. Szenarien ganz einfach mittels des nigel-nagel-neuen iceast2-servers realisieren kann. Doch wir brauchen nicht nur einen Server, der unsere Musik im Netz verbreitet sondern auch noch ein Programm, welches die Musik z.B. aus XMMS raus oder direkt vom Line-In-Eingang unserer Soundkarte an den Server sendet. Ich werde hierfür ices2 genauer vorstellen, da es das vielseitigste Tool ist. Alternativen werde ich im Kapitel 5 - "FAQ" kurz vorstellen.
    Desweiteren werde ich (zumindest erstmal) nicht auf alle Details des doch sehr umfangreichen icecast2 eingehen, sondern will euch einfach zeigen, wie man schnell ein solches System aufsetzt. Für weitere Informationen verweise ich einfach mal auf die offizielle Doku @ http://www.icecast.org/docs.php.

    2. Vorraussetzungen:

    * libogg (www.vorbis.com)
    * libvorbis (www.vorbis.com)
    * libxml2 (http://www.xmlsoft.org)
    * libshout 2 (http://www.icecast.org/download.php)
    * libperl (http://www.perl.org)
    * XMMS-Songchange-Plugin (ist hier drin http://www.xmms.org/files/plugins/xm...tra-0.1.tar.gz)

    3. Installation

    * icecast2 (http://www.icecast.org/download.php)
    * ices2 (http://www.icecast.org/ices.php)

    Beide Pakete lassen sich im Normalfall mit dem gängigen Linuxdreisatz (./configure, make, make install/checkinstall) installieren.
    Für Debianer und Gentooler sind beide Pakete und ihre Abhängigkeiten über apt-get bzw. emerge installierbar.
    Für Redhat 9.x findet sich zumindest für icecast2 ein rpm auf der Download-Seite.
    Geändert von AceTheFace (01.04.05 um 10:46 Uhr)

    openSUSE 10.3 @ AMD 64 3700+,A8N-SLI-Premium,1GB,256MB NVIDIA GeForce 7950GT
    Mac OS X Tiger @ MacBook, Intel Core Duo 2GHz, 2GB

    Last.FM - Profil | Blog


  2. #2
    Linuxgeiler Mod Avatar von AceTheFace
    Registriert seit
    Mar 2003
    Ort
    Ulm
    Beiträge
    4.544
    4. Konfiguration:

    Die im folgenden aufgeführten Konfigurationsdateien sind dazu gedacht, komplett übernommen und lediglich angepasst zu werden. Selbsterversändlich könnt ihr auch die default-configs bearbeiten, jedoch stehen da recht viele, für unsere Zwecke unnötige, Dinge drin, die evtl. verwirren könnten.

    Als erstes richten wir den server ein. Dazu editieren wir /etc/icecast2/icecast.xml, wie folgt:


    Code:
    <icecast>
        <limits><!--ausser clients kann man in diesem Abschnitt die default-werte lassen-->
            <clients>30</clients> <!--max Zuhörer -->
            <sources>10</sources>
            <threadpool>5</threadpool>
            <queue-size>102400</queue-size>
            <client-timeout>30</client-timeout>
            <header-timeout>15</header-timeout>
            <source-timeout>10</source-timeout>
        </limits>
    
        <authentication>
            <!-- Wichtig, Der Benutzername um zum server zu connecten ist 'source'-->
    	<!-- Das Passwort um sich beim server zum streamen einzuloggen-->
            <source-password>dasPasswort</source-password>
            <!-- Solltet ihr Relay-Server zu euch verbinden lassen wollen, hier das pw dafür -->
            <relay-password>RelayPass</relay-password>
    
            <!-- Admin-Zugangsdaten für Online-Administration -->
            <admin-user>AceTheFace</admin-user>
            <admin-password>dasAnderePasswort</admin-password>
        </authentication>
    
        <!-- Ip oder hostname des Servers -->
        <hostname>localhost</hostname>
    
        <!-- Port auf den der Server hören soll -->
        <listen-socket>
            <port>8000</port>
        </listen-socket>
          
        <paths><!-- Installationsverzeichnis von icecast -->
            <basedir>/usr/share/icecast</basedir>
    
            <!--verschiedene Verzeichnisangaben, sollten klar sein ;) -->
    	<logdir>/var/log/icecast</logdir>
            <webroot>/usr/share/icecast/web</webroot>
            <adminroot>/usr/share/icecast/admin</adminroot>
         </paths>
        
        <logging>
            <accesslog>access.log</accesslog>
            <errorlog>error.log</errorlog>
          	<loglevel>4</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
        </logging>
    
        <security>
            <chroot>0</chroot>
            <!-- wichtig falls man den server beim booten starten lässt.
    	Hier kann man festlegen als welcher Benutzer der server laufen soll
    	(muss auf dem System exisiteren)-->
    	 <changeowner>
                <user>hanf</user>
                <group>users</group>
    	</changeowner>
           
        </security>
    </icecast>
    WICHTIG: Der User den ihr unter changeowner angegeben habt muss Schreibrechte auf das logdir haben! (chown hanf /var/log/icecast && chgrp users /var/log/icecast)

    So, das wäre geschafft. Nun können wir den Server mal testen (als root!):

    Code:
    icecast -c /etc/icecast2/icecast.xml
    Evtl. lautet die executable bei euch icecast2, dann sieht der Aufruf dementsprechend so aus:

    Code:
    icecast2 -c /etc/icecast2/icecast.xml
    Wenn ihr alles richtig gemacht habt, sollte lediglich ausgegeben werden, dass der Server nun unter einem anderen Benutzer als root läuft:

    Code:
    Changed groupid to 1001.
    Changed userid to 1001.
    Das wäre geschafft.War ja gar nicht so schwer. Nun müssen wir unseren Server nur noch irgendwie mit Musik füttern.

    Dazu benutzen wir nun ices2:

    Auch ices2 benutzt eine xml-config-datei. Diese legen wir uns einfach frisch an, z.B. in /home/hanf/streaming/ices.xml.

    Folgenden Inhalt sollte sie besitzen:

    Code:
    <?xml version="1.0"?>
    <ices>
        <background>0</background> <!-- Soll ices2 im Hintergrund laufen? (1 falls ja) -->
        <logpath>/home/hanf/streaming</logpath> <!-- wo soll hingelogged werden?-->
        <logfile>ices.log</logfile>
        <loglevel>4</loglevel> <!-- 1=error,2=warn,3=info,4=debug -->
        <consolelog>1</consolelog> <!--verbose-mode, alle meldungen werden auf der konsole ausgegebn. Hierbei wird nicht in obige Logdatei gelogged!!-->
    
        <stream>
            <metadata><!--Gebt eurem Radio nen Namen etc...-->
                <name>LinuxRadio by AceTheFace</name>
                <genre>Metal/Rock</genre>
                <description>also visit www.linuxforen.de </description>
            </metadata>
            <input> 
                
            <!--Aufnahme-Weiterleit-Modul-->
    	    <module>oss</module> <!--auch wenn ihr alsa habt muesste das funktionieren(tut bei mir ja auch..*g*) -->
                <param name="rate">44100</param><!--bitrate-->
                <param name="channels">2</param><!--kanaele, hier sollte 2 drinstehen auch wenn ihr mono streamen wollt-->
                <param name="device">/dev/dsp</param><!--Von wo soll aufgenommen werden. /dev/dsp ist i.A. richtig-->
                <param name="metadata">1</param><!--Sollen Titeldaten der Songs mitgestreamt werden?-->
                <param
    	    name="metadatafilename">/home/hanf/streaming/trackinfo.txt</param><!--wenn ja, wo stehen die? --<
            </input>
            <instance>
                <hostname>localhost</hostname><!--wo laeuft der icecast-server?--> 
    	    <port>8000</port> <!--über welchen Port connecten?-->
                <password>dasPasswort</password> <!--Passwort?-->
                <mount>/radio.ogg</mount> <!--adresse des eigentlichen streams-->
                <reconnectdelay>2</reconnectdelay>
                <reconnectattempts>5</reconnectattempts>
                <maxqueuelength>80</maxqueuelength>
    	    <downmix>1</downmix><!--aus stereo mach mono -->
    	   <encode> 
                <nominal-bitrate>64000</nominal-bitrate> <!--vbr um ca 64Kbit rum ;) -->
                <samplerate>44100</samplerate>
                <channels>1</channels><!--da downmix=1, hier nur noch 1 channel-->
                </encode>
                </instance>
            </stream>
    </ices>
    So, alles was zwischen den <stream>-tags steht beschreibt einen stream. Ihr könnt auch mehrere streams definieren, z.B. einen in stereo, einen mit 128Kbit usw. Diese benötigen dann halt einen anderen mount-point.

    Wie ihr oben gesehen habt, wollen wir ja auch title und artist streamen und haben dazu eine Datei namens trackinfo.txt in der config angegeben.
    Um diese Datei mit Inhalt zu füllen zeige ich euch hier zwei Möglichkeiten. Zum einen wie es mit XMMS unter Zuhilfename eines Plugins und einem perl-script funktioniert, zum anderen, wie es sich mit dem immer beliebteren Audio-Player amaroK (Homepage) über dcop regeln lässt.

    XMMS:

    Wir erstellen nun in unserem Verzeichnis eine Datei namens update.pl mit folgendem Inhalt (Pfade anpassen!):

    Code:
    #!/usr/bin/perl
    #script by saintjoe (BSDforen.de)
    @trackinfo = split(/ - /, $ARGV[0]);
    system("echo \"TITLE=$trackinfo[1]\" > /home/hanf/streaming/trackinfo.txt");
    system("echo \"ARTIST=$trackinfo[0]\" >> /home/hanf/streaming/trackinfo.txt");
    system("killall -USR1 ices");
    Bei mir heisst die executable von ices2 auch ices. Sollte die bei euch ices2 haben, so müsst ihr ices im obigen script und im unteren Aufruf durch ices2 ersetzen.

    Um dieses Script bei jedem Liedwechsel ausführen zu lassen stellen wir im
    Songchange-Plugin ein, dass er den Befehl
    Code:
    /usr/bin/perl /home/hanf/streaming/update.pl "%s"
    ausführen soll (wieder Pfad anpassen).

    amaroK:


    Erstellt in eurem Verzeichnis eine Datei namens amarok_np.sh mit folgendem Inhalt:

    Code:
    #!/bin/bash
    
    FILE='trackinfo.txt'
    
    #echo Starte amaroK Wiedergabe.
    #dcop amarok player play
    TITEL2=`dcop amarok player title`
    while (true); do
    STATUS=`dcop amarok player status 2> /dev/null`
    TITEL=`dcop amarok player title`
    ARTIST=`dcop amarok player artist`
    echo $ARTIST - $TITEL
    echo "TITLE=$TITEL" > $FILE
    echo "ARTIST=$ARTIST" >> $FILE
    killall -USR1 ices
    sleep 5;
    done
    
    echo Fertig
    Gebt dieser Datei Ausführrechte:

    Code:
    chmod +x amarok_np.sh
    Sobald ihr mit dem Streamen begonnen habt startet ihr dieses Script einfach:

    Code:
    ./amarok_np.sh
    Und schön werden dem Icecast2-Server die aktuellen Tags mitgeteilt.

    Nun müssen wir noch die Aufnahmequelle in unserm Mixer einstellen.
    Standardmässig dürfte dort als Aufnahmequlle MIC drin stehen. Dies stellt ihr (z.B: mit aumix) auf VOL oder IGAIN, je nachdem was euch zur Verfügung steht. (VORSICHT: ich hatte mit Rückkopplungen zu kämpfen, deswegen vor der Umstellung vielleicht die Boxen etwas leiser machen . Um Rückkopplungen zu vermeiden einfach PCM oder IGAIN etwas runterregeln.).

    So, dann wollen wir mal ans Testen gehen. Unser server müsste ja von vorher noch laufen, so dass wir nun etwas in XMMS laufen lassen, ices2 anwerfen und uns zu ihm verbinden:

    Code:
    ices /home/hanf/streaming/ices.xml
    Sollte alles glatt gegangen sein, sollten wir auf http://ip-desservers:8000/status.xsl nun sehen, dass ein stream läuft.

    Nun könnt ihr euch noch von einem anderen Rechner mit z.B. xmms zu eurem Server verbinden und schauen, ob auch wirklich korrekt gestreamt wird.

    Das Admin-Webinterface findet ihr unter:

    Geändert von AceTheFace (01.04.05 um 09:01 Uhr)

    openSUSE 10.3 @ AMD 64 3700+,A8N-SLI-Premium,1GB,256MB NVIDIA GeForce 7950GT
    Mac OS X Tiger @ MacBook, Intel Core Duo 2GHz, 2GB

    Last.FM - Profil | Blog


  3. #3
    Linuxgeiler Mod Avatar von AceTheFace
    Registriert seit
    Mar 2003
    Ort
    Ulm
    Beiträge
    4.544
    5. FAQ:

    * Ich kann mich zwar einwandfrei zum Server connecten, er zeigt mir auch korrekt die Metadaten an, aber es wird keine Musik übertragen.

    ->Du hast die Aufnahmequelle im Mixer nicht richtig eingestellt.Vergewissere dich, dass du VOL als Aufnahmequelle eingestellt hast.

    * Das Prebuffering sobald ich zum Server connected bin dauert ewig.

    ->Überprüfe ob IGAIN nicht auf lautlos bzw. 0% im Mixer eingestellt ist. Ist dies der Fall überträgst du nur digitalle Stille übers Netz.

    * Die Konfiguration von ices2 ist mir zu kompliziert, geht das nicht einfacher?

    ->Es gibt noch alternativen, doch mit denen habe ich zumeiste schlechte Erfahrungen gemacht, weswegen ich zu ices2 raten würde. Hier mal eine
    kleine Liste:

    *LiveIce-Plugin für xmms
    (http://star.arm.ac.uk/~spm/software/liveice.html) (etwas instabil)
    *Oddcast
    (http://www.oddsock.org/tools) (hat bei mir nie was übertragen)
    *Muse
    (http://muse.dyne.org)
    *Darkice
    (http://darkice.sourceforge.net)

    * Ich sitze hinter einem Router und habe den Server lokal installiert. Wie kann ich von aussen darauf zugreifen?

    -> Du musst den Serverport (default 8000) zu deinem Rechner forwarden.
    Sollte es sich um einen Linuxrouter handeln, dann sollten es diese Zeilen im iptables-script tun (evtl. IP, Interface und Port ändern):
    Code:
         #Pakete zum Weiterleiten markieren (alle wo an Port 8000 ankommen)
         iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp --dport 8000 -j ACCEPT
         # Port 8000-Pakete werden an 192.168.69.1 Port 8000 weitergeleitet...
         iptables -A PREROUTING -t nat -p tcp -i ppp0 --dport 8000 -j DNAT --to 192.168.69.1:8000
    * Ich möchte das Linuxradio unterstützen und einen Relay-Server einrichten. Wie mache ich das?

    ->Lobenswert! Les' bitte das folgende Kapitel durch

    * Ich habe Anmerkungen, Kritik oder Lob zu diesem HowTo. Wohin damit?

    ->Schreibe mir einfach eine PN oder eine eMail an Tobias AT Hanfbu DOT de


    6. Relay-Server aufsetzen:

    Was ist denn überhaupt ein Relay-Server? In gewisser Weise ist es vergleichbar mit einem FTP-Mirror oder dem Mirror einer WebSite. Ein Relay-Server verbreitet also genau die gleiche Streams wie sein Masterserver. Hierzu frägt er in bestimmten Abständen den Masterserver ab, welche Streams gehostet werden und übernimmt diese Streams dann. So muss man sich um Mount-Point-Konfiguration und encoding bei einem Relay-Server keine Gedanken machen.
    Die /etc/icecast2/icecast.xml sieht nun folgendermassen aus:

    Code:
    <icecast>
        <limits><!--ausser clients kann man in diesem Abschnitt die default-werte lassen-->
            <clients>30</clients> <!--max Zuhörer -->
            <sources>10</sources>
            <threadpool>5</threadpool>
            <queue-size>102400</queue-size>
            <client-timeout>30</client-timeout>
            <header-timeout>15</header-timeout>
            <source-timeout>10</source-timeout>
        </limits>
    
        <authentication>
            <!-- Admin-Zugangsdaten für Online-Administration -->
            <admin-user>AceTheFace</admin-user>
            <admin-password>dasAnderePasswort</admin-password>
        </authentication>
    
        <!-- Ip oder hostname des Servers -->
        <hostname>localhost</hostname>
    
        <!-- HIERAUF KOMMT ES NUN AN -->
        <master-server>192.168.69.1</master-server>
        <master-server-port>8000</master-server-port>
        <master-update-interval>120</master-update-interval>
        <master-password>RelayPass</master-password>
    
        <!-- Port auf den der Server hören soll -->
        <listen-socket>
            <port>8000</port>
        </listen-socket>
          
        <paths><!-- Installationsverzeichnis von icecast -->
            <basedir>/usr/share/icecast</basedir>
    
            <!--verschiedene Verzeichnisangaben, sollten klar sein ;) -->
    	<logdir>/var/log/icecast</logdir>
            <webroot>/usr/share/icecast/web</webroot>
            <adminroot>/usr/share/icecast/admin</adminroot>
         </paths>
        
        <logging>
            <accesslog>access.log</accesslog>
            <errorlog>error.log</errorlog>
          	<loglevel>4</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
        </logging>
    
        <security>
            <chroot>0</chroot>
            <!-- wichtig falls man den server beim booten starten lässt.
    	Hier kann man festlegen als welcher Benutzer der server laufen soll
    	(muss auf dem System exisiteren)-->
    	 <changeowner>
                <user>hanf</user>
                <group>users</group>
    	</changeowner>
           
        </security>
    </icecast>
    Auch hier gilt wieder: Der User den ihr unter changeowner angegeben habt muss Schreibrechte auf das logdir haben! (chown hanf /var/log/icecast && chgrp users var/log/icecast)

    Zum Starten des Relay-Servers:

    Code:
    icecast -c /etc/icecast2/icecast.xml
    Nun sollte sich euer Server beim Masterserver als normaler client einloggen, die mountpoints übernehmen und streamen.

    Der Masterserver bekommt davon nichts mit, da der Relay-Server sich ja wie ein normaler client einlogged, deshalb sollter ihr, wenn ihr z.B. das Linuxradio relayed dem Admin bescheid geben, damit er euch in die Serverliste aufnehmen kann!

    7. Ausblick:

    Ich werde versuchen, sobald ich mir entsprechende Kenntnisse zugelegt habe, dieses HowTo zu erweitern. Ein Themenbereich, den ich mir vorstellen könnte wäre z.B.:
    * "Echtes" Radio - Streaming mit XMMS und Mikrofon

    Aber Vorschläge, Wünsche und Anregungen sind wie immer gern gesehen.

    Viel Spaß!

    AceTheFace
    Geändert von AceTheFace (14.01.04 um 16:09 Uhr)

    openSUSE 10.3 @ AMD 64 3700+,A8N-SLI-Premium,1GB,256MB NVIDIA GeForce 7950GT
    Mac OS X Tiger @ MacBook, Intel Core Duo 2GHz, 2GB

    Last.FM - Profil | Blog


  4. #4
    Linuxgeiler Mod Avatar von AceTheFace
    Registriert seit
    Mar 2003
    Ort
    Ulm
    Beiträge
    4.544
    Ich hänge mal obige xml-dateien an, da manche wohl Probleme mit dem copy-paste aus dem pdf raus haben.

    Gruß,

    Ace

    openSUSE 10.3 @ AMD 64 3700+,A8N-SLI-Premium,1GB,256MB NVIDIA GeForce 7950GT
    Mac OS X Tiger @ MacBook, Intel Core Duo 2GHz, 2GB

    Last.FM - Profil | Blog


  5. #5
    Linuxgeiler Mod Avatar von AceTheFace
    Registriert seit
    Mar 2003
    Ort
    Ulm
    Beiträge
    4.544
    Habe in Kapitel 4 nun eine Möglichkeit beschrieben, wie die Tags auch wenn man amaroK als Player benutzt aktuell halten kann. (Thx to taylor).

    openSUSE 10.3 @ AMD 64 3700+,A8N-SLI-Premium,1GB,256MB NVIDIA GeForce 7950GT
    Mac OS X Tiger @ MacBook, Intel Core Duo 2GHz, 2GB

    Last.FM - Profil | Blog


Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •