неділя, 25 січня 2009 р.

C or Do [mpd + icecast]

Налаштування Icecast описується у попередній статті.

Встановлення і налаштування mpd

Для інсталяції просто виконуємо наступну команду:
sudo apt-get install mpd

Робимо деякі зміни у файлі /etc/mpd.conf
######################## REQUIRED PATHS ########################
# You can put symlinks in here, if you like. Make sure that
# the user that mpd runs as (see the 'user' config parameter)
# can read the files in this directory.
music_directory "/media/sda9/music"
playlist_directory "/var/lib/mpd/playlists"
db_file "/var/lib/mpd/tag_cache"
log_file "/var/log/mpd/mpd.log"
error_file "/var/log/mpd/errors.log"
pid_file "/var/run/mpd/pid"
################################################################

Тут:
"music_directory" - каталог з музичними файлами, з яких потім будуть складатися програми.
"playlist_directory" - каталог, у якому mpd буде зберігати свої плей-листи.
"db_file" - файл, у якому mpd буде зберігати свою медіа-бібліотеку.
"log_file" і "error_file" - файли логів.

Далі потрібно налаштувати вивід звуку через Icecast:
# An example of a shout output (for streaming to Icecast):
#
audio_output {
type "shout"
name "My Shout Stream"
host "localhost"
port "8000"
mount "/mpd.ogg"
password "password1"
# quality "5.0"
bitrate "128"
format "44100:16:1"
user "password1" # optional
description "My Stream Description" # optional
genre "rock" # optional
public "no" # optional
}

Тут:
Параметри "host", "port" і "password" описують з'єднання з icecast.
Параметри "bitrate" і "format" задають якість потоку.

Кодування файлової системы і тегів в mp3-файлах:
filesystem_charset              "UTF-8"       
id3v1_encoding "CP1251"
Інші параметри можна залишити по замовчуванню.

На цьому настройка закінчена. Теперь потрібно проіндексувати каталог з музикою і запустити сервіси:
sudo mpd --create-db                                                                             
sudo /etc/init.d/icecast start
sudo /etc/init.d/mpd start

Зверніть увагу не те, що mpd обов'язково повинен стартувати після icecast.

Для керування програванням можна скористатися одним із клієнтів.
Використаємо консольний клієнт mpc
sudo apt-get install mpc

Додамо у плейлист всю базу пісень і запустимо програвання у довільному порядку
mpc add /                                                                   
mpc random on
mpc play

Після чого можете налаштувати ваш улюблений плеєр(я використовую Audacious) на програвання ogg-потоку з адреси http://<ваш_IP>:8000/mpd.ogg.

Бага

Я помітив, що mpd після зупинки/паузи, не реагує на команду play.
У файл логів /var/log/mpd/errors.log записуються наступні помилки:
[...]                                                           
Jan 25 15:01 : problems opening audio device while playing "world/n/Neversmile/2006.Миллиарды Минут/05-V_Otkrytuiu_Ranu.mp3"
Jan 25 15:01 : problems opening audio device while playing "world/b/Bloc Party/2008. Intimacy/08 - Zepherus.ogg"
Jan 25 15:02 : problems opening audio device while playing "world/а/Андерсон/2008.Словозброя/03 Споживач.ogg"
[...]


Недовгий пошук у гуглі привів до вирішення цієї проблеми.
https://bugs.launchpad.net/ubuntu/+source/mpd/+bug/155932
Якщо додати наступні рядки у /etc/mpd.conf, проблема зникає.

audio_output {
type "ao"
driver "null"
name "Dummy output"
}

$ cat /etc/issue
Ubuntu 8.10

$ uname -a
Linux linux 2.6.27-9-generic #1 SMP Thu Nov 20 21:57:00 UTC 2008 i686 GNU/Linux

$ mpd --version
mpd (MPD: Music Player Daemon) 0.13.2

Copyright (C) 2003-2007 Warren Dukes <warren.dukes@gmail.com>
This is free software; see the source for copying conditions. There is NO
warranty; not even MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Supported formats:
mp3 mp2 ogg oga ogg flac wav au aiff aif m4a mp4 mpc amf dsm far gdm imf it med mod mtm s3m stm stx ult uni xm

Supported outputs:
alsa ao oss pulse shout jack

Можливо в інших версія ця проблема відсутня.

Q: А до чого тут Ruby?
A: вам сюди http://librmpd.rubyforge.org
Інсталяції здійснюється командою:
sudo gem install librmpd

В архіві з librmpd у каталозі exampes є 2 досить хороших приклади роботи з mpd засобами ruby.
Більш детально про librmpd я розповім у одному з наступних дописів.

1 коментар:

Волошин Руслан сказав...

Так а как ты использовать это джем все таки..??