Mediaserver med icecast2 och mpd

Icecast är en server för strömmande media som förlitar sig på "source clients" som levererar data till icecast. Klienten är typiskt placerad där ljudkällan genereras och icecast oftast där det finns gott om bandbredd. Icecast kan användas för att skapa en webbradio, privat jukebox och många saker där i mellan.

Om ett ljudprogram i realtid ska konvertera en ljudström så kan det vara en riktig CPU hogger, mpd drar runt 18% när den spelar upp något, mer om det här. Icecast2 gör däremot väldigt lite avtryck på processorbelastningen.

Här är icecast2 officiella hemsida. Själv tyckte jag att deras dokumentation var mycket bristfällig och det tog ett bra tag innan jag förstod var och hur det skulle konfigureras för att det skulle fungera. Kanske för att icecast2 är så självklart enkel, enklare än vad jag trodde.

Processen jag beskriver är för en Debian Squeeze server men borde i stort sätt vara den samma för ett Ubuntu system. Lösenorden jag använder är givetvis fingerade, använd programmet makepasswd för att generera egna. Servernamnet media.server.com är också fingerat, byt mot egen domän eller IP nummer.

Installera med

sudo apt-get install icecast2 mdp makepasswd ncmpc dir2ogg

Redigera "/etc/icecast2/icecast.xml" och ställ åtminstone lösenorden. Redigera sedan "/etc/default/icecast2" och sätt sista raden till "ENABLE=true". Starta server med "/etc/init.d/icecast2 start".

Rensad och fungerande icecast.xml

<icecast>
<limits>
<clients>100</clients>
<sources>2</sources>
<threadpool>5</threadpool>
<queue-size>524288</queue-size>
<client-timeout>30</client-timeout>
<header-timeout>15</header-timeout>
<source-timeout>10</source-timeout>
<burst-on-connect>1</burst-on-connect>
<burst-size>65535</burst-size>
</limits>
<authentication>
<!-- Sources log in with username 'source' -->
<source-password>hack</source-password>
<!-- Relays log in username 'relay' -->
<relay-password>hackamer</relay-password>
<!-- Admin logs in with the username given below -->
<admin-user>admin</admin-user>
<admin-password>adminhack</admin-password>
</authentication>

<hostname>media.server.com</hostname>

<listen-socket>
<port>8000</port>
</listen-socket>

<mount>
<mount-name>/stream.ogg</mount-name>
<max-listeners>1</max-listeners>
<authentication type="htpasswd">
<option name="filename" value="/etc/icecast2/myauth"/>
<option name="allow_duplicate_users" value="0"/>
</authentication>
<on-connect>/home/icecast/bin/stream-start</on-connect>
<on-disconnect>/home/icecast/bin/stream-stop</on-disconnect>
</mount>

<!-- Denna ligger i "/usr/share/icecast2/web/" mp3 funkar också -->
<mount>
<mount-name>/Ljudfil.ogg</mount-name>
<max-listeners>5</max-listeners>
<public>1</public>
<hidden>0</hidden>
<stream-name>Va'du Vill</stream-name>
<stream-description>Testa ljudet</stream-description>
<genre>Alternativ</genre>
<on-connect>/home/icecast/bin/stream-start</on-connect>
<on-disconnect>/home/icecast/bin/stream-stop</on-disconnect>
</mount>

<fileserve>1</fileserve>

<paths>
<basedir>/usr/share/icecast2</basedir>
<logdir>/var/log/icecast2</logdir>
<webroot>/usr/share/icecast2/web</webroot>
<adminroot>/usr/share/icecast2/admin</adminroot>
<alias source="/" dest="/status.xsl"/>
</paths>

<logging>
<accesslog>access.log</accesslog>
<errorlog>error.log</errorlog>
<playlistlog>playlist.log</playlistlog>
<loglevel>3</loglevel>
<logsize>10000</logsize>
</logging>

<security>
<chroot>0</chroot>
</security>
</icecast>

Kolla att det funkar (logga in med "admin" och "adminlösenordet" från icecast.xml):

http://media.server.com:8000/admin/stats.xsl

För att "authentication" ska fungera, skapa en fil i t.ex. /etc/icecast2/myauth med htpasswd. OBS! Det är viktigt att sätta rättigheterna till icecast2 om webbadmin gränssnittet ska fungera.

sudo htpasswd -c /etc/icecast2/myauth användarnamn
(skriv in ett lösenord)
sudo chown icecast2:icecast /etc/icecast2/myauth

mpd

OBS! Notera att debian versionen av mpd inte är kompilerat med stöd för mp3 så ljudet som ska stömmas bör vara i formatet ogg vorbis. Kompilera själv om du vill ha mp3 stöd.

Rensad och fungerande /etc/mpd.conf

music_directory     "/var/lib/mpd/music"
playlist_directory  "/var/lib/mpd/playlists"
db_file             "/var/lib/mpd/tag_cache"
log_file            "/var/log/mpd/mpd.log"
pid_file            "/var/run/mpd/pid"
state_file          "/var/lib/mpd/state"

#user                "mpd"
#log_level            "default"
log_level            "verbose"

audio_output {
type "alsa"
name "fake out"
driver "null"
}

