ContentLauncher Cluster

Cluster ID: 0x050A  |  Endpoint: Media endpoint (TV, set-top box, streaming device, etc.)

ContentLauncher handles launching content playback on media devices — either by searching with criteria or by directly launching via URL. It is one of the core Clusters for smart TVs, set-top boxes, and streaming sticks, serving as the underlying implementation for voice assistant "play XXX" commands. Controllers can specify search keywords, playback preferences (subtitle language, start position), and branding information.

Three Features Determine Device Capabilities

ContentLauncher defines three Features: CS (ContentSearch), UP (URLPlayback), and AP (AdvancedSeek). CS enables the LaunchContent command (search-based launch), UP enables the LaunchURL command (direct URL launch), and AP allows LaunchContent to carry playback preferences (start position, subtitles, audio tracks). Devices should enable at least CS or UP; otherwise this Cluster has no practical use.

Commands

The ContentLauncher Cluster has 2 request commands and 1 response command. LaunchContent searches for and launches content via criteria (requires CS feature), LaunchURL launches directly via URL (requires UP feature), and both return LauncherResponse with the launch result. Click a command ID in the table below to jump to its detailed description.

ID Name Direction Description Required Feature
0x00 LaunchContent Request Search for and launch content by criteria CS
0x01 LaunchURL Request Launch content directly by URL UP
0x02 LauncherResponse Response Launch result (shared by both commands) None

LaunchContent — Search and Launch Content (0x00)

Searches for and launches content on the device using search criteria. The criteria are described by ContentSearchStruct, which can combine multiple parameters (e.g., type + actor + genre) to precisely locate content. After receiving the command, the device either auto-plays (AutoPlay = true) or displays a search results list for the user to choose from.

ParameterTypeRequiredDescription
Search ContentSearchStruct Yes Search criteria containing a set of search parameters
AutoPlay bool Yes true = auto-play when found; false = only display search results
Data string No Application-specific additional data (e.g., season/episode info, playback parameters), parsed by the device
PlaybackPreferences PlaybackPreferencesStruct No Playback preferences: start position, subtitle language, audio track selection. Requires AP feature
UseCurrentContext bool No true = launch within the current playback context (e.g., search within the current app)
// LaunchContent command example
// Search for "Three-Body Problem" and auto-play, prefer Chinese subtitles
{
  "Search": {
    "ParameterList": [
      {
        "Type": 12,
        "Value": "Movie"
      },
      {
        "Type": 0,
        "Value": "Three-Body"
      }
    ]
  },
  "AutoPlay": true,
  "Data": "season=1&episode=1",
  "PlaybackPreferences": {
    "PlaybackPosition": 0,
    "TextTrack": {
      "LanguageCode": "zh-CN",
      "Characteristics": [8]
    }
  },
  "UseCurrentContext": false
}
Usage Scenarios

The user tells the voice assistant "Play Three-Body Problem Season 1". The assistant parses the search parameters (Type=Movie, Value="Three-Body"), constructs the ContentSearchStruct, sets AutoPlay=true, and sends the LaunchContent command. The TV searches for matching content in installed streaming apps and starts playback automatically.

LaunchURL — Direct URL Launch (0x01)

Directly launches content playback on the device via URL. Suitable for scenarios where the content address is known, such as casting a video link from a phone app to the TV. Can include display text and branding information.

ParameterTypeRequiredDescription
ContentURL string Yes Content URL to play; the device must support the content format at this URL
DisplayString string No Description text displayed on the device screen (e.g., video title)
BrandingInformation BrandingInformationStruct No Content provider's branding display information (name, logo, background, etc.)
// LaunchURL command example
// Directly launch video via URL with branding info
{
  "ContentURL": "https://example.com/stream/movie-12345.m3u8",
  "DisplayString": "Three-Body Problem Season 1 Episode 1",
  "BrandingInformation": {
    "ProviderName": "ExampleTV"
  }
}
Usage Scenarios

The user sees a video on their phone and taps "Cast to TV". The app obtains the video's streaming URL and sends the LaunchURL command to the TV. The TV directly opens the URL for playback, displays the DisplayString as the video title, and shows the brand logo on the loading screen.

LauncherResponse — Launch Result (0x02)

Unified response for LaunchContent and LaunchURL. Contains a status code and optional additional data. Controllers determine success based on Status; on failure, Data may contain error details.

