CasterClub SSL Certificate

This website is secured with a DigiCert TLS/SSL certificate.

  • Issued To: www.casterclub.com
  • Issued By: DigiCert Inc
  • Valid From: Jan 1, 2025
  • Valid To: Dec 31, 2025
  • Encryption: 256-bit TLS 1.3

Verified independently via your browser's certificate viewer.

ICY-META v2.2 Protocol Specification

Project: Mcaster1DNAS / CasterClub Streaming Standards Initiative (CSSI) Version: 2.2 — March 2026 Maintained By: CasterClub / Mcaster1 Core Team License: Open Spec (CSSI)


Overview

ICY-META v2.2 is an extended streaming metadata protocol built on top of the original SHOUTcast ICY 1.x protocol. It preserves full backwards compatibility with all legacy source encoders and listener clients while adding rich metadata support for modern streaming workflows: live DJ sets, podcasts, video simulcasts, social integration, track-level data, station programming, listener engagement, and content compliance.

The protocol is used by Mcaster1DNAS, mcaster1TagStack, mcaster1DSPEncoder, and mcaster1CastIt, and is published as an open specification by the CasterClub Streaming Standards Initiative (CSSI) for adoption by any streaming platform or client.

All ICY2 fields are optional. Legacy ICY 1.x fields (icy-name, icy-genre, etc.) are never changed, never removed, and always parsed independently of ICY2 logic.


Protocol History

Version Origin Status Key Feature
ICY 1.x Nullsoft SHOUTcast (1999) LEGACY icy-name, icy-genre, in-stream metadata blocks
ICY2 v2.0 Icecast-KH extensions LEGACY Extended HTTP-based source connect
ICY2 v2.1 Mcaster1DNAS / CSSI (Feb 15, 2026) SUPERSEDED Station ID, podcast, video, social, content flags (icy- prefix)
ICY2 v2.2 Mcaster1DNAS / CSSI (Feb 2026) CURRENT Track metadata, artwork, show scheduling, audio technical, notices, engagement, distribution, PKI, licensing (icy-meta- prefix)

ICY 1.x Legacy Protocol — Full Specification

The original SHOUTcast ICY protocol. These headers, formats, and behaviors are preserved exactly as-is and must never be altered by any ICY2 implementation. Any server claiming ICY2 support must continue to handle ICY 1.x clients without modification.

Source Connection Headers

A source client connects to the server and sends its stream headers before audio data begins. Two connection formats exist:

Format A — SHOUTcast Legacy SOURCE

SOURCE /mountpoint HTTP/1.0
Authorization: Basic c291cmNlOnBhc3N3b3Jk
Content-Type: audio/mpeg
icy-name: My Radio Station
icy-genre: Electronic
icy-url: http://mystation.com
icy-pub: 1
icy-br: 128
icy-metaint: 8192

Format B — Icecast2 / Modern PUT

PUT /mountpoint.mp3 HTTP/1.1
Host: server.example.com:8000
Authorization: Basic c291cmNlOnBhc3N3b3Jk
Content-Type: audio/mpeg
icy-name: My Radio Station
icy-genre: Electronic
icy-url: http://mystation.com
icy-pub: 1
icy-br: 128
icy-metaint: 8192

ICY 1.x Source Headers

Header Type Description
icy-name String Station or stream display name
icy-genre String Genre or content type (e.g., Electronic, Rock)
icy-url URL Station homepage URL
icy-pub Boolean Public directory listing — 1 = yes, 0 = no
icy-br Integer Bitrate in kbps (e.g., 128, 320)
icy-metaint Integer Bytes of audio between in-stream metadata blocks (e.g., 8192)

Authentication

Field Description
Authorization: Basic Base64-encoded source:password (Icecast2)
password Source password sent inline (legacy SHOUTcast)
adminpassword Admin interface password
user Optional username for SHOUTcast v2 or Icecast2

In-Stream Metadata Block Format

ICY 1.x embeds track title changes directly inside the audio byte stream. Every metaint bytes of audio data, a metadata block is inserted:

Byte(s) Content
1 byte Block length indicator N. Actual block size = N × 16 bytes. If N = 0, no metadata follows.
N × 16 bytes Null-padded UTF-8 string in the format: StreamTitle='Artist - Title';
# Block length byte = 4  (4 × 16 = 64 bytes total)
# Content (null-padded to 64 bytes):
StreamTitle='Daft Punk - Get Lucky';StreamUrl='';

