среда, 4 июля 2012 г.

Вещание mpd по сети средствами pulseaudio.


Давно уже хотел опробовать возможность проигрывать музыку по сети. Пока еще у меня не было домашнего сервера, разные идеи крутились в голове, такие как вещание mpd посредством http-потока или через pulseaudio. Собственно, второй вариант мне приглянулся больше, в сети есть куча различных мануалов, однако для меня это не было такой уж тривиальной задачей из-за различных версий программ, дистрибутивов и конфигов. Стало быть, настала пора выложить в сеть еще один. :3




Сначала посмотрим, что есть для решения сей замечательной задачи:
  • Ноутбук без дисплея, работающий в качестве сервера. Обладая весьма скромными характеристиками (CPU 1.7 Ghz, RAM 512 Mb), содержит в себе операционную систему Calculate Directory Server 12. 
  • Стационарный компьютер с SSD (это один из ключевых моментов, домашний сервер помимо экспериментов нужен также для разгрузки ресурсов основного компьютера, особенно это касается твердотельного накопителя с целью продления срока службы) с установленной на нем Calculate Linux Desktop 12 с KDE.
  • Компьютер с Windows на компьютере в соседней комнате, о нем напишу возможно немного позже.
Наткнувшись на статью Домашнее аудиохранилище, решил начать копать с этого места. Отмечу, что в отличии от той конфигурации, сервер с музыкальным архивом у меня headless, то есть монитор я к нему не подключаю и иксов там принципиально нет. Также неохота было вытягивать пакет paprefs из-за зависимостей от гнома на стационарнике. Поэтому обойдемся правкой конфигов средствами текстового редактора.

Итак, приступим.

1. Установка Mpd.

Здесь все достаточно просто, единственное, что хотелось бы отметить, я не разделяю пристрастия запускать mpd от пользователя, что также относится и к pulseaudio на стороне сервера. На десктопе pulseaudio запускается от простого юзера, чем занимается непосредственно KDE и особо меня не волнует.

Заходим на сервер по ssh, вводим пароль.

$ ssh thagraal@gasper

Ставим mpd. Флаг -q ставлю специально для работы по ssh, ранее при длинной компиляции мне выдавало ошибку о слишком большом потоке и разрывало соединение. Можно прописать в make.conf по умолчанию.

$ sudo emerge -avq mpd

[ebuild   N   ] media-sound/mpd-0.16.5  USE="alsa bzip2 cue curl ffmpeg fifo flac id3tag ipv6 mad network pulseaudio sqlite tcpd unicode vorbis wavpack -aac -ao -audiofile -cdio -debug -fluidsynth -inotify -jack -lame -lastfmradio -libsamplerate -mikmod -mms -modplug -mpg123 -musepack -ogg -openal -oss -pipe -profile -sid -sndfile -twolame -wildmidi -zeroconf -zip"
Would you like to merge these packages? [Yes/No] 

Эти use-флаги (в частности pulseaudio) на данный момент меня устраивают, соглашаюсь и начинаю установку.
Конфигурирую mpd:

$ sudo vim /etc/mpd.conf

Укажу лишь параметры, которые я менял:

# Директория с музыкой, расшаренная по самбе
music_directory                 "/var/calculate/server-data/samba/share/sound"
# Для работы по сети
bind_to_address                 "any"
port                            "6600"
# Аудио-вывод на десктоп, опция sink специально закомментирована, с включеной опцией у меня не заработало
audio_output {
        type            "pulse"
        name            "My Pulse Output"
        server          "melchior"
#       sink            "remote_server_sink"    # optional
}
# Буферизируем для уменьшения искажения звука
audio_buffer_size               "2048"
buffer_before_play              "10%"

Собственно, все, запускаем mpd.

$ sudo rc-update add mpd default
$ sudo /etc/init.d/mpd start

2. Установка pulseauido.

Добавляю флаг pulseaudio в make.conf

$ sudo vim /etc/make.conf
USE="pulseaudio"

Активирую system-wide для возможности работы pulseaudio в качестве демона. Делать это настоятельно не рекомендуют, но как я уже говорил, работать с демонами мне сподручнее, да и в целом такая установка проще, как советует гентушная вики.

$ sudo vim /etc/portage/profile/use.mask
-system-wide
$ sudo vim /etc/portage/package.use/custom
media-sound/pulseaudio system-wide

Ставлю pulseaudio

$ sudo emerge -avq pulseaudio
[ebuild   N   ] media-sound/pulseaudio-1.1-r1  USE="alsa asyncns caps gdbm glib ipv6 orc ssl system-wide tcpd udev -X -avahi -bluetooth -dbus -doc -equalizer -gnome -jack -libsamplerate -lirc (-oss) -realtime -test"
Would you like to merge these packages? [Yes/No]

Устанавливаем и переходим к конфигурированию:

$ sudo echo "PULSEAUDIO_SHOULD_NOT_GO_SYSTEMWIDE=1" >> /etc/conf.d/pulseaudio
$ sudo echo "load-module module-native-protocol-tcp auth-anonymous=1" >> /etc/pulse/default.pa

Те же настройки я сделал на десктопе. Запускаем pulseaudio и добавляем в автозагрузку.

$ sudo rc-update add pulseaudio default
$ sudo rc-service pulseaudio start

3. Осталось только настроить клиент на стационарной машине. Мне нравится ncmpcpp. Переключаемся на другую вкладку терминала или выходим из ssh.

$ sudo emerge -av ncmpcpp

Конфигурируем. Примерный конфиг ncmpcpp можно взять на /usr/share/doc/ncmpcpp-0.5.10/config.bz2, но меня и дефолтные настройки вполне устраивают, поэтому я указываю только самое необходимое.

$ mkdir ~/.ncmpcpp
$ vim ~/.ncmpcpp/config
mpd_host="gasper"
mpd_port="6600"
mpd_music_dir="/var/calculate/server-data/samba/share/sound"

Как уже можно было догадаться, gasper и melchior - это имена сервера и десктопа соответственно. Прописывается это дело в /etc/hosts, но никто не мешает прописывать айпишники напрямую.

Запускаем клиент.

$ ncmpcpp

Нажимаем 'u' для обновления базы, добавляем музыку в плейлист и слушаем бархатный голос Хатсуне Мику. :3


Комментариев нет:

Отправить комментарий

Технологии Blogger.