Hello everyone,
it seems there is an implementation issue in recent Echo Dot firmwares, when the AudioPlayer is used to reproduce a live stream (Shoutcast/Icecast). I don't know if this affects other Alexa devices; it doesn't seem to affect the Android Alexa app however.
When a stream is played by a skill in the AudioPlayer, the "Icy-MetaData: 1" header is included in the request: this makes the streaming server return the ICY metadata inside the stream, and the "icy-metaint" header is returned in the response to report the metadata insertion interval.
The issue is that the response headers are evaluated as case-sensitive on Echo Dot side, so the exact "icy-metaint" header is searched, and other case variations such as "Icy-Metaint" are ignored: in this case, metadata are present in the stream but not parsed by the player, resulting in a totally corrupted decoding.
This is not compliant to the specifications: RFC 7230, section 3.2 clearly states that headers are case insensitive. When used as a reverse proxy, Caddy Server, like everything that uses the standard Golang library, canonicalizes the header names, and so that "icy-metaint" becomes "Icy-Metaint", producing this effect.
I'm writing this so that if someone else is struggling with sudden corrupted decoding has a clue about what's going on, and also hoping that this can be seen by someone in the Echo Dot dev team to fix it :)