Mike Kazantsev <[email protected]> writes: > On Sun, 01 Dec 2019 13:12:52 -0500 > Yoni Rabkin <[email protected]> wrote: > >> Mike Kazantsev <[email protected]> writes: >> >> > Guess for players without extensive APIs or stream metadata processing >> > it can be implemented via timer with http request. >> >> In fact, I implemented it for Emms many (too many) years ago completely >> in elisp. It actually worked, and was a fun hack, but of course locked >> up Emacs as it did so. > > Note that it's not inevitable these days - emacs has fully async > sockets, where as far as I know (and was able to test with mpv), > neither connection nor reception should block, only cpu-bound > processing, which should be pretty liteweight in this case. > > So I think it should be possible to do fully in elisp, and don't think > there are different standards for these tags - everything uses icy, > and did for more than a decade now, though haven't looked too closely, > and might be wrong.
Icy metadata spliced into the stream was, and still is, an ugly and unstructured kludge. I would want to avoid it if possible, and fall back to it if needed. "Modern" icecast servers provide the information in a standard, structured way: http://icecast.org/docs/icecast-2.4.1/server-stats.html For instance, $ curl -H "Icy-MetaData: 1" -v "http://audio-mp3.ibiblio.org:8000/status-json.xsl" Reports an Icecast 2.4.4 server along with a host of structured data at that address. ...while $ curl -H "Icy-MetaData: 1" -v "http://stream0.wfmu.org/freeform-high.mp3" >/dev/null Reports an Icecast 2.3.3 server and exposes nothing at "/status-json.xsl" We need to re-write emms-stream-info.el in any case. -- "Cut your own wood and it will warm you twice"