FieldTypeDescription
Status StatusEnum Launch result status code (see enum below)
Data string Optional additional data; may return a session ID on success or error info on failure
// LauncherResponse example
// Launch successful
{
  "Status": 0,
  "Data": "playback-session-id=abc123"
}

// Launch failed — URL not available
{
  "Status": 1,
  "Data": "URL expired or geo-restricted"
}

Attributes

The ContentLauncher Cluster has 2 attributes. Click an attribute ID in the summary table below to jump to its detailed description.

ID Name Type Description
0x0000 AcceptHeader list<string> List of content MIME types supported by the device
0x0001 SupportedStreamingProtocols SupportedProtocolsBitmap Bitmap of streaming protocols supported by the device

Content Capabilities (0x0000, 0x0001)

Describes the content types and streaming protocols the device can accept and play. Controllers should check these attributes before sending LaunchURL to ensure the device supports the target content format.

ID Name Type Description
0x0000 AcceptHeader (Supported Content Types) list<string> List of MIME types the device can handle, following the HTTP Accept Header specification (e.g., "video/mp4", "application/dash+xml"). Controllers should check if the target content's MIME type is in this list before sending LaunchURL. Requires UP feature
0x0001 SupportedStreamingProtocols (Supported Protocols) SupportedProtocolsBitmap Bitmap of streaming protocols supported by the device. Controllers use this to select the appropriate stream address format (e.g., DASH .mpd or HLS .m3u8). Requires UP feature
Relationship Between Attributes and Features

AcceptHeader and SupportedStreamingProtocols are only meaningful when the UP (URLPlayback) feature is enabled. If the device only supports CS (content search), these two attributes may not exist — because search-based launching does not involve URL format decisions; content format is handled internally by the device's apps.

Struct Definitions

The ContentLauncher Cluster uses multiple structures to describe search criteria, playback preferences, and branding information.

Describes the complete criteria for a content search, containing a set of search parameters. Multiple parameters have an AND relationship — the device must satisfy all conditions simultaneously.

Field Type Description
ParameterList list<ParameterStruct> Search parameter list; each element specifies a search dimension (e.g., type, actor, genre)

ParameterStruct

Describes a single search parameter — consisting of parameter type, search value, and optional external IDs.

Field Type Description
Type ParameterEnum Parameter type (see enum below), determining the meaning of Value
Value string Search value, e.g., actor name "Liu Cixin", genre "Sci-Fi"
ExternalIDList list<AdditionalInfoStruct> Optional. External platform ID list (e.g., IMDB ID, Douban ID) to help the device precisely match content

AdditionalInfoStruct

Describes an external identifier key-value pair for cross-platform content matching.

Field Type Description
Name string Identifier name, e.g., "IMDB", "Douban", "TMDB"
Value string Identifier value, e.g., "tt1234567" (IMDB number)

BrandingInformationStruct

Describes content provider branding information for the LaunchURL command. The device can display the provider's brand elements while loading content. Except for ProviderName, all other fields are optional StyleInformationStruct (containing image URL, color, size, and other style information).

Field Type Description
ProviderName string Content provider name, e.g., "Netflix", "YouTube"
Background StyleInformationStruct Optional. Background style information (image URL, color)
Logo StyleInformationStruct Optional. Logo style information
ProgressBar StyleInformationStruct Optional. Progress bar style information
Splash StyleInformationStruct Optional. Splash screen style information
WaterMark StyleInformationStruct Optional. Watermark style information

PlaybackPreferencesStruct

Describes playback preference settings, including start position, subtitle and audio track selection. This struct is only available when the AP (AdvancedSeek) feature is enabled.

Field Type Description
PlaybackPosition uint64 Start playback position in milliseconds. 0 means from the beginning
TextTrack TrackPreferenceStruct Subtitle track preference (language, characteristics)
AudioTracks list<TrackPreferenceStruct> Optional. Audio track preference list, ordered by priority
TrackPreferenceStruct

Track preference struct contains: LanguageCode (BCP-47 language code, e.g., "zh-CN"), optional Characteristics (track characteristics list, such as subtitles, commentary, dubbing, etc.), and optional AudioOutputIndex (specifying the audio output port index).

Enums & Bitmaps

StatusEnum

Status codes in LauncherResponse, indicating the content launch result.

