Přeskočit na hlavní obsah

Music Assistant: výpadky internetového rádia přes Chromecast

Tento návod popisuje reálný případ, který jsem řešil: internetové rádio z Music Assistantu přehrávané přes Google Cast (Chromecast) na soundbaru Samsung po chvíli vždy spadlo. Kromě finální opravy popisuji i celý postup diagnostiky - ten se vám může hodit i u podobných problémů s přehrávači.

Rychlá oprava (TL;DR)

V Music Assistantu otevřete nastavení přehrávače → rozbalte sekci Chromecast a nastavte HTTP Profile na „Profile 2 - no content length" (výchozí je „Profile 3 - forced content length") a Output codec na MP3. U mě pak rádio hrálo 9,5 minuty bez jediného výpadku místo padání každých zhruba 90 sekund. Proč to funguje a jak jsem se k tomu dopracoval, rozebírám níže.

Pro koho je návod určený

Návod navazuje na článek Music Assistant - komplexní hudební server. Předpokládám, že už máte Music Assistant nainstalovaný a funkční.

Prostředí

  • Home Assistant + Music Assistant (verze 2.9.x) - tedy nové sloučené rozhraní přehrávače s přepínači pro AirPlay, Chromecast a Sendspin
  • Přehrávání internetového rádia (Evropa 2)
  • Cílové zařízení: soundbar Samsung HW-Q800D připojený přes Google Cast (Chromecast)

Příznaky: rádio přestane hrát po chvíli a Chromecast se odpojí

Rádio začalo normálně hrát, ale po zhruba 80 až 100 sekundách se přehrávání zastavilo. Zařízení se vzápětí vrátilo do stavu, kdy je opět připravené hrát, ale přehrávání se samo neobnovilo - musel jsem ho spustit ručně. Po dalších zhruba 90 sekundách to spadlo znovu.

Postup diagnostiky

Nejdříve bylo potřeba zjistit, kde přesně problém vzniká. Velmi se mi osvědčilo nahlédnout přímo do stavů entit přes HA REST API.

1. Sledování stavů entit přes REST API

S dlouhodobým přístupovým tokenem (vytvoříte ho v Home Assistant ve svém profilu úplně dole v sekci Dlouhodobé přístupové tokeny) jsem se přes REST API podíval na dvě klíčové media_player entity:

  • media_player.q_series_soundbar_2 - přehrávač z Music Assistantu
  • media_player.q_series_soundbar - nativní Cast entita přímo v Home Assistant
# Aktuální stav všech entit
curl -s -H "Authorization: Bearer DLOUHODOBY_TOKEN" \
http://homeassistant.local:8123/api/states

# Historie konkrétní entity za poslední období
curl -s -H "Authorization: Bearer DLOUHODOBY_TOKEN" \
"http://homeassistant.local:8123/api/history/period/2026-01-01T00:00:00?filter_entity_id=media_player.q_series_soundbar"

2. Která entita selhává jako první?

Z historie bylo vidět, že přehrávač Music Assistantu přešel do stavu idle přesně ve stejnou sekundu, kdy nativní Cast entita přešla do stavu unavailable.

To je důležité zjištění: Music Assistant pouze následuje stav Cast zařízení. Skutečná příčina tedy nebyla v Music Assistantu, ale v přerušení Cast spojení.

3. Pravidelnost výpadků

Historie ukázala, že přechody do unavailable se opakovaly pravidelně každých zhruba 80 až 100 sekund - ale pouze při aktivním přehrávání (playing). Ve stavu idle bylo spojení naprosto stabilní.

Historie entity soundbaru v Home Assistant - opakované přechody do stavu „bylo nedostupné" zhruba každých 90 sekund při přehrávání

4. Vyloučení Wi-Fi a sítě

Soundbar jsem nechal pingovat:

ping q-series-soundbar.local

Výsledek: 0% ztracených paketů. Síť, Wi-Fi ani signál tedy nebyly příčinou.

5. Vyloučení mDNS discovery

V integraci Google Cast už byla IP adresa zařízení uvedená v sekci Known hosts (známí hostitelé). Problém tedy nebyl ani v objevování zařízení přes mDNS.

6. Vyloučení CEC

Zkusil jsem zařízení přidat do seznamu Ignorovat CEC (IGNORE_CEC). Ani to nepomohlo.

Pozor na zápis do IGNORE_CEC

Volba IGNORE_CEC se neporovnává podle IP adresy, ale podle přátelského jména zařízení (friendly name) - v mém případě tedy Q-Series Soundbar, nikoli IP adresa. To je snadný zdroj chyb, kdy nastavení vypadá správně, ale nezabírá.