audio_output {
type              "shout"
protocol          "icecast2"
name              "Cells Beta"
description       "Hans E Andersson Music Production"
genre             "jazz"
#encoder           "ogg"
host              "127.0.0.1"
port              "8000"
mount             "/stream.ogg"
password          "hack" # samma lösenord som source i icecast.xml
quality           "6.0"
format            "44100:16:2"
user              "source"
}

filesystem_charset        "UTF-8"
id3v1_encoding "UTF-8"

Spela upp

Mpd spelar inte av sig själv, grundläggande status är "stop". För att få igång den måste en klient användas. Klienten, i mitt fall, är ett program som körs från samma server som mpd är installerat i. Ett program är "ncmpc" för att sätta igång en spellista, ett annat är "mpc". När den är slut så slutar också klienten höra något. Använ t.ex. VLC för att lyssna:

http://användarnamn:lösenord@media.server.com:8000/stream.ogg

OBS! Om inget spelas på servern så är det bra att ha en fallback-fil (/usr/share/icecast2/web/silence.ogg), om inte spellistan är igång. Lägg till i "icecast.xml" raden under <mount-name>/stream.ogg</mount-name>:

<mount>
<mount-name>/stream.ogg</mount-name>
<fallback-mount>/silence.ogg</fallback-mount>
<fallback-override>1</fallback-override>
<max-listeners>1</max-listeners>
<authentication type="htpasswd">
<option name="filename" value="/etc/icecast2/myauth"/>
<option name="allow_duplicate_users" value="0"/>
</authentication>
<on-connect>/home/icecast/bin/stream-start</on-connect>
<on-disconnect>/home/icecast/bin/stream-stop</on-disconnect>
</mount>

Ett klient program att sätta igång mpd är mpc

mpc ls | mpc add
mpc play|stop|pause
mpc stats

Sista raden ger resultatet


Artists:      0
Albums:       0
Songs:       10

Play Time:    0 days, 0:30:21
Uptime:       0 days, 0:38:06
DB Updated:   Wed Aug 24 01:21:20 2011
DB Play Time: 0 days, 0:34:27

Skapa en spellista i "/var/lib/mpd/playlists/MyPlaylist.m3u"

mpc save MyPlaylist

Exempel för att spela upp låt nr 1 i spellistan:

mpc play 1
mpc repeat on
mpc random on

Av någon anledning som jag ännu inte vet har ljudkvaliteten varit bätte och mindre problemfylld med npmpc. Om det krånglar se till att inte två klienter spelar samtidigt

ps aux | grep mpc
ps aux | grep npmpc

Personligen gillar jag npmpc bäst.

Spela statiska filer och spellistor

Detta är något mycket enkelt att åstadkomma med icecast2. Här behövs inga inställningar i icecast.xml, se bara till att det som ska spelas upp ligger i /usr/share/icecast2/web mappen (symboliska länkar funkar också bra). Här fungerar icecast mest som en webserver och följande kan lika gärna göras med apache webserver.

Om du gjort en mount-post i icecast.xml där du kräver autencitering, spela upp en fil med:

http://användare:lösenord@media.server.com:8000/Ljud/EnLjudfil.mp3

Om du inte gjort någon mount-post i icecast så räcker det med:

http://media.server.com:8000/Ljud/EnLjudfil.mp3

Skapa en enkel spellista:

cd /usr/share/icecast2/web
sudo ls -1 >Spellista.m3u Ljud/*.mp3

M3U Syntax

#EXTM3U - header - måste vara på första raden
#EXTINF:längd (sekunder), Sven Bertil Taube - Sjörövarfabbe (Titel)

Skapa en m3u spellista med mp3info

cd /usr/share/icecast2/web
sudo mp3info -p "#EXTINF:%S,%a - %f %l (%y)\n%F\n" Ljud/*.mp3 > Spellista.m3u

Lägg till "#EXTM3U" överst, om man ska vara noga ska filen vara formaterad i Windows-1252 format för att förstås av mediaspelare.

#EXTM3U

#EXTINF:362,Hans E Andersson - AdLib.mp3 Cells (2011)
Ljud/AdLib.mp3
#EXTINF:280,Hans E. Andersson - ArpJam.mp3 HEAP Sounds (2011)
Ljud/ArpJam.mp3
#EXTINF:468,Hans E. Andersson - Barncells.mp3 HEAP Sounds (2011)
Ljud/Barncells.mp3
...

Spela upp med

http://media.server.com:8000/Spellista.m3u

 

Stömma m3u spellista till iPhone

Skapa en ny spellista

mp3info -p "http://media.server.com:8000/%F\n" Musik/*.mp3 > spellista.m3u

Det är viktigt att inkludera hela sökvägen till filen. Här struntade jag i M3U syntaxen och lät filen vara platt och rak. För att undvika problem rekomenderar jag att filnamnen inte innehåller svenska tecken, mellanrum och annat konstigt. Så här enkel bör spellistan vara:

http://media.server.com:8000/Musik/Jojo.mp3
http://media.server.com:8000/Musik/JamJam.mp3
http://media.server.com:8000/Musik/Bompa.mp3
...

Skriv in länken i iPhone Safari

http://media.server.com:8000/spellista.m3u

(Den här typen av spellista fungerar också med iTunes)

 


"icecast2", Hans E Andersson: 2011-08-24 12:23:17, ändrad: 2014-01-09 16:43:27

 

Copyright © 2005 - 2019 HEAP. Alla rätter förbehållna. Integritetspolicy