music streaming
22 April 2008Musik streamen unter Linux
Ziel war es einen Musikstream selber mittels Linux zu realisieren da ich musik in der Wohnung verteilen wollte und keine Kabel verlegen. Wlan machts möglich jetzt müssen nur noch clients her die das können. So langsam gibt es halbwegs akzeptable und bezahlbare Streaming-Clients bzw. Wlan-Radios. Das Problem ist nicht alle können per SMB auf Netzwerk-Laufwerke zugreifen auch Ogg-Files oder Flac-Files machen oft probleme. Ogg-Streams sind da schon etwas verbreiteter, Mp3-Streams so wieso. Die Lösung liegt also auf der Hand wir setzten einen kleinen Server auf der sich per tcp-ip oder Webinterface steuern lässt. Unter Linux gibt es hierfür schon alle Komponenten (Die UPnP lösungen empfand ich als holprig deswegen die Lösung als “Inernetradio”).
Der Mucke-Server:
Hier kommt der MPD zum Einsatz, er ist schlank und lässt sich der TCP-IP ansteuern kann ogg stream ausgeben und schluckt fast alles. Es gibt auch diverse Clients von Komandozeile bis php
Die Steuerung :
Es gibt hier viele Varianten sitzt man direkt am server verwende ich gmpc(GnomeGui) und mpc (Komandozeile) und Pitchfok (die seite ist leider down aber hier noch ein link zum download. Für Alternativen mal hier nachsehen. ) der Mit hilfe eines Apachen von diversen Webbrowsern erreichbar ist
Die Verteilung:
Hier werden eventuell 2 Komponenten nötig zum einen Icecast der den OggStream direkt raushaut wird ein Mp3Strem benötigt kommt noch der Streamtranscoder zum einsatz der den Oggstream ausliest, konvertiert und wieder an Icecast zurück gibt. Letztere variante benötigt aber einiges an rechenleistung.
So simpel siehts aus. Jetzt zur Installation und Konfiguration:
mpd, mpc und gmpc können unter fedora problemlos per yum installiert werden, sofern auch rpmforge als repo verwendet wird. Icecast empfielt es sich aus den scourcen zu übersetzten. Die fertigen rpms haben bei mir in einem von drei fällen probleme gemacht. Wichtig ist acuh mpd
- nach
nach icecast zu starten. Ich habe den mpd als normalen user laufen, da sich meine musikfiles im homeverzeichnis befinden.
also kurz:
yum install httpd httpd-manual httpd-tools gmpc mpc mpd mysql mysql-libs mysql-server php php-common php-mysql
mpd konfigurieren:
/etc/mpd.conf
## REQUIRED PATHS ##
music_directory "/home/user/music/"
playlist_directory "/home/user/music/playlists"
db_file "/home/user/music/mpd.db"
log_file "/home/user/music/mpd.log"
error_file "/home/user/music//mpd.error"
#
## OPTIONAL PATHS ##
state_file "/home/pl/music//mpdstate"
#
## DAEMON OPTIONS ##
user "user"
# "default", "secure", or "verbose".
#log_level "default"
## AUDIO OUTPUT ###
audio_output {
type "pulse"
name "Pulse"
server "localhost"
# sinnk "alsa_output.spdif_0"
}
#Icecast
audio_output {
type "shout"
name "My Shout Stream"
host "localhost"
port "8000"
mount "/party.ogg"
password "hackme"
quality "5.0"
#bitrate "128"
format "44100:16:2"
# user "source" # optional
# description "My Stream Description" # optional
# genre "jazz" # optional
# public "no" # optional
}
## CHARACTER ENCODINGS ##
filesystem_charset "UTF-8"
id3v1_encoding "UTF-8"icecast:
Die Scourcen runterladen und der Linux typische dreisatz:
./configure
make
su -c “make install”
Bei der Konfiguration (/usr/local/etc/icecast.xml) sollten im großen ganze die Default-Einstellungen reichen. Ich habe das logverzeichnis angepasst!.
<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>30</source-timeout> <burst-on-connect>1</burst-on-connect> <burst-size>65535</burst-size> </limits> <authentication> <!-- Sources log in with username 'source' --> <source-password>hackme</source-password> <relay-password>hackme</relay-password> <admin-user>admin</admin-user> <admin-password>hackme</admin-password> </authentication> <hostname>localhost</hostname> <listen-socket> <port>8000</port> </listen-socket> <paths> <basedir>/usr/local/share/icecast</basedir> <logdir>/var/log/icecast</logdir> <!-- Achtung hier habe ich was gändert--> <webroot>/usr/local/share/icecast/web</webroot> <adminroot>/usr/local/share/icecast/admin</adminroot> <logging> <accesslog>ice-access.log</accesslog> <errorlog>ice-error.log</errorlog> <loglevel>4</loglevel> <!-- 4Debug 3Info 2Warn 1Error --> <logsize>10000</logsize> <!-- Max size of a logfile --> </logging>
Pitchfork
Pitchfork runterladen und z.b. nach /var/www/pitchfork entpacken
anschließend die datei /etc/httpd/conf.d/pitchfork.conf
mit folgendem inhalt anlegen:
Alias /pitchfork /var/www/pitchfork DirectoryIndex index.php Options -Indexes AllowOverride all AddType application/x-httpd-php .php php_flag magic_quotes_gpc off php_flag magic_quotes_runtime off php_flag display_errors off php_flag log_errors on # switch comment marks on the two items to disable access logging # completely for pitchfork. See INSTALL SetEnvIf Request_URI "player/command.php" pitchforknolog #SetEnv pitchforknolog
Dann noch kurz als root:
mkdir var/log/icecast/ touch /var/log/icecast/ice-error.log touch /var/log/icecast/ice-access.log chmod 777 -R /usr/local/var/log/icecast/
ich hab mir dann ein kleines Script geschieben das sicherstellt, daß alles in der passenden Reihenfolge gestartet wird:
stream.sh
#/bin/bash service mpd stop icecast -c /usr/local/etc/icecast.xml service mpdstart service httpd restart
have fun
deutsch
english