---
title: "Icecast Metadata"
slug: "icecast-metadata"
tags: ["icecast", "metadata"]
updated: 2025-11-28T18:17:35Z
published: 2025-11-28T18:17:35Z
---

> ## Documentation Index
> Fetch the complete documentation index at: https://help.tritondigital.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Icecast Metadata

Metadata is delivered to the server in a method called "out-of-band." That is, while a single TCP connection to the MR server delivers MP3 or AAC audio data, the metadata (song and ad markers) are delivered via separate HTTP transaction to the server independently of the audio data. Metadata is sent to the MR server using the HTTP GET method.

## Send Metadata

Metadata can be sent to the MR server at any time while broadcasting with a simple HTTP request.

- It can be used to send **Artist** and **Title** information to connected listeners for the current playing track.
- In theory, metadata can be used to insert ad markers. Unfortunately the metadata channel is not in sync with the audio channel, so the timing may not be perfect and could fluctuate over time. Therefore, we do not recommend using ad markers for dynamic ad insertions of mid-rolls, unless the quality and timing for that station are not important.
- With custom work, you can use this to send liner notes or other non-track relayed messages to connected listeners.

### **GET Method**

```plaintext
GET /admin/metadata?mount=/MOUNTNAME&mode=updinfo&song=Song+-+Title&url=UrlEncodedSubParameters HTTP/1.0\r\n
Authorization: Basic c291cmNlOmhhY2ttZQ==\r\n
\r\n
```

### Response

| Response Code | Description |
| --- | --- |
| 200 | Success. |
| 400 | Invalid Request or Invalid Mount Name. |
| 401 | Invalid Password. |
| 404 | Unknown Mount or Temporarily Disabled. |
| 500 | Server Unavailable. |

The **GET** code block shown above is an example HTTP URL that you must create to send to the Triton Digital MediaRelay to insert stream events (Song event and mid-roll ad breaks).

The**song**and**url**parameters are needed to support metadata updates.

### Song Parameter

The**song=**parameter is a free-form text field not officially described, but over the years has worked out the following format:

| Format |
| --- |
| **song=Title** |
| **song=Artist - Title** |
| **song=Artist - Album - Title** |

