Вопрос или проблема
У меня есть домашний сервер с музыкальными файлами, хранящимися локально на этом сервере.
У меня на этом домашнем сервере установлены MPD и ncmpcpp.
Я пытаюсь создать прототип, чтобы затем пройти через тривиальный шаг проброса портов, чтобы к этому можно было получить доступ откуда угодно, но у меня довольно много проблем даже с тем, чтобы это заработало локально. Я работаю на удаленной машине, но вся работа, которую я сделал сегодня утром, происходила в удаленной оболочке внутри домашнего сервера…
Я убил и отключил демон для mpd и запустил его так:
mpd --stdout --no-daemon --verbose ~/.config/mpd/mpd.conf
и получил этот вывод:
config_file: loading file .config/mpd/mpd.conf
path: SetFSCharset: fs charset is:
libsamplerate: libsamplerate converter 'Fastest Sinc Interpolator'
vorbis: Xiph.Org libVorbis 1.3.5
opus: libopus 1.1.4
sndfile: libsndfile-1.0.27
simple_db: reading DB
curl: version 7.52.1
curl: with OpenSSL/1.0.2k
avahi: Initializing interface
avahi: Client changed to state 101
avahi: Client is CONNECTING
state_file: Loading state file /home/dale/.config/mpd/state
Похоже, что порт что-то делает, или по крайней мере готов что-то делать для MPD:
~ ➭ sudo netstat -lnp | sudo grep 8002
tcp 0 0 127.0.0.1:8002 0.0.0.0:* LISTEN 21596/mpd
Однако, когда я запускаю ncmpcpp (с той же машины, на которой работает MPD, на домашнем сервере… помните, я подключен по ssh), я получаю следующую жалобу:
ncmpcpp: Failed to resolve host name
У меня есть следующий файл ~/.config/mpd/mpd.conf
:
music_directory "/mnt/media/Music"
playlist_directory "~/.config/mpd/playlists"
db_file "~/.config/mpd/database"
log_file "~/.config/mpd/log"
pid_file "~/.config/mpd/pid"
state_file "~/.config/mpd/state"
sticker_file "~/.config/mpd/sticker.sql"
#mixer_type "software"
#█▓▒░ opts
bind_to_address "127.0.0.1"
port "6601"
log_level "default"
gapless_mp3_playback "yes"
filesystem_charset "UTF-8"
#█▓▒░ io
input {
plugin "curl"
}
audio_output {
type "alsa"
name "My ALSA Device"
device "hw:0,0" # optional
mixer_type "hardware" # optional
mixer_device "default" # optional
mixer_control "PCM" # optional
mixer_index "0" # optional
}
#audio_output {
# type "alsa"
# name "audio"
#}
audio_output {
type "fifo"
name "visualizer"
path "/tmp/mpd.fifo"
format "44100:16:2"
}
audio_output {
type "httpd"
name "My HTTP Stream"
encoder "vorbis" # optional
bind_to_address "127.0.0.1"
port "8002"
# quality "5.0" # do not define if bitrate is defined
bitrate "128" # do not define if quality is defined
format "44100:16:1"
always_on "yes" # prevent MPD from disconnecting all listeners when playback is stopped.
tags "yes" # httpd supports sending tags to listening streams.
}
`
У меня есть это в моем файле ~/.ncmpcpp/config
:
ncmpcpp_directory = "~/.ncmpcpp"
#lyrics_directory = "~/.lyrics"
external_editor = "/usr/bin/vim"
# █▓▒░ Настройки MPD
mpd_crossfade_time = "3"
mpd_music_dir = "/mnt/media/Music"
mpd_host = "127.0.0.1:8002"
mpd_port = "8002"
Есть идеи, какие свойства я неправильно настроил?
Спасибо
Вы неправильно понимаете, для чего используются порты, которые вы настроили.
6601 (“порт” в вашем конфигурационном файле MPD) используется приложениями, которые намереваются общаться с MPD по протоколу MPD – то есть приложениями, которые контролируют воспроизведение, музыкальную базу данных и т. д.
8002 (“порт” в секции “audio_output” в вашем конфигурационном файле MPD) – это порт, на котором MPD передает аудиопоток vorbis по HTTP.
Поскольку ncmpcpp является клиентом для управления MPD, а не для прослушивания аудиопотока, который он передает, вам нужно настроить ncmpcpp для подключения к порту 6601 (в настройке mpd_port
).
Ответ или решение
Когда вы сталкиваетесь с проблемой, связанной с тем, что MPD (Music Player Daemon) не отвечает на TCP-порт, важно правильно интерпретировать конфигурацию вашего сервера и клиента. На вашем домашнем сервере установлен MPD и используете ncmpcpp в качестве клиента, но возникает проблема с подключением по порту.
Настройка MPD и ncmpcpp
1. Конфигурация MPD
Из вашей конфигурации MPD видно, что вы указали два порта:
- 6601 (для управления MPD).
- 8002 (для потоковой передачи аудио через HTTP).
Важно понимать, что порт 6601 предназначен для работы с клиентами, использующими протокол MPD, которые управляют воспроизведением, плейлистами и базой данных музыки. Ваша конфигурация MPD содержит строку:
port "6601"
Это значит, что любые клиенты, такие как ncmpcpp, должны подключаться к этому порту, чтобы взаимодействовать с MPD.
2. Настройка ncmpcpp
В конфигурации ncmpcpp вы указали:
mpd_host = "127.0.0.1:8002"
mpd_port = "8002"
Однако это значение некорректно, так как ncmpcpp должен подключаться к порту 6601, а не 8002. Следовательно, вам необходимо изменить эти строки на:
mpd_host = "127.0.0.1"
mpd_port = "6601"
3. Проверка запуска MPD
Вы запускали MPD с параметрами для отладки, используя:
mpd --stdout --no-daemon --verbose ~/.config/mpd/mpd.conf
Это хороший подход для выявления возможных ошибок, так как позволяет видеть логи в реальном времени. Убедитесь, что вы видите, что MPD успешно загружает файлы конфигурации и что нет сообщений об ошибках.
4. Проверка открытых портов
С выводом команды netstat
вы наблюдаете, что порт 8002 слушает на 127.0.0.1
, что подтверждает, что этот порт активен и настроен для потоковой передачи. Убедитесь, что в конфигурации audio_output
все параметры заданы правильно и MPD действительно может начать потоковую передачу.
Заключение
Таким образом, проблема в том, что ncmpcpp пытается подключиться к неправильному порту для управления MPD. Убедитесь, что исправили конфигурацию клиента, чтобы использовать порт 6601 для связки с MPD, и вы сможете управлять воспроизведением музыки без проблем.
Дополнительно, если вы планируете доступ к MPD из внешней сети, после того как все будет работать локально, убедитесь, что вы правильно настроили маршрутизацию и защищены от несанкционированного доступа, прежде чем открывать свои порты в файрволе вашего роутера.