Open WiseLord opened 1 year ago
Ещё вдогонку несколько экспериментов, показывающих, что проблема, скорее всего в <HASS_URL>/api/yandex_station/
.
Если взять те же ссылки на один и тот же аудиофал: [1] - сгенерированный api/yandex_station и [2] - тот же файл на своём веб-сервере:
VLC
ffplay / mpv
wget
wiselord@hp15 /tmp $ wget http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
--2023-06-22 18:16:19-- http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
Connecting to 192.168.100.110:8123... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11015314 (11M) [audio/mpeg]
Saving to: 'cbc088d2123269e24537ddd7e25e8191.mp3.1'
cbc088d2123269e24537ddd7e25e8191.m 100%[=============================================================>] 10.50M 5.84MB/s in 1.8s
2023-06-22 18:16:21 (5.84 MB/s) - 'cbc088d2123269e24537ddd7e25e8191.mp3.1' saved [11015314/11015314]
wiselord@hp15 /tmp $ wget http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
--2023-06-22 18:16:21-- http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
Connecting to 192.168.100.110:8123... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11015314 (11M) [audio/mpeg]
Saving to: 'cbc088d2123269e24537ddd7e25e8191.mp3.2'
cbc088d2123269e24537ddd7e25e8191.m 100%[=============================================================>] 10.50M 5.14MB/s in 2.0s
2023-06-22 18:16:23 (5.14 MB/s) - 'cbc088d2123269e24537ddd7e25e8191.mp3.2' saved [11015314/11015314]
wiselord@hp15 /tmp $ wget http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
--2023-06-22 18:16:24-- http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
Connecting to 192.168.100.110:8123... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11015314 (11M) [audio/mpeg]
Saving to: 'cbc088d2123269e24537ddd7e25e8191.mp3.3'
cbc088d2123269e24537ddd7e25e8191.m 100%[=============================================================>] 10.50M 4.66MB/s in 2.3s
2023-06-22 18:16:26 (4.66 MB/s) - 'cbc088d2123269e24537ddd7e25e8191.mp3.3' saved [11015314/11015314]
wiselord@hp15 /tmp $ wget http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
--2023-06-22 18:16:27-- http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
Connecting to 192.168.100.110:8123... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11015314 (11M) [audio/mpeg]
Saving to: 'cbc088d2123269e24537ddd7e25e8191.mp3.4'
cbc088d2123269e24537ddd7e25e8191.m 100%[=============================================================>] 10.50M 5.49MB/s in 1.9s
2023-06-22 18:16:29 (5.49 MB/s) - 'cbc088d2123269e24537ddd7e25e8191.mp3.4' saved [11015314/11015314]
wiselord@hp15 /tmp $ wget http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
--2023-06-22 18:16:32-- http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
Connecting to 192.168.100.110:8123... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11015314 (11M) [audio/mpeg]
Saving to: 'cbc088d2123269e24537ddd7e25e8191.mp3.5'
cbc088d2123269e24537ddd7e25e8191.m 32%[===================> ] 3.46M 5.76MB/s ^C
wiselord@hp15 /tmp $ wget http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
--2023-06-22 18:16:34-- http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
Connecting to 192.168.100.110:8123... connected.
HTTP request sent, awaiting response... ^C
wiselord@hp15 /tmp $ wget http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
--2023-06-22 18:16:36-- http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
Connecting to 192.168.100.110:8123... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11015314 (11M) [audio/mpeg]
Saving to: 'cbc088d2123269e24537ddd7e25e8191.mp3.6'
cbc088d2123269e24537ddd7e25e8191.m 50%[==============================> ] 5.25M 5.24MB/s ^C
wiselord@hp15 /tmp $ wget http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
--2023-06-22 18:16:38-- http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
Connecting to 192.168.100.110:8123... connected.
HTTP request sent, awaiting response... ^C
wiselord@hp15 /tmp $ wget http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
--2023-06-22 18:16:40-- http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
Connecting to 192.168.100.110:8123... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11015314 (11M) [audio/mpeg]
Saving to: 'cbc088d2123269e24537ddd7e25e8191.mp3.7'
cbc088d2123269e24537ddd7e25e8191.m 84%[===================================================> ] 8.88M 5.54MB/s ^C
wiselord@hp15 /tmp $ wget http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
--2023-06-22 18:16:43-- http://192.168.100.110:8123/api/yandex_station/ff98f029ba8cd32b997308b0/cbc088d2123269e24537ddd7e25e8191.mp3
Connecting to 192.168.100.110:8123... connected.
HTTP request sent, awaiting response... ^C
В примере выше я первым нескольким закачкам даю завершиться нормально. Всё идёт хорошо. Но если (чуть дальше) я прерываю процесс загрузки, то следующая уже завершиться не может.
Такое чувство, что через API yandex_station один и тот же файл одновременно раздаваться двум клиентам (первый - прерванный, второй - новый) не может. Отсюда и работа "через раз", и зависание mpd (хотя это уже и частично его проблема.
Видимо, при переключении источника со "Станция" на "MPD" как раз такая ситуация и происходит - поток одновременно запрашивается двумя клиентами.
Ещё попробовал воспроизвести проблему на x86 варианте HomeAssistant - и здесь всё нормально. Падений нет, файл по ссылке доступен одновременно разным клиентам..
Похоже, просто производительности не хватает на Banana PI (сервер с HomeAssistant Core).
Проапгрейдил железо сервера (Banana Pi M2 Zero 512MB RAM => Orange Pi 3 LTS 2GB RAM) - проблема не воспроизводится.
В целом всё работает, кроме (частично) синхронизации воспроизведения между станцией и MPD.
Если поставить воспроизведение колонки на паузу или стоп (в том числе голосом) - MPD делает то же самое синхронно (с некоторой задержкой). Но если же сказать колонке "Следущий трек" или нажать кнопку в интерфейсе - она переключается, но MPD продолжает играть старый.
Больше склоняюсь к глюкам самого MPD
При переключении с воспроизведения со станции на "стриминг" на MPD, воспроизведение длится несколько (10..15) секунд, после чего MPD "умирает". В течение этих нескольких секунд другие клиенты MPD тоже уже не имеют с ним связи, даже пока ещё сам сервер ещё играет.
configuration.yaml
:Вывод самого MPD:
Конфиг MPD (
/home/wiselord/.local/share/cantata/mpd/mpd.conf
):Лог
/home/wiselord/.cache/cantata/mpd/log_file
MPD на хосте (192.168.100.100), с момента переключения выхода со "Станция" на "Home MPD" в карточке mini-media-player:После последней строчки плеер играет те самые несколько секунд, после чего процесс убивается, при этом в логе ничего нового нет.
Такое ощущение, что передача в MPD ссылки с mp3 каким-то образом блокирует основной цикл приложения MPD, так что он теряет связь со всеми клиентами и через некоторое время самоубивается.
P.S. Версии всех интеграций и самого HomeAssistant последние на сегодняшний день.
P.P.S. Такое поведение наблюдаю как у MPD на ПК (Gentoo Linux), так и у MPD на OrangePi One (Buildchroot сборка с MPD на борту, в корпусе музыкального центра).
P.P.P.S. Поэкспериментировал ещё немного.
Добавляю в mpd в плейлист два URL-а:
Быстро переключаюсь между этими файлами в MPD - и оно зависает на первом URL-е.