multi-room-ljud Android hela huset ljudstreaming synkroniserad ljuduppspelning

Multi-room-ljud på Android: Installation och synk

Hur du spelar musik synkroniserat över flera högtalare och enheter från din Android-telefon. Lär dig om UPnP, Chromecast och multi-room över flera protokoll med praktiska installationstips.

· 11 min läsning

Vad multi-room faktiskt innebär

Multi-room-ljud innebär att spela samma musik genom högtalare i olika rum samtidigt. Gå från köket till vardagsrummet och låten fortsätter sömlöst. Inga luckor, inget eko, ingen konstig fördröjning mellan rum.

Det är löftet. Varje högtalartillverkare sätter det på lådan. Och inom ett enda ekosystem — Sonos, Apple, Google — fungerar det mestadels. Problemen börjar när du har högtalare från olika tillverkare, vilket i princip är alla.

Den verkliga definitionen av multi-room är inte bara “samma låt på flera ställen”. Det är synkroniserad uppspelning — ljud som anländer till dina öron från olika högtalare inom ett par tiotals millisekunder av varandra. Om två högtalare är mer än ungefär 50 ms isär hör du det. Inte som ett eko, utan som en utsmetning, en tjockhet i ljudet som känns fel. Under 30 ms kan de flesta inte märka skillnad. Det är målet.

Synkproblemet

Här är varför synkroniserad uppspelning över olika enheter är genuint svårt.

När du trycker play utlöses en kedja av händelser: appen skickar ett kommando via WiFi till högtalaren, högtalaren tar emot det, buffrar lite ljuddata, bearbetar det genom sin DAC, och ljud kommer ut. Varje steg tar tid, och varje enhet tar olika lång tid.

En Chromecast kan behöva 800 ms från play-kommando till första ljud. En Denon-receiver kanske behöver 200 ms. En SoundTouch-högtalare hamnar runt 150 ms. Din telefons hörlursuttag? Under 10 ms. Om du skickar play-kommandot till alla fyra enheterna i samma ögonblick kommer ljud ut ur din telefon nästan omedelbart, Denon en femtedels sekund senare, SoundTouch efter det, och Chromecast nästan en hel sekund efter att du tryckte play.

Det är bara uppstarten. Väl igång driver enheter ifrån varandra. Nätverksjitter lägger till några millisekunder av slumpmässighet till varje kommando. Interna klockor är inte perfekt synkroniserade — en högtalare som kör vid 44 099,8 Hz istället för 44 100 Hz driver ungefär 150 ms under en timme. Vissa enheter pausar kort under WiFi-kanalbyten. Vissa buffrar aggressivt och ignorerar sökkommandon. Vissa rapporterar sin uppspelningsposition korrekt; andra avrundar till närmaste sekund.

Inget av dessa problem är individuellt katastrofalt. Men kombinerat i ett hus fullt av olika högtalare adderas det snabbt.

Protokolllandskapet

Fyra stora protokoll hanterar multi-room-ljud idag. Var och ett tar en annorlunda approach till synkproblemet.

SonosAirPlay 2ChromecastUPnP/DLNA
EkosystemEnbart SonosEnbart AppleEnbart GoogleÖppen standard
Synkprecision~1 ms (proprietärt mesh)~5–20 ms (Apple-optimerat)~50–200 ms (Cast-grupper)Ingen inbyggd synk
GrupperingInbyggd, utmärktInbyggd, braInbyggd, hyfsadIngen grupperingsstandard
EnhetsutbudEnbart Sonos-högtalareApple + licensieradeCast-aktiveradeReceivrar, TV-apparater, streamers, högtalare — hundratals märken
Android-stödEnbart via Sonos-appenInte tillgängligtJaJa

Sonos löser synk med proprietär hårdvara — deras högtalare bildar ett mesh-nätverk med mikrosekund-precis klocksynkronisering. Det är guldstandarden, men du är låst till Sonos-hårdvara.

AirPlay 2 använder Apples tidssynkroniseringsprotokoll för att hålla högtalare synkade. Det fungerar bra, men det är enbart Apple. Inget alternativ på Android.

Chromecast-grupper fungerar rimligt bra inom Google-ekosystemet. Du skapar en högtalargrupp i Google Home, och Cast-aktiverade appar kan rikta mot gruppen. Synk är hyfsad — vanligtvis inom 50–200 ms — men systemet är slutet. Bara Cast-aktiverade enheter deltar.

UPnP/DLNA är den öppna standarden. Den fungerar med det bredaste utbudet av hårdvara — Denon-receivrar, Yamaha-soundbars, Panasonic Blu-ray-spelare, WiiM-streamers, smart-TV-apparater och mer. Haken: UPnP har absolut inget koncept för enhetsgruppering eller synkroniserad uppspelning. Specifikationen adresserar det helt enkelt inte. Varje renderer behandlas som en oberoende enhet.