Only StreamTitle is universally supported. StreamUrl is optional. The full block is always a multiple of 16 bytes, padded with null bytes (\0).

Server Response to Listener

When a listener client connects, the server responds with ICY headers before the audio stream begins:

ICY 200 OK
icy-notice1: SHOUTcast Distributed Network Audio Server
icy-notice2: (c) 1999-2004 Nullsoft, Inc.
icy-name: My Radio Station
icy-genre: Electronic
icy-url: http://mystation.com
icy-pub: 1
icy-br: 128
icy-metaint: 8192
Content-Type: audio/mpeg

[audio stream data with embedded metadata blocks follows]

ICY2 v2.2 — Protocol Detection

A source client signals ICY2 support by including the icy-metadata-version header. The server uses prefix matching — any 2.x value triggers ICY2 parsing. Legacy ICY 1.x fields are still parsed regardless.

icy-metadata-version: 2.2
  • Value 2.x (2.0, 2.1, 2.2, etc.) → parse as ICY2
  • Header absent or non-2.x → fall back to ICY 1.x parsing only
  • ICY2 clients on ICY1 servers: unknown headers are silently ignored

Station Identity

Header Type Description
icy-meta-station-id String Unique global station ID — alphanumeric, hyphens allowed. Permanent across sessions.
icy-meta-station-logo URL Station logo or branding image URL
icy-meta-certissuer-id String Certificate authority ID for verification
icy-meta-cert-rootca String Root CA hash or fingerprint
icy-meta-certificate String Base64-encoded PEM certificate
icy-meta-ssh-pubkey String SSH public key for source authentication
icy-meta-verification-status Enum unverified | pending | verified | gold

Programming / Show Scheduling

Header Type Description
icy-meta-show-title String Current show or program title
icy-meta-show-start ISO8601 Datetime the current show started
icy-meta-show-end ISO8601 Datetime the current show ends
icy-meta-next-show String Title of the next scheduled program
icy-meta-next-show-time ISO8601 Scheduled start time of the next program
icy-meta-schedule-url URL Link to the full station program schedule
icy-meta-autodj Boolean 1 = AutoDJ/automation active, 0 = live human DJ
icy-meta-playlist-name String Current playlist or automation source name

DJ / Host

Header Type Description
icy-meta-dj-handle String Current DJ or host social handle (e.g., @djsynthwave)
icy-meta-dj-bio String Short DJ biography or tagline — max 280 characters
icy-meta-dj-genre String DJ's genre set — comma-separated, max 5 values
icy-meta-dj-showrating Enum all-ages | teen | mature | explicit

Track Metadata

Per-track fields pushed on every track change, typically by a metadata injection system (e.g., mcaster1TagStack). icy-meta-track-artwork is the primary field for player album art display.

Header Type Description
icy-meta-track-artwork URL Album or track artwork image URL
icy-meta-track-album String Album or release name
icy-meta-track-year Integer Release year
icy-meta-track-label String Record label
icy-meta-track-bpm Integer Beats per minute
icy-meta-track-key String Musical key — Camelot or standard notation (e.g., 8B, Am)
icy-meta-track-genre String Per-track genre — may differ from station genre
icy-meta-track-mbid UUID MusicBrainz Recording ID for direct track lookup
icy-meta-track-isrc String International Standard Recording Code — royalty/licensing tracking

Podcast

Header Type Description
icy-meta-podcast-host String Podcast creator or host name
icy-meta-podcast-rating Enum all-ages | teen | mature | explicit
icy-meta-podcast-rss URL Podcast RSS feed URL
icy-meta-podcast-episode String Episode title or ID (e.g., S4E1 – Decentralized Rights)
icy-meta-duration Integer Content runtime in seconds — applies to audio, podcast, or video
icy-meta-language String ISO 639-1 language tag (e.g., en, en-US, es)

Audio Technical

Reported by source encoders (e.g., mcaster1DSPEncoder). Allows directories and players to display and verify stream quality. icy-meta-loudness uses EBU R128 integrated LUFS measurement.

Header Type Description
icy-meta-audio-codec Enum mp3 | aac | aac-he | ogg | opus | flac
icy-meta-samplerate Integer Sample rate in Hz (e.g., 44100, 48000)
icy-meta-channels Integer 1 = mono, 2 = stereo, 6 = 5.1 surround
icy-meta-loudness Float Integrated loudness in LUFS per EBU R128 (e.g., -14.0)
icy-meta-encoder String Encoder software and version (e.g., Mcaster1DSP/1.2.0, BUTT/1.40)

