Repository navigation
Show the current title on the speaker display without the ~1 s audio gap (like the old Bose cloud) #500
Replies: 13 comments 18 replies
|
User proposes sending the live ICY title to the speaker display over the gabbo/marge nowPlaying push channel instead of re-pushing the UPnP transport, which would avoid the ~1 s audio gap. He offers his ST20 for testing. Hi @meierchen006, your analysis is right in every step but the last one, and I can save you the experiment: I tried exactly that on hardware on 5 July, on a Portable. A second gabbo client sent a The reason the old cloud managed it is not that it had a special channel: with native TuneIn the speaker's own source was playing the stream, so it owned the now playing text and updated its display internally. Nothing was injected from outside. STR is outside, and the only route from outside is the transport, which re-buffers. Your ICY observation is the other half of the same wall: boxWantsICY=false means the firmware declines to read the title inband, which would have been the gap-free path. So the display stays opt-in with the short interruption, and I am closing #199, which tracked this idea, with the same finding so nobody spends another evening on it. Thanks for the offer of the ST20 and for thinking it through this far. Hi @meierchen006, deine Analyse stimmt bis auf den letzten Schritt, und den Versuch kann ich dir ersparen: Ich habe genau das am 5. Juli an echter Hardware getestet, an einer Portable. Ein zweiter gabbo-Client hat der Box im laufenden Radiobetrieb einen Dass die alte Cloud das konnte, lag nicht an einem besonderen Kanal: Bei nativem TuneIn hat die Box den Stream selbst abgespielt, also gehörte ihr der Titel und sie hat ihr Display intern aktualisiert. Von außen wurde nichts eingespielt. STR ist außen, und von außen führt nur der Transportweg hin, und der puffert neu. Deine ICY-Beobachtung ist die andere Hälfte derselben Wand: boxWantsICY=false heißt, die Firmware liest den Titel nicht inband, das wäre der lückenlose Weg gewesen. Die Anzeige bleibt also optional mit der kurzen Unterbrechung, und ich schließe #199, wo diese Idee lief, mit demselben Ergebnis, damit niemand noch einen Abend darauf verwendet. Danke für das Angebot mit der ST20 und dafür, dass du das so weit durchdacht hast. |
|
Hallo Jens @JRpersonal Danke für die ausführliche Antwort — und dafür, dass du den gabbo-Weg extra an echter Hardware Ein Gedanke noch, der genau an deiner eigenen Erklärung ansetzt — du schriebst ja: „die Box Die Idee: Sender über Was ich dazu selbst geprüft habe (damit's nicht naiv rüberkommt): Auf meiner ST20 ist Deshalb keine Forderung, sondern eine ehrliche Frage: Hast du den nativen Viele Grüße |
|
Hi @meierchen006, (English summary: about serving radio through the box's native LOCAL_INTERNET_RADIO source with an emulated backend. Answer: yes, that is the planned durable path; the open question is the metadata mechanism, and help with pre-shutdown captures or protocol knowledge is very welcome.) In English: I have looked at this path, and it is the direction I want to take for the durable fix, not just for the display. The source drops out of /sources because the firmware only advertises it while its backend answers, so STR's local cloud emulation would have to stand in for that backend too: station list plus the now-playing feed. Whether the box then reads titles inband from ICY or insists on the emulated metadata service is the open question only a hardware test settles. This is the next larger project after the current stability work. And this is a genuinely good spot for community help. If anyone still has pre-shutdown network captures of LOCAL_INTERNET_RADIO or vtuner traffic (station list XML, the now-playing/metadata requests), knows the request shapes from other vtuner-based radios, or can lend test time on their own hardware: please post here, every capture shortens the reverse engineering considerably. Auf Deutsch: ja, diesen Weg habe ich auf dem Zettel, und zwar als Dauerlösung, nicht nur fürs Display. Die Quelle verschwindet aus /sources, weil die Firmware sie nur anbietet, solange ihr Backend antwortet. STR emuliert die Bose-Cloud ja bereits lokal, also ist der Plan, auch dieses Backend nachzubilden: Senderliste plus now-playing-Feed. Ob die Box den Titel dann inband aus ICY liest oder zwingend den Metadaten-Dienst erwartet, entscheidet nur ein Test an echter Hardware. Es ist das nächste größere Projekt nach der aktuellen Stabilitätsarbeit, versprechen kann ich noch nichts. Und genau hier kann die Community richtig helfen: Falls noch jemand Netzwerk-Mitschnitte von LOCAL_INTERNET_RADIO oder vtuner aus der Zeit vor der Abschaltung hat (Senderlisten-XML, die now-playing-Abrufe), die Request-Formate von anderen vtuner-Radios kennt oder Testzeit auf eigener Hardware beisteuern mag: gern hier in den Thread damit, jeder Mitschnitt spart uns ein gutes Stück Reverse Engineering. Dein ST20-Angebot nehme ich dafür schon mal dankend an, ich melde mich, sobald es einen Testbuild gibt. Gruß Jens |
|
Hallo Jens @JRpersonal Ich hab auf der ST20 mal einen kleinen Vorab-Test gemacht, um deiner „kritischen Unbekannten" Aufbau: kleiner ICY-Proxy auf dem PC (proxyt einen Plain-HTTP-Stream und spritzt einen Ergebnis: Die Box lehnt sofort ab: Mein Server-Log zeigt: Die Box hat die Station-URL nicht einmal abgerufen — es kam kein Was das (für mich) bedeutet: Falls es hilft: Das grenzt ein, wo alte vtuner-Mitschnitte am wertvollsten wären — nämlich Viele Grüße Nachtragmit einem Fund, der die Sache aus meiner Sicht deutlich vereinfacht — ich hab auf In der von STR verwalteten
Warum das die Machbarkeit stark verbessert:
Was ich nicht testen konnte: die exakten Requests, die die Box an den TuneIn-Endpunkt Kurz: Der Radio-Dienst ist TuneIn, und TuneIns API ist noch da. Das ist hoffentlich ein Leider bin ich die nächsten 4-5 Wochen nicht online und kann nicht weiter helfen! |
|
Hi @meierchen006, (English summary: their test showed LOCAL_INTERNET_RADIO is rejected as an unknown source before any stream request, and they identified the radio backend as TuneIn/RadioTime. Answer: the registration handshake is now solved, and here is exactly what makes the source READY.) In English: your analysis is right, and the step you identified as the real hurdle is solved. The source has to be made known through the emulated account before any station URL is touched, which is exactly why your POST /select never produced a single request on your server. Three things make it READY, and all three are needed:
With that in place the speaker activates the station by itself and pulls the stream, roughly 0.65 seconds from pressing a hardware key, with no error and without STR intervening at all. Measured on a SoundTouch 10 and a Portable, and it is in the next release. Your ICY question is now genuinely testable, and it is the part I cannot answer yet: I can see the speaker fetch the stream, but not whether it reads the title inband or expects a metadata service. Your radiotime.com find is valuable and I had not followed that thread. It is not needed to make the source READY, but it is very likely the route to browsing stations on the speaker itself. Enjoy the weeks offline, and thank you, this was a genuinely useful piece of work. Auf Deutsch: deine Analyse stimmt, und genau die Hürde, die du benannt hast, ist gelöst. Die Quelle muss über das emulierte Konto bekannt gemacht werden, bevor überhaupt eine Station-URL angefasst wird. Deshalb kam bei deinem POST /select kein einziger Request auf deinem Server an. Drei Dinge machen sie READY, und alle drei sind nötig:
Damit aktiviert der Lautsprecher die Station selbst und holt sich den Stream, etwa 0,65 Sekunden nach dem Druck auf eine Hardware-Taste, ohne Fehler und ohne dass STR eingreift. Gemessen auf einer SoundTouch 10 und einer Portable, und es ist im nächsten Release. Deine ICY-Frage lässt sich jetzt wirklich testen, und genau die kann ich noch nicht beantworten: ich sehe, dass der Lautsprecher den Stream holt, aber nicht, ob er den Titel inband liest oder einen Metadaten-Dienst erwartet. Dein radiotime.com-Fund ist wertvoll, den Faden hatte ich nicht verfolgt. Für das READY-Machen der Quelle braucht man ihn nicht, aber er ist sehr wahrscheinlich der Weg zum Senderstöbern direkt am Lautsprecher. Viel Spaß bei der Offline-Zeit, und danke, das war ein richtig nützliches Stück Arbeit. |
|
Hallo Jens, danke für die Arbeit seit August. Die schnelle Radioform ( 1. Der Aussetzer im Protokoll (Titel am Display = An, Modus „Beides")Taste 3 (SR3) an der Box gedrückt: Nächster Titelwechsel, mitten im laufenden Strom: Bei jedem Titelwechsel trennt die Box also die Verbindung, verwirft ihren Puffer und braucht wieder mindestens 1,5 s Vorlauf. Der Aussetzer ist deutlich hörbar. Zwei Nebenbefunde:
2. Getestet und verworfen:
|
|
User reports: measurements of the stream drop on every title push, and a failed SetNextAVTransportURI workaround. The empty StreamTitle already never triggers a push, your own log agrees (nothing at 13:43:47, the push came at :55 with the new title). So it is one gap per song, not two. What did cost a gap for nothing was a change that leaves the display text the same, for example two songs by the same artist in "Artist only" mode. That push is skipped from the next release on. The gap itself stays. A fresh SetAVTransportURI is the only way to put a title on the display, and the box treats it as a new play. Your 401 on SetNextAVTransportURI closed the last door I knew of, and I recorded it together with the qplay:// quirk in the firmware notes. As for TuneIn, the old client in the firmware knew a nowPlaying route on the radiotime partner host, so it very likely fetched the title itself. On 27.0.6 that client never starts, and I have never seen a box contact that host, even though STR points it at the speaker. The test that settles it is to register TUNEIN in the emulated account, play a TuneIn station and watch whether a request arrives. If you want to run that on your ST20, I would take you up on it and send you the steps. Switch off is the right setting until then. Auf Deutsch: Ein leerer StreamTitle löst schon heute keinen Push aus, dein Log zeigt das auch (um 13:43:47 nichts, der Push kam um :55 mit dem neuen Titel). Es bleibt also bei einem Aussetzer pro Song. Unnötig war dagegen ein Push, der den Displaytext gar nicht ändert, etwa zwei Songs vom selben Interpreten im Modus „Nur Interpret". Den lasse ich ab dem nächsten Release weg. Der Aussetzer selbst bleibt. Ein neues SetAVTransportURI ist der einzige Weg, einen Titel aufs Display zu bringen, und die Box behandelt das als neue Wiedergabe. Dein 401 auf SetNextAVTransportURI hat die letzte Tür zugemacht, die ich kannte. Das Ergebnis und die qplay://-Eigenheit stehen jetzt in den Firmware-Notizen. Der alte TuneIn-Client der Firmware kannte eine nowPlaying-Route auf dem radiotime-Partnerhost, hat den Titel also sehr wahrscheinlich selbst abgefragt. Auf 27.0.6 startet dieser Client aber nie, und ich habe noch keine Box gesehen, die den Host anspricht, obwohl STR ihn auf den Lautsprecher umleitet. Klären würde es ein Test, bei dem TUNEIN im emulierten Konto registriert wird, ein TuneIn-Sender läuft und man schaut, ob eine Anfrage ankommt. Wenn du das auf deiner ST20 machen magst, nehme ich das Angebot gern an und schicke dir die Schritte. Bis dahin ist „Aus" die richtige Einstellung. |
|
Hallo Jens @JRpersonal, Danke für die Erklärung, und gut, dass der unnötige Push bei unverändertem Text in v1.0.1 wegfällt. Den TuneIn-Test mache ich gern auf meiner ST20 (FW 27.0.6, jetzt STR v1.0.1). Schick mir bitte die Schritte. Mitschreiben kann ich das Agent-Log und den Netzverkehr der Box per SSH. Und falls ein bestimmter Sender als Testfall günstig ist, sag mir welcher. |
|
Hallo Jens @JRpersonal, Danke für den Hinweis mit der Uhrzeit, ich habe es eben nachgeprüft. Die Uhrzeit ist es nicht. Heute 08:27–08:32, ST20, STR v1.0.4,
Die ST20 holt den Sendungsnamen also nicht, anders als deine Portable. Auf der ST20 steht in Falls die Lisa-Firmware Now-Playing über genau diesen radiotime-Host abfragt, landet es bei STR, ohne Antwort und ohne Logzeile. Rückbau erledigt, Box wieder im Normalbetrieb. agent-ST20-TuneIn-Test3-bereinigt.log Gruß |
|
User reports (German): on v1.0.8 the ST20 now shows the show name alternating with the station, and netstat showed a port-80 connection to radiotime.com. Your test confirms that since v1.0.8 the ST20 fetches the show name itself. The port-80 connection to radiotime.com may be STR's own, though, because the agent resolves stations at opml.radiotime.com and keeps that connection open. Dein Test bestätigt, dass die ST20 seit v1.0.8 den Sendungsnamen selbst holt. Die Verbindung zu radiotime.com auf Port 80 kann aber von STR selbst stammen, denn der Agent löst Sender über opml.radiotime.com auf und hält die Verbindung offen. |
|
Shipped in v1.0.13 on every SoundTouch with a display (20, 30, Portable and Wave): STR now draws the title on the display itself, so the stream is never restarted and the gap at every song change is gone. Switch it on in the speaker's settings in the app ("Show the current track on the speaker display"). Screenshots are in #1305. Tell me how it works for you. Seit v1.0.13 auf jeder SoundTouch mit Display (20, 30, Portable und Wave): STR schreibt den Titel jetzt selbst aufs Display. Der Stream wird dafür nie neu gestartet, und die Lücke bei jedem Titelwechsel ist weg. Einschalten kannst du das in den Lautsprecher-Einstellungen in der App ("Aktuellen Titel am Lautsprecher-Display anzeigen"). Screenshots findest du in #1305. Sag mir gern, wie es bei dir läuft. |




Uh oh!
There was an error while loading. Please reload this page.
Hallo Jens @JRpersonal ,
eine Idee zur Einstellung „Aktuellen Titel am Lautsprecher-Display anzeigen". Die Funktion
ist super — nur der Hinweis „setzt bei jeder Titeländerung ~1 s aus" hält mich (und
vermutlich andere) vom Aktivieren ab. Ich glaube, das ließe sich lückenlos lösen, und wollte
den Gedanken teilen.
Wie ich das Verhalten verstehe: Das Box-Display bezieht den Titel aus den
UPnP-Transport-Metadaten. Um den Text zu ändern, wird der Stream neu angestoßen → die Box
puffert neu → der ~1-s-Aussetzer. In meinem agent.log sehe ich außerdem bei jeder Station
stream proxy ICY negotiation boxWantsICY=false— die Box liest den Titel also nichtinband aus dem Stream (ICY-Metadaten wären der lückenlose Weg, aber die Firmware lehnt sie ab).
Deshalb bleibt aktuell nur der Transport-Umweg mit Neupufferung.
Der springende Punkt: Die alte Bose-Cloud hat den Radiotitel bei TuneIn ohne
Aussetzer aufs Display gebracht — nicht über den Transport, sondern als „now playing"-
Benachrichtigung über den Bose-eigenen Push-Kanal (gabbo-WebSocket :8080 / marge), getrennt
vom Audio. Die Box aktualisierte nur die Anzeige, der Ton lief lückenlos weiter.
Die Idee: STR kennt den Live-Titel ja bereits — es liest ihn aus den ICY-Metadaten des
Streams und zeigt ihn in der App/WebUI ohne Unterbrechung an (
stream proxy ICY title …imLog). Es fehlt nur der letzte Schritt: diesen Titel über denselben gabbo/marge-nowPlaying-
Notification-Weg ans Box-Display schicken, wie es die Cloud tat — statt über einen
Transport-Re-Push. Ergebnis wäre: Titel am Display und lückenloser Ton, wie früher beim
Internetradio.
Mir ist klar, dass das an der Marge-Emulation hängt und nicht trivial ist — aber da STR den
Titel schon hat und den gabbo/marge-Kanal ohnehin bedient, schien mir der Weg zumindest
plausibel. Zum Testen stelle ich meine ST20 gern zur Verfügung (Radio mit häufigen
Titelwechseln lässt sich leicht reproduzieren).
Viele Grüße
All reactions