De flesta lever inte helt inom ett ekosystem. Du har receivern du köpte för fem år sedan, Chromecast:en i sovrummet, smart-TV:n i vardagsrummet och kanske en Bluetooth-högtalare på altanen. Inget enskilt protokoll täcker alla.

Utmaningen med flera protokoll

Det här är luckan som de flesta musikappar lämnar vidöppen.

Spotify Connect fungerar utmärkt — med Spotify Connect-enheter. Google Home grupperar Chromecast:ar perfekt — men bara Chromecast:ar. Din Denon-receiver stöder UPnP och AirPlay, men din Chromecast talar inte UPnP, och din Android-telefon talar inte AirPlay.

Vad händer då när du vill att kökets Chromecast och vardagsrummets Denon-receiver ska spela samma låt samtidigt? I de flesta appar: ingenting. Du väljer en enhet. Det andra rummet förblir tyst.

Det underliggande problemet är arkitekturellt. De flesta appar är byggda runt ett enda utgångsparadigm — de skickar ljud till en destination. Multi-room kräver en fundamentalt annorlunda modell: en enda sanningskälla för vad som spelas, som fläktar ut till flera destinationer med det protokoll varje enhet förstår, och sedan kontinuerligt övervakar och korrigerar drift över alla.

Hur vi byggde multi-room i Echobox

Vi kallar dem utgångsgrupper. Du väljer enheterna du vill ha — vilken kombination som helst av UPnP-renderare, Chromecast-enheter och din telefons egen utgång — och Echobox skapar en grupp som koordinerar uppspelningen över alla.

Kärnidén är enkel. Echobox upprätthåller en enda uppspelningstidslinje — en auktoritativ post över vilket spår som spelas och vilken position det är på. När du trycker play fläktar gruppkoordinatorn ut play-kommandon till varje enhet i gruppen med varje enhets inbyggda protokoll: SOAP-kommandon för UPnP-renderare, Cast SDK för Chromecast:ar och den lokala ljudmotorn för din telefon.

Att få dem att starta vid ungefär samma tid var den första utmaningen. Olika enheter har vitt skilda uppstartslatenser — en Chromecast kan behöva 500 ms för att buffra och börja, medan en UPnP-renderer behöver 300 ms och den lokala motorn behöver nästan ingenting. Så vi förskjuter play-kommandona: den långsammaste enheten får sitt kommando först, sedan väntar vi, sedan skickar vi till den näst långsammaste, och så vidare. Timingen använder absoluta klockreferenser snarare än kumulativa fördröjningar, så exekveringstiden för varje kommando kastar inte av schemat.

Vi lade månader på att få driftkorrigeringen rätt. Den första versionen var fruktansvärd — den överkorrigerade och skapade hörbara hopp, eller underkorrigerade och lät enheter driva isär under minuter.

Det nuvarande systemet fungerar så här: när alla enheter spelar pollar Echobox varje enhet efter dess aktuella uppspelningsposition ungefär en gång per sekund. Det jämför varje enhets rapporterade position mot var den borde vara baserat på synkankaret — en referenspunkt som knyter en väggklocketid till en mediaposition. Om en enhet rapporterar att den är vid 1:23,400 men ankaret säger att den borde vara vid 1:23,650 är det 250 ms drift.

Vad som händer härnäst beror på enheten.

Per-enhetsintelligens är kritisk här. Echobox upprätthåller en profil för varje enhet den har sett, byggd från tre lager: vad enheten annonserar om sig själv, vad vi vet om dess familj (alla Denon-receivrar beter sig liknande) och vad vi har observerat under körning. En Denon AVR med pålitlig sökning får strikta drifttrösklar — vi korrigerar vid 150 ms drift med ett sökkommando. En generisk DLNA TV med opålitlig sökning får mycket bredare tolerans — 500 ms innan vi ens flaggar det, och vi kanske hoppar över korrigeringar helt om sökning har misslyckats för många gånger. Systemet lär sig: om en enhets sökkommandon misslyckas 70% av tiden slutar Echobox att försöka sökkorrigera den enheten och accepterar lösare synk. Se vår guide om UPnP-streaming för mer om hur enhetskapaciteter detekteras.

UPnP har ingen inbyggd grupperingsstandard, så vi var tvungna att bygga koordineringslagret själva. Varje UPnP-renderer i en grupp får sina egna SOAP-kommandon — SetAVTransportURI, Play, Seek — som om den vore den enda enheten som spelar. Koordineringslagret ser bara till att dessa kommandon skickas ut i rätt ordning med rätt timing.

En sak vi är särskilt stolta över: din telefon kan spela lokalt och till nätverksenheter samtidigt. Den lokala motorn läser direkt från ljudbufferten med under 10 ms latens, medan samma spår strömmar till nätverksenheter via HTTP. Det innebär att du kan gå runt med hörlurar anslutna via Bluetooth medan högtalare i huset spelar samma musik. Den lokala Android-ljudvägen hanterar sin egen timing oberoende, så lokal uppspelning försämras aldrig av nätverkskoordineringens overhead.