Video Streaming

Header Type Description
icy-meta-videotype Enum live | short | clip | trailer | ad
icy-meta-videorating Enum all-ages | teen | mature | explicit
icy-meta-videolink URL Link to the video content or stream page
icy-meta-videotitle String Title of the video
icy-meta-videoposter URL Thumbnail or preview image URL
icy-meta-videochannel String Creator/channel handle
icy-meta-videoplatform Enum youtube | tiktok | twitch | kick | rumble | vimeo | custom
icy-meta-videostart ISO8601 Scheduled start datetime for the video
icy-meta-videolive Boolean 1 = currently live, 0 = pre-recorded
icy-meta-videocodec String Video codec in use (e.g., h264, vp9, av1)
icy-meta-videofps Integer Frames per second
icy-meta-videoresolution String e.g., 1080p, 4K, 720x1280
icy-meta-videonsfw Boolean Video-specific NSFW indicator

Social, Discovery & Branding

Header Type Description
icy-meta-creator-handle String Platform-agnostic public creator or brand handle
icy-meta-social-twitter String Twitter/X handle
icy-meta-social-twitch String Twitch handle
icy-meta-social-ig String Instagram username
icy-meta-social-tiktok String TikTok profile name
icy-meta-social-youtube URL YouTube channel URL — static social presence link
icy-meta-social-facebook-page URL Facebook page URL
icy-meta-social-linkedin URL LinkedIn profile URL
icy-meta-social-linktree URL Unified profile link (Linktree, Beacons, etc.)
icy-meta-emoji String Mood or emotion indicators (e.g., 🎵🔥🎧)
icy-meta-hashtag-array JSON Array Searchable tags (e.g., ["#electronic","#dj"])

Listener Engagement

Header Type Description
icy-meta-request-enabled Boolean 1 = listener song requests currently open
icy-meta-request-url URL URL for song requests or listener dedications
icy-meta-chat-url URL Live listener chat room URL
icy-meta-tip-url URL Listener donation or tip URL (Ko-fi, Patreon, PayPal)
icy-meta-events-url URL Link to upcoming station events or gigs page

Broadcast Distribution

icy-meta-crosspost-platforms lists where the content is simultaneously live — distinct from icy-meta-social-youtube which is a static channel profile link.

Header Type Description
icy-meta-crosspost-platforms String Comma-separated active live platforms (e.g., youtube,twitch,tiktok)
icy-meta-stream-session-id String Unique ID for this broadcast session — distinct from permanent station-id
icy-meta-cdn-region String CDN or distribution region (e.g., us-east, eu-west)
icy-meta-relay-origin URL Origin server URL if this mount is a relay

Station Notices

Real-time listener announcements pushed via the stream for display in ICY2-aware players and notice boards. icy-meta-notice-expires is ISO8601 — players should hide the notice after this time.

Header Type Description
icy-meta-notice String General listener notice or announcement text
icy-meta-notice-url URL Click-through URL for more information
icy-meta-notice-expires ISO8601 Datetime after which the notice should no longer display

Access, Authentication & Compliance

Header Type Description
icy-meta-auth-token JWT Optional Bearer JWT or custom access token
icy-meta-nsfw Boolean 1 = explicit content — affects directory listings
icy-meta-ai-generator Boolean 1 = AI-generated or AI-assisted content
icy-meta-geo-region String Target geographic region (e.g., US, EU, GLOBAL)
icy-meta-license-type Enum cc-by | cc-by-sa | cc0 | pro-licensed | all-rights-reserved
icy-meta-royalty-free Boolean 1 = royalty-free content
icy-meta-license-territory String Comma-separated ISO country codes (e.g., US,CA,EU) or GLOBAL

ICY2 v2.1 Backwards Compatibility

The server accepts both the v2.2 icy-meta- prefix and the original v2.1 icy- prefix forms for all ICY2-specific fields. Both always work. Clients should prefer icy-meta- going forward.

v2.1 Form (still accepted) v2.2 Standard Form
icy-station-id icy-meta-station-id
icy-podcast-host icy-meta-podcast-host
icy-podcast-rss icy-meta-podcast-rss
icy-podcast-episode icy-meta-podcast-episode
icy-duration icy-meta-duration
icy-language icy-meta-language
icy-video-type icy-meta-videotype
icy-video-link icy-meta-videolink
icy-video-platform icy-meta-videoplatform
icy-dj-handle icy-meta-dj-handle
icy-social-twitter icy-meta-social-twitter
icy-social-ig icy-meta-social-ig
icy-social-tiktok icy-meta-social-tiktok
icy-emoji icy-meta-emoji
icy-hashtags icy-meta-hashtag-array
icy-auth-token icy-meta-auth-token
icy-nsfw icy-meta-nsfw
icy-ai-generated icy-meta-ai-generator
icy-geo-region icy-meta-geo-region
icy-verification-status icy-meta-verification-status