Triton has added support for a new**song=**format that provides improved metadata include Ad replacement and injection. It is discussed further down in this document as [TildeATS](/docs/icecast-metadata#tildeats-metadata-format).

### URL Parameter

The**url=**parameter can be used to provide additional information about the current event, be it a song/track start or a mid-roll ad break.

If the**url=**parameter is used, then the**song=**parameter is ignored.

The**url=**parameter can contain a URL-encoded sub-parameter list of**songtype**,**style**,**duration**,**title**,**artist**, and**album**.

- **songtype**of "**S**" indicates a song or block of content start.
- **songtype**of "**A**" indicates the start of an ad break. This will trigger a mid-roll ad break.
- **style**of "**block**" indicates the start of an ad block. This will trigger a mid-roll ad block; any other form of metadata will be ignored until a**songtype**of "**S**" and/or**style**of "**default**" is received.
- **duration**indicates the length of the current event in seconds (optional but recommended).
- **title**indicates the title of the current event. It can be empty (optional).
- **artist**indicates the artist of the current event. Ignored if**songtype**is**A**(optional).
- **album**indicates the album of the current event. Ignored if**songtype**is**A**(optional).

#### Sub-Parameters

Sub-parameters are identical in format to standard URL parameters, but URL-encoded as a single value for the**url=**parameter.

`title=Vogue&amp;artist=Madonna&amp;duration=300&amp;songtype=S`

...needs to be delivered as:

`url=title%3DVogue%26artist%3DMadonna%26duration%3D300%26songtype%3DS`

## Ad Injection for Icecast

With the Icecast v2 protocol, because metadata is transported on a separate HTTP connection, this can create alignment issues with ad insertion for mid-rolls. Therefore, Triton recommends only using pre-roll ad insertion when using Icecast.

Note that a few seconds of misalignment for song metadata does not significantly degrade the listener's experience, so it's acceptable to use icecast to pass song metadata.

## Icecast Metadata Timing

Metadata can be sent at any time from your broadcasting tool. It is best to make this as accurate as possible given the live "out-of-band" nature of the metadata method.

Once the "content" and the "metadata" arrive at the Triton "origin" server, that timing/synchronization will be carried forward through the system in "lock step" and will not have any further time drift.

Shoutcast/Icecast playback by listeners can and will re-introduce time drift. This is easily solved by using HLS- or FLV-based client players instead.

## Metadata Examples

| Metadata Type/Metadata | Duration | Comment | Example |
| --- | --- | --- | --- |
| Song Start "Madonna - Vogue" | 3 min. 20 sec. |  | http://source:mount_password@server:port/admin/metadata?mount=/MOUNTNAME&mode=updinfo&song=notUsed&url=duration%3D200%26songtype%3DS%26artist%3DMadonna%26title%3Dvogue url sub parameters sent : duration=200&songtype=S |
| Ad Break "Targeted Ad" | 30 seconds |  | http://source:mount_password@server:port/admin/metadata?mount=/MOUNTNAME&mode=updinfo&song=notUsed&url=title%3DTargeted%20%E2%80%8BAd%20Break%3D%26duration%3D30%26songtype%3DA url sub parameters sent : title=Targeted Ad Break=&duration=30&songtype=A |
| End Break *No title needed* | Not needed | Required to end an ad break if you are using ads in a news or live show where there are no 'title' updates in the broadcast. | http://source:mount_password@server:port/admin/metadata?mount=/MOUNTNAME&mode=updinfo&song=&url=songtype%3DS url sub parameters sent : songtype=S |

## TildeATS Metadata Format

Some Icecast broadcast tools are not capable of populating the**url**parameter. This has limited metadata to only providing classic**Artist - Title**strings, referred to as **ATS format**. This precludes ad replacement/injection, as there is no parsing of the**song**parameter. Triton has added support for**song**based extended metadata that enables more Icecast broadcast tools, including the option for ads.

Triton has already recognized**song=Artist - Title**encoded as**Artist%20-%20Title**where a space-hypen-space "**-**" separates **Artist** and **Title**.

We now recognize a new separator:**space-tilde-space**where a tilde ("**~**") gives you more options/control when your tools do not allow using the**url**.

- The tilde-separated string must contain a **minimum of four fields**:
  - artist
  - title
  - duration in seconds
  - category number
- The tilde-separated string must be **terminated with the caret "^" character**.
- The tildes must have a **leading and trailing space** "**~**"

**Example Track Metadata:**

`Billie Eilish ~ Bad Guy ~ 246 ~ 0 ^`

URL Encoded as:

`song=Billie%20Eilish%20~%20Bad%20Guy%20~%20246%20~%200%20%5E`

If the duration is not known,**0**must be provided.

**Example for Ad Replacement:**

`Break ~ Break ~ 60 ~ 4 ^`

URL encoded as:

`song=Break%20~%20Break%20~%2030%20~%204%20%5E`

**Example for Ad Insertion with a default 1 ad insert:**

`Break ~ Break ~ 30 ~ 4 ~ I ^`

URL Encoded as:

`song=Break%20~%20Break%20~%2030%20~%204%20~%20I%20%5E`

**Example for Ad Insertion with a specific count:**

`Break ~ Break ~ 30 ~ 4 ~ I ~ 3 ^`

URL Encoded as:

`song=Break%20~%20Break%20~%2030%20~%204%20~%20I%20~%203%20%5E`

#### Categories

At this time only two categories are processed:

- Music (**0**)
- Commercial (**4**)

All other categories are accepted and processed as an **End Break** event.

The known categories at this time are:

- Music:**0**
- Jingle:**1**
- Sweeper:**2**
- Voice:**3**
- Commercial:**4**
- InternetStream:**5**
- Other:**6**
- VDF:**7**
- Podcast:**8**
- Request:**9**
- News:**10**
- PlaylistEvent:**11**
- FilebyDate:**12**
- NewestfromFolder:**13**
- Teaser:**14**

##### Ignore Metadata Event Feature (##)

An additional feature allows you to have Triton ignore a metadata event yet still be processed as an **End Break**. This allows you to terminate a break event that will not end up in a SoundExchange report by accident.

Any**song=**string starting with two hashes "**##**" are ignored in this way.

**Examples:**

`##Ignored - Event`

`##Ignored ~ Event ~ 300 ~ 0 ^`
