7

I need to add additional metadata to an Icecast stream (beyond Artist and Song Title). I've tried a number of ideas but none seems to yield anything. The situation is made more complicated in that the metadata also passes through Wowza, which is re-streaming the Icecast stream. Is there a canonical list of metadata fields supported by Icecast, and does anyone have experience passing custom metadata as part of an Icecast stream and on to Wowza?

plainprogrammer
  • 584
  • 3
  • 12

2 Answers2

6

My node-icy module is capable in reading in an arbitrary Icecast stream and intercepting and/or adding "metadata" events to an output stream. You are essentially "proxying" the stream. A good (though slightly complicated) example might be here: proxy.js

Do note though that the "metadata" format is a semicolon-delimited String of key-value pairs, but Icecast clients only react to the StreamTitle value, so just stuff all the information you want into there:

StreamTitle='Pink Floyd - Welcome to the Machine';

I've done things like send a metadata event every second to keep a track position counter (though that may have been a little network-heavy):

StreamTitle='Pink Floyd - Welcome to the Machine (0:12/4:02)';

Good luck!

TooTallNate
  • 1,440
  • 2
  • 19
  • 39
  • can you clarify the setup please? I'm adding metadata with non-standard keywords using liquidsoap, which then passes on the stream to icecast. icecast (2.4.0) hardcodes both StreamTitle as you indicated, as well as the update time. So your module would be between icecast and the client reading the audio part of the stream, in charge of updating metadata every second? – slv Apr 10 '16 at 16:53
1

Though it's a bit complicated, the Savonet/Liquidsoap scripting language has facilities to modify/set stream metadata. There's a couple examples in the Liquidsoap wiki at https://wiki.sourcefabric.org/display/LS/UserScripts

joat
  • 119
  • 6