0
Success Success — content has been launched or search results displayed
1
URLNotAvailable URL not available — link is inaccessible, format not supported, or expired
2
AuthFailed Auth failed — content requires login or insufficient permissions
3
TextTrackNotAvailable Text track not available — requested subtitle language or type does not exist
4
AudioTrackNotAvailable Audio track not available — requested audio track language or type does not exist

ParameterEnum

Defines search parameter types. Controllers specify search dimensions via different Type values, and the device matches against its content library accordingly. Contains 14 enum values.

0
Actor Actor — search by actor name
1
Channel Channel — by channel name or number
2
Character Character — search by character name
3
Director Director — search by director name
4
Event Event — by sporting event or live event
5
Franchise Franchise — by content series or IP
6
Genre Genre — by genre tag (sci-fi, action, etc.)
7
League League — by sports league
8
Popularity Popularity — sort by popularity
9
Provider Provider — by content provider
10
Sport Sport — by sport type
11
SportsTeam SportsTeam — by team name
12
Type Type — content type (Movie / TV / Music, etc.)
13
Video Video — search directly by video title

SupportedProtocolsBitmap

Bitmap of streaming protocols supported by the device. Controllers use this to select the appropriate stream address format.

Bit 0
DASH Dynamic Adaptive Streaming over HTTP — corresponds to .mpd manifests
Bit 1
HLS HTTP Live Streaming — corresponds to .m3u8 manifests
Protocol Selection

If the device supports both DASH and HLS (value = 3, i.e., 0b11), the controller can flexibly choose based on the content source's available formats. Generally, Apple ecosystem prefers HLS, cross-platform scenarios prefer DASH.

Feature Bitmap

The ContentLauncher Cluster declares device capabilities via FeatureMap (0xFFFC):

Bit 0
CS (ContentSearch) Content Search — when enabled, supports the LaunchContent command for searching and launching content by criteria
Bit 1
UP (URLPlayback) URL Playback — when enabled, supports the LaunchURL command and AcceptHeader / SupportedStreamingProtocols attributes
Bit 2
AP (AdvancedSeek) Advanced Seek — when enabled, LaunchContent can carry PlaybackPreferences (playback position, subtitle, audio track preferences)
Enable At Least One

Devices should enable at least CS or UP. If neither is enabled, the ContentLauncher Cluster has no usable commands, making it pointless to declare this Cluster. The AP feature enhances CS and is only effective when CS is enabled.

Example Data

Attribute read results of the ContentLauncher Cluster from a smart TV supporting DASH and HLS:

{
  // --- Supported Content Types ---
  "0x0000": [                        // AcceptHeader
    "video/mp4",
    "video/webm",
    "audio/aac",
    "application/dash+xml",
    "application/x-mpegURL"
  ],

  // --- Supported Streaming Protocols ---
  "0x0001": 3                         // SupportedStreamingProtocols
                                      // = 0b11 (DASH + HLS)
}
Developer Tip

Before sending LaunchURL, check AcceptHeader (0x0000) to confirm the device supports the target content's MIME type, then check SupportedStreamingProtocols (0x0001) to confirm the device's supported streaming protocols. If the target format is not in the supported range, notify the user in advance to avoid receiving a URLNotAvailable error.

Common Scenarios

Scenario 1: Voice assistant "Play XXX"
  1. The user tells the voice assistant "Play Three-Body Problem on the TV"
  2. Check the device FeatureMap (0xFFFC) to confirm CS support
  3. Construct ContentSearchStruct: Type=Video(13), Value="Three-Body"
  4. Send LaunchContent (0x00) with AutoPlay=true
  5. The device searches for matching content in installed streaming apps and starts playback automatically
  6. Check the LauncherResponse Status:
    • 0 (Success) — playback has started
    • 2 (AuthFailed) — content requires payment or login, notify the user
Scenario 2: Cast phone video to TV
  1. The user is watching a video in the phone app and taps the "Cast" button
  2. Check the device FeatureMap (0xFFFC) to confirm UP support
  3. Read AcceptHeader (0x0000) to confirm the TV supports video/mp4 or application/x-mpegURL
  4. Read SupportedStreamingProtocols (0x0001) to select the appropriate stream address (e.g., HLS .m3u8)
  5. Send LaunchURL (0x01) with the video URL, title, and branding information
  6. The TV starts playback, displaying the brand logo and video title on screen
  7. Check LauncherResponse:
    • 0 (Success) — casting successful
    • 1 (URLNotAvailable) — URL not available, possibly due to geo-restrictions or format incompatibility