Intro

Identification of the content of internet streams was not well cared for in the past. Also there is no complete specification for the current way of adding information to the stream. This website tries to solve this and it is planned as a primary source for internet stream metainformation.

If you want to contribute to this document, please make a pull request to the gitlab project.

External links

Version 1

Headers

icy-pub [Number]

This tag is used to specify if the stream should be indexed in shoutcasts own index.

Possible values are 0 and 1. 0 means NOT public. 1 means public.

icy-audio-info [String]

This is a multivalue field which can have one or multiples of the following items:

  • sample rate
  • quality
  • channels
  • bitrate

Examples:

  • icy-audio-info: ice-samplerate=44100;ice-bitrate=128;ice-channels=2
  • icy-audio-info: ice-samplerate=22050;ice-bitrate=64;ice-channels=1

content-type [String]

Stream encoding type. More details at mozilla

Examples:

  • content-type: audio/flac
  • content-type: audio/mpeg
  • content-type: audio/ogg
  • content-type: video/ogg

More examples at IANA

icy-name [String]

Name of the stream or the station. It should be short to the point because it will most likely be displayed in lists with many streams.

Examples:

  • icy-name: Smurf City 88.5
  • icy-name: Good vibrations radio

icy-description [String]

A longer description of a station.

Examples:

  • icy-description: The number 1 stream of smurf city!
  • icy-description: We are all made of vibrations.

icy-url [String]

Homepage of the stream. This is not the stream url, but some kind of stream homepage.

Examples:

  • icy-url: http://www.smurf-town.com
  • icy-url: https://www.good-vibrations-radio.com
  • icy-url: https://www.channel1radio.com/jazz/

icy-br [Number]

Bitrate as a number in kilobits per second.

Examples:

  • icy-br: 128
  • icy-br: 256

icy-genre [String]

Multiple tags split up by comma that describe the station.

Examples:

  • icy-genre: jazz,classical
  • icy-genre: pop

icy-sr [Number]

Sampling rate of the stream in Hz.

Examples:

  • icy-sr: 44100
  • icy-sr: 22050

Version 2

This is a proposed standard. It supports all headers of version 1 and adds some more.

Metainformation may now also be provided by putting json files to the root of the website of the stream.

Headers

icy-logo [String]

Url of a logo for this stream, should be in JPG or PNG format. (e.g.: http://example.com/logo.png)

icy-main-stream-url [String]

Link to the main url of this stream. This may be used by stream providers to direct indexers to the main publicly exposed url. Indexers should update their database accordingly. May also be used to redirect the users to a load balanced version of the stream.

icy-version [Number]

The version of this header. 1 is the default. 2 is an extension to the default which is compatible to 1 but adds more headers.

icy-index-metadata [Number]

Use all of header metadata. This is mainly used to force indexers to update their information. 0 means NO. 1 means YES. The problem this header tries to solve is the following:

  • A lot of streams do have wrong metadata set. This is because a lot of operators just keep the default values of the server software.
  • Automatic indexers that use this information to override their database, should know that they actually can trust the information.
  • For that this header should always be 0 by default. It has to be a conscious decision to set it to 1.

icy-country-code [String]

The 2 letter code of the country the stream is located in. Legal values are specified in ISO 3166-1.

Examples:

  • icy-country-code: AT
  • icy-country-code: DE
  • icy-country-code: UK

More examples on wikipedia

icy-country-subdivison-code [String]

Code that specifies the subdivision of the country this stream is located in. Legal values are specified in ISO 3166-2.

Examples:

  • icy-country-subdivison-code: AT-1
  • icy-country-subdivison-code: AM-ER

More examples on wikipedia

icy-language-codes [String]

This is a multivalue field because streams can use multiple languages. It should be sorted starting from the most used to the least used. It does accept 2 letter codes (ISO-639-1) and 3 letter codes (ISO-639-3)

Examples:

  • icy-language-codes: en
  • icy-language-codes: de
  • icy-language-codes: eng,deu
  • icy-language-codes: zh,cmn

More examples on wikipedia ISO 639-1 ISO 639-3.

icy-geo-lat-long [Number]

Geo information, latitude and longitude of the streaming station. Can be used to map the stream to a point on the globe.

Examples:

  • icy-geo-lat-long: 40.684144,-20.37592
  • icy-geo-lat-long: 10.2349872, 33.21974

icy-do-not-index [Number]

If a stream operator wants this stream to be absolutely private, this option can be set to 1. The default value is 0.

Examples:

  • icy-do-not-index: 1
  • icy-do-not-index: 0

Meta-data files

A lot of times the operator of the stream does not have the means of adding new headers to the stream, because they use some kind of distribution provider. This way they don't have to care so much about getting the stream to the enduser but the configuration systems of those providers are often quite limited.

To fix this problem we assume the following:

  • It is possible for the stream owner to change at least the homepage information of version 1 headers. (The information in the header field "icy-url")
  • They are able to put an additonal file on this website.

Stream meta-data file

The information in this file is basically the same as in the headers. But the information in this file overrides the headers and extends it, where the headers do not support the highest version. The filename is always built using the "icy-url" and the filename "streaminfo.json".

Examples:

  • an icy-url of "http://my.superradio.com" will produce:

    http://my.superradio.com/streaminfo.json

  • an icy-url of "https://goodstreaming.com/channel1" will produce:

    https://goodstreaming.com/channel1/streaminfo.json

The field names are exactly the same as the header names.

Example content of the file streaminfo.json:

{
    "icy-index-metadata": 1,
    "icy-version": 2,
    "icy-name": "Super radio",
    "icy-description": "This is the super radio of the world.",
    "icy-genre": "jazz,classical",
    "icy-language-codes": "eng,deu",
    "icy-country-code": "AT",
    "icy-country-subdivison-code": "AT-1",
    "icy-logo": "https://super.radio.com/favicon.png"
}

If you want your stream to to be removed from any index you have to use the following file:

{
    "icy-index-metadata": 1,
    "icy-version": 2,
    "icy-do-not-index": 1
}