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.
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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| 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.
| Field | Type | Description |
|---|---|---|
| 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 |
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.
ContentSearchStruct
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 |
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.
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.
SupportedProtocolsBitmap
Bitmap of streaming protocols supported by the device. Controllers use this to select the appropriate stream address format.
.mpd manifests
.m3u8 manifests
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):
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)
}
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"
- The user tells the voice assistant "Play Three-Body Problem on the TV"
- Check the device
FeatureMap (0xFFFC)to confirm CS support - Construct ContentSearchStruct: Type=Video(13), Value="Three-Body"
- Send
LaunchContent (0x00)with AutoPlay=true - The device searches for matching content in installed streaming apps and starts playback automatically
- Check the LauncherResponse Status:
0(Success) — playback has started2(AuthFailed) — content requires payment or login, notify the user
Scenario 2: Cast phone video to TV
- The user is watching a video in the phone app and taps the "Cast" button
- Check the device
FeatureMap (0xFFFC)to confirm UP support - Read
AcceptHeader (0x0000)to confirm the TV supportsvideo/mp4orapplication/x-mpegURL - Read
SupportedStreamingProtocols (0x0001)to select the appropriate stream address (e.g., HLS .m3u8) - Send
LaunchURL (0x01)with the video URL, title, and branding information - The TV starts playback, displaying the brand logo and video title on screen
- Check LauncherResponse:
0(Success) — casting successful1(URLNotAvailable) — URL not available, possibly due to geo-restrictions or format incompatibility