Use Cases & Examples

Live DJ Set

icy-metadata-version: 2.2
icy-name: ChillZone FM
icy-genre: Electronic/House
icy-br: 320
icy-pub: 1
icy-meta-station-id: chillzone-fm-001
icy-meta-show-title: Late Night House Sessions
icy-meta-show-start: 2026-02-21T22:00:00Z
icy-meta-show-end: 2026-02-22T02:00:00Z
icy-meta-autodj: 0
icy-meta-dj-handle: @djsynthwave
icy-meta-dj-bio: Berlin-based electronic DJ — deep house, techno, and everything in between.
icy-meta-dj-genre: Electronic, House, Techno
icy-meta-dj-showrating: all-ages
icy-meta-track-artwork: https://cdn.example.com/art/track123.jpg
icy-meta-track-bpm: 124
icy-meta-track-key: 8B
icy-meta-track-mbid: 3a8e7c21-1234-5678-abcd-ef0123456789
icy-meta-audio-codec: mp3
icy-meta-samplerate: 44100
icy-meta-channels: 2
icy-meta-loudness: -14.0
icy-meta-request-enabled: 1
icy-meta-chat-url: https://chillzone.fm/chat
icy-meta-tip-url: https://ko-fi.com/djsynthwave
icy-meta-crosspost-platforms: youtube,twitch
icy-meta-notice: Tune in to our YouTube stream for the video feed tonight!
icy-meta-notice-expires: 2026-02-22T02:00:00Z
icy-meta-nsfw: 0
icy-meta-license-type: pro-licensed

Podcast Episode

icy-metadata-version: 2.2
icy-name: FutureTalks
icy-genre: Talk/Technology
icy-br: 128
icy-pub: 1
icy-meta-station-id: futuretalks-001
icy-meta-show-title: FutureTalks Podcast
icy-meta-podcast-host: Sasha Tran
icy-meta-podcast-rating: all-ages
icy-meta-podcast-episode: S4E1 – Decentralized Rights
icy-meta-podcast-rss: https://futuretalks.fm/feed.xml
icy-meta-duration: 3600
icy-meta-language: en
icy-meta-track-artwork: https://futuretalks.fm/episodes/s4e1.jpg
icy-meta-license-type: cc-by
icy-meta-royalty-free: 1

YouTube Simulcast

icy-metadata-version: 2.2
icy-name: ChillZone FM
icy-meta-videotype: live
icy-meta-videolink: https://youtube.com/watch?v=live543
icy-meta-videotitle: Synthwave All Night
icy-meta-videoplatform: youtube
icy-meta-videoresolution: 1080p
icy-meta-videocodec: h264
icy-meta-videofps: 60
icy-meta-videolive: 1
icy-meta-crosspost-platforms: youtube,twitch
icy-meta-stream-session-id: session-20260221-cz-001

TikTok Short-Form Push (No Audio Needed)

icy-metadata-version: 2.2
icy-name: @DropMaster
icy-meta-videotype: short
icy-meta-videolink: https://tiktok.com/@dropmaster/video/7739201
icy-meta-videochannel: @dropmaster
icy-meta-videoplatform: tiktok
icy-meta-videoposter: https://cdn.tiktok.com/posters/7739201.jpg
icy-meta-videoresolution: 720x1280
icy-meta-duration: 45
icy-meta-emoji: 🎵🔥🎥
icy-meta-hashtag-array: ["#beatdrop","#shorts","#music"]

AutoDJ with Notice

icy-metadata-version: 2.2
icy-name: ChillZone FM
icy-meta-autodj: 1
icy-meta-playlist-name: Top 40 Rotation
icy-meta-next-show: Morning Drive with DJ Kane
icy-meta-next-show-time: 2026-02-22T07:00:00Z
icy-meta-schedule-url: https://chillzone.fm/schedule
icy-meta-notice: Live show starts at 7am — DJ Kane in the morning!
icy-meta-notice-expires: 2026-02-22T07:00:00Z

v2.2 Changelog — What's New