När en enhet faller bort — WiFi-hicka, högtalare somnar — panikerar inte systemet. Det spårar konsekutiva misslyckanden och markerar en enhet som misslyckad först efter fem missade pollningar. Om den kommer tillbaka återställs den efter tre lyckade pollningar. Detta förhindrar gruppen från att ständigt växla enheter in och ut när nätverksförhållandena är marginella.

Ärligt talat var den svåraste delen inte någon enskild teknisk utmaning. Det var att få systemet att fungera tillförlitligt över den enorma mångfalden av enheter där ute. En firmwareuppdatering för en tillverkares högtalare ändrade deras sökbeteende. Vissa renderare rapporterar position i heltalssekunder, vilket gör sub-sekund driftdetektering omöjlig. Vissa Chromecast-modeller tar så lång tid att starta att de redan är en hel sekund efter när ljudet börjar. Varje egenhet behövde sin egen lösning, och systemet var tvunget att degradera gracefullt snarare än att bryta helt.

Praktiska installationstips

Nätverkskrav. Alla enheter behöver vara på samma subnät. Om du har ett mesh-WiFi-system med separata IoT- och huvudnätverk behöver dina högtalare och telefon vara på samma. SSDP multicast-upptäckt behöver fungera — vissa enterprise-grads routrar blockerar multicast som standard. Om Echobox inte kan hitta dina UPnP-enheter är multicast-filtrering det första att kontrollera.

WiFi-stabilitet spelar mer roll än hastighet. Multi-room-ljud behöver inte mycket bandbredd — även okomprimerat CD-kvalitetsljud är bara ungefär 1,4 Mbps. Men det behöver konsekvent latens. Om ditt WiFi tappar paket eller har intermittent trängsel kommer drift att ackumuleras snabbare än korrigeringssystemet kan kompensera. Ett 5 GHz-nätverk ger generellt mer konsekvent latens än 2,4 GHz, men 2,4 GHz har bättre räckvidd genom väggar.

Välja enheter för grupper. För strängast synk, gruppera enheter med liknande egenskaper. Två UPnP-receivrar från samma tillverkare håller sig synkade bättre än en Chromecast ihopparad med en UPnP-TV. Med det sagt fungerar blandade grupper — ställ bara in dina förväntningar därefter. Två UPnP-streamers kanske håller sig inom 50 ms; en Chromecast plus en UPnP-renderer hamnar kanske runt 200 ms.

Hantera latensförväntningar. Hårdvarusynkade system som Sonos uppnår 1–5 ms precision eftersom högtalarna delar klocka. Mjukvarukoordinerad synk via WiFi, som är vad varje korsprotokoll-lösning använder, toppar vid ungefär 30–50 ms i bästa fall. För bakgrundslyssning — musik som spelas genom huset medan du lagar mat eller arbetar — är allt under 200 ms bra. Du märker bara drift om du står i en dörröppning mellan två rum.

När du ska använda vad. Om du har flera Chromecast-enheter är det enklare att skapa en Google Home-högtalargrupp för dem, och den kommer att synka bättre än appnivåkoordinering. Använd Echobox-grupper för de fall som inbyggd gruppering inte klarar: att blanda Chromecast med UPnP, lägga till din telefon som gruppmedlem, eller gruppera UPnP-enheter som inte har något inbyggt grupperingsstöd alls. De två tillvägagångssätten utesluter inte varandra — du kan använda Chromecast-grupper för vissa rum och Echobox-grupper för andra.

Felsökning. Om en enhet konsekvent visar hög drift, kontrollera dess WiFi-signalstyrka först. Svagt WiFi innebär variabel latens, vilket innebär att synkmotorn ständigt jagar ett rörligt mål. Om en specifik enhet orsakar problem i grupper men fungerar bra ensam kan den ha firmware-egenheter som påverkar sökning eller positionsrapportering — Echobox signalvägsdiagnostik visar dig enhetens profil, inklusive dess synk-lämplighetsbetyg och eventuella inlärda observationer om dess beteende.

Var saker står

Multi-room över olika protokoll är ett svårt problem, och vi låtsas inte att det är perfekt löst. Mjukvarukoordinerad synk kommer aldrig att matcha hårdvarusynkade system som Sonos för kritisk lyssning. Vissa enheter har firmware-egenheter vi inte har stött på ännu. Positionsrapporteringens precision varierar vilt mellan tillverkare.

Men för det verkliga scenariot — olika högtalare från olika epoker och olika märken, alla som spelar ditt musikbibliotek synkroniserat från din telefon — fungerar det. Inte med audiofil-precision i synkroniseringen, men med den typ av precision som gör hela-huset-lyssning genuint njutbar. Och systemet blir smartare över tid: varje uppspelningssession lär Echobox lite mer om hur varje enhet beter sig, och stramar åt korrigeringar för pålitliga enheter och slappnar av för nyckfulla.


Relaterade guider


Testa Echobox

Upplev det som dessa guider beskriver — precisionsuppspelning på Android.

Ett mejl per milstolpe. Inget brus.