Nastavení Google Cast - nahoře „Known hosts" s IP adresou zařízení, dole „Ignorovat CEC" vyplněné přátelským jménem Q-Series Soundbar

Příčina problému

Po projití zdrojového kódu Music Assistantu (providers/chromecast/player.py) a souvisejících GitHub issues (#5057 a #5250) byla příčina jasná:

Music Assistant odesílá nekonečný stream rádia do Cast zařízení jako konečnou "jednu skladbu" s vynucenou hlavičkou Content-Length (HTTP profil "forced content length"). Cast přijímač v Samsungu (Tizen) takovou relaci po cca 90 sekundách ukončí. Nativní Cast entita přejde do stavu unavailable, Music Assistant ji následuje a přehrávání skončí. Zařízení se po chvíli vrátí do dostupného stavu (je opět připravené hrát), ale samo přehrávání neobnoví - je nutné ho spustit ručně. A po dalších zhruba 90 sekundách se to opakuje.

Oprava

Řešení je v nastavení přehrávače v Music Assistantu:

  1. Otevřete v Music Assistantu nastavení konkrétního přehrávače
  2. Rozbalte sekci protokolu Chromecast (šipka vedle volby Zapnout podporu Chromecast)
  3. Nastavte HTTP Profile na hodnotu "Profile 2 - no content length" (výchozí bylo "Profile 3 - forced content length")
  4. Nastavte Output codec na MP3
Kde najít nastavení HTTP profilu

V této verzi Music Assistantu na obecné stránce přehrávače není žádný hlavní přepínač "flow mode". Nastavení specifická pro Cast - včetně HTTP profilu - jsou schovaná právě v rozbalené sekci protokolu Chromecast.

Volba HTTP Profile v rozbalené sekci Chromecast - Profile 1 (chunked), Profile 2 (no content length) a výchozí Profile 3 (forced content length)

Ověření

Po změně nastavení hrálo rádio plynule cca 9,5 minuty bez jediného výpadku (žádná událost unavailable), oproti původnímu padání každých zhruba 90 sekund.

Tipy navíc k internetovému rádiu

Při řešení problému vyplynulo několik dalších poznatků, které se vám můžou hodit.

Zobrazení názvů skladeb (now-playing)

Záleží na konkrétním streamu rádia:

  • Stream ice.actve.net/fm-evropa2-128 neposílá ICY StreamTitle - názvy skladeb se proto nikdy nezobrazí.
  • Feedy přes StreamTheWorld názvy posílají:
    • https://playerservices.streamtheworld.com/api/livestream-redirect/EVROPA2AAC.aac (AAC+ 64k)
    • varianta MP3 96k
Doporučení pro výběr stanice

V poskytovateli RadioBrowser zvolte položku "Evropa 2 - aac". Získáte tím názvy aktuálně hrané skladby i dobrou kvalitu (HE-AAC 64k je poslechově zhruba na úrovni 128k MP3). Aktualizace názvů funguje (ověřeno - sledoval jsem tři změny skladeb).

Rozházená česká diakritika v názvech

V názvech se může objevit rozbitá diakritika (např. "Odlétá" se zobrazí jako "Odl�t�").

Toto nejde opravit v MA ani HA

Poškození vzniká přímo ve zdroji - feed StreamTheWorld posílá už rozbité bajty (EF BF BD, tedy znak náhrady Unicode U+FFFD). Původní znaky jsou tak nenávratně ztracené ještě před tím, než data dorazí do Music Assistantu. Anglické a ASCII názvy jsou v pořádku.

Nepřepínejte kodek na FLAC

Pro rádio ponechte MP3:

  • Zdroj je ztrátový, takže FLAC nepřinese žádné zlepšení kvality - jen zbytečně větší stream.
  • FLAC přes Cast na Samsung je přesně ta nestabilní kombinace, které je lepší se vyhnout.

FLAC dává smysl pouze u bezztrátových zdrojů.

Zobrazení názvů na displeji soundbaru

Music Assistant posílá název skladby, interpreta i obal alba přes Cast (MediaInformation) - uvidíte je například v aplikaci Google Home nebo na televizi.

Omezení displeje Q800D

Malý přední displej soundbaru Q800D názvy skladeb z Castu nezobrazuje. Jde o hardwarové/firmwarové omezení zařízení, se kterým Music Assistant nic nezmůže.

Líbí se vám tento článek?

Vaše podpora pomáhá tvořit nejlepší české návody o chytré domácnosti!

Podpořit jednorázově

Komentáře