New in v2.2 (from v2.1)

  • Prefix standardization: All ICY2 headers now use icy-meta- prefix (v2.1 icy- prefix forms still accepted)
  • Track Metadata: icy-meta-track-artwork, track-album, track-year, track-label, track-bpm, track-key, track-genre, track-mbid, track-isrc
  • Audio Technical: icy-meta-audio-codec, samplerate, channels, loudness, encoder
  • Programming/Show: icy-meta-show-title, show-start, show-end, next-show, next-show-time, schedule-url, autodj, playlist-name
  • DJ/Host: icy-meta-dj-handle, dj-bio, dj-genre, dj-showrating
  • Listener Engagement: icy-meta-request-enabled, request-url, chat-url, tip-url, events-url
  • Broadcast Distribution: icy-meta-crosspost-platforms, stream-session-id, cdn-region, relay-origin
  • Station Notices: icy-meta-notice, notice-url, notice-expires
  • Licensing: icy-meta-license-type, royalty-free, license-territory
  • Video Enhancements: icy-meta-videorating, videocodec, videofps, videoresolution, videonsfw
  • Station Identity: icy-meta-station-logo, ssh-pubkey
  • Social Expansion: icy-meta-creator-handle, social-twitch, social-youtube, social-facebook-page, social-linkedin

What Changed from v2.1

  • All v2.1 headers with icy- prefix remapped to icy-meta- canonical form
  • icy-auth-token-key renamed to icy-meta-auth-token
  • icy-meta-hashtag-array replaces icy-hashtags (same format)
  • icy-meta-ai-generator replaces icy-ai-generated
  • v2.1 forms are still parsed — no breaking changes

Integration Targets

  • DSPs: SAM Broadcaster, Edcast, BUTT, Rocket Broadcaster, Mixxx
  • Admin/GUI: mcasterClient, metadata-pusher agents
  • Directory: yp.casterclub.com via /8.json, /status.html, or /push
  • Webhook/event-forwarding for real-time content relay

Testing with cURL

Basic ICY 1.x Legacy Test

curl -k -X PUT \
  -H "icy-name: Test Station" \
  -H "icy-genre: Test" \
  -H "icy-url: http://test.example.com" \
  -H "icy-pub: 1" \
  -H "icy-br: 128" \
  -H "Authorization: Basic c291cmNlOnBhc3N3b3Jk" \
  -H "Content-Type: audio/mpeg" \
  --data-binary @audio-file.mp3 \
  https://server.example.com:9443/test.mp3

ICY2 v2.2 Full Test

curl -k -X PUT \
  -H "icy-metadata-version: 2.2" \
  -H "icy-name: Test ICY2 Station" \
  -H "icy-genre: Electronic" \
  -H "icy-br: 128" \
  -H "icy-pub: 1" \
  -H "icy-meta-station-id: test-station-001" \
  -H "icy-meta-show-title: Test Show" \
  -H "icy-meta-autodj: 0" \
  -H "icy-meta-dj-handle: @testdj" \
  -H "icy-meta-track-artwork: https://example.com/art.jpg" \
  -H "icy-meta-track-bpm: 128" \
  -H "icy-meta-audio-codec: mp3" \
  -H "icy-meta-samplerate: 44100" \
  -H "icy-meta-channels: 2" \
  -H "icy-meta-loudness: -14.0" \
  -H "icy-meta-encoder: curl-test/1.0" \
  -H "icy-meta-social-twitter: @teststation" \
  -H "icy-meta-request-enabled: 1" \
  -H "icy-meta-notice: Testing ICY2 v2.2 integration" \
  -H "icy-meta-nsfw: 0" \
  -H "icy-meta-ai-generator: 0" \
  -H "icy-meta-geo-region: GLOBAL" \
  -H "icy-meta-license-type: pro-licensed" \
  -H "Authorization: Basic c291cmNlOnBhc3N3b3Jk" \
  -H "Content-Type: audio/mpeg" \
  --data-binary @audio-file.mp3 \
  https://server.example.com:9443/test.mp3

Full Interactive Specification

For the complete interactive specification with code examples in C, Python, Go, JavaScript, and PHP, plus client integration guides for Winamp, Mixxx, Audacious, iTunes, and Windows Media Player, visit:

ICY-META v2.2 Full Specification


Maintainer Contact

CasterClub Streaming Standards Initiative (CSSI) 📧 specs@casterclub.com 🌐 https://casterclub.com/specs/icy-2 💻 GitHub: https://github.com/casterclub/specs 🪪 License: Open Specification / Attribution Preferred