内容启动 Cluster(ContentLauncher)
Cluster ID: 0x050A |
所在 Endpoint: 媒体端点(电视、机顶盒、流媒体设备等)
ContentLauncher 负责在媒体设备上启动内容播放 —— 既可以通过搜索条件查找内容,也可以直接通过 URL 启动。 它是智能电视、机顶盒、流媒体棒等设备的核心 Cluster 之一,是语音助手「播放 XXX」指令的底层实现。 控制端可以指定搜索关键词、播放偏好(字幕语言、起始位置)和品牌展示信息。
ContentLauncher 定义了三个 Feature:CS(ContentSearch)、UP(URLPlayback) 和 AP(AdvancedSeek)。
CS 启用后支持 LaunchContent 命令(按关键词搜索启动),UP 启用后支持 LaunchURL 命令(按 URL 直接启动),
AP 启用后 LaunchContent 可携带播放偏好(起始位置、字幕、音轨)。
设备至少应启用 CS 或 UP 中的一个,否则这个 Cluster 没有实际意义。
命令(Commands)
ContentLauncher Cluster 有 2 个请求命令和 1 个响应命令。 LaunchContent 通过搜索条件查找并启动内容(需要 CS 特性),LaunchURL 通过 URL 直接启动(需要 UP 特性), 两者都返回 LauncherResponse 告知启动结果。 点击下方表格中的命令 ID 可跳转到对应的详细说明。
| ID | 名称 | 方向 | 说明 | 所需特性 |
|---|---|---|---|---|
0x00 |
LaunchContent | 请求 | 按搜索条件查找并启动内容 | CS |
0x01 |
LaunchURL | 请求 | 按 URL 直接启动内容 | UP |
0x02 |
LauncherResponse | 响应 | 启动结果(两个命令共用) | 无 |
LaunchContent —— 搜索启动内容(0x00)
通过搜索条件在设备上查找并启动内容。搜索条件由 ContentSearchStruct 描述, 可以组合多个参数(如类型 + 演员 + 流派)来精确定位内容。设备收到命令后, 根据搜索结果自动播放(AutoPlay = true)或展示搜索结果列表让用户选择。
| 参数 | 类型 | 必选 | 说明 |
|---|---|---|---|
| Search | ContentSearchStruct | 是 | 搜索条件,包含一组搜索参数 |
| AutoPlay | bool | 是 | true = 找到后自动播放;false = 只展示搜索结果 |
| Data | string | 否 | 应用特定的附加数据(如季/集信息、播放参数),由设备自行解析 |
| PlaybackPreferences | PlaybackPreferencesStruct | 否 | 播放偏好:起始位置、字幕语言、音轨选择。需要 AP 特性 |
| UseCurrentContext | bool | 否 | true = 在当前播放上下文中启动(如当前 App 内搜索) |
// LaunchContent 命令示例
// 搜索"三体"并自动播放,偏好中文字幕
{
"Search": {
"ParameterList": [
{
"Type": 12,
"Value": "Movie"
},
{
"Type": 0,
"Value": "三体"
}
]
},
"AutoPlay": true,
"Data": "season=1&episode=1",
"PlaybackPreferences": {
"PlaybackPosition": 0,
"TextTrack": {
"LanguageCode": "zh-CN",
"Characteristics": [8]
}
},
"UseCurrentContext": false
}
使用场景
用户对语音助手说「播放三体第一季」,助手解析出搜索参数(Type=Movie,Value="三体"), 构造 ContentSearchStruct,设置 AutoPlay=true,发送 LaunchContent 命令。 电视在已安装的流媒体应用中搜索匹配内容并自动开始播放。
LaunchURL —— URL 直接启动(0x01)
通过 URL 直接在设备上启动内容播放。适用于已知内容地址的场景, 比如从手机 App 分享一个视频链接到电视播放。可以附带显示文本和品牌信息。
| 参数 | 类型 | 必选 | 说明 |
|---|---|---|---|
| ContentURL | string | 是 | 要播放的内容 URL,设备需要支持该 URL 指向的内容格式 |
| DisplayString | string | 否 | 在设备屏幕上展示的描述文本(如视频标题) |
| BrandingInformation | BrandingInformationStruct | 否 | 内容提供商的品牌展示信息(名称、Logo、背景等) |
// LaunchURL 命令示例
// 直接通过 URL 启动视频,附带品牌信息
{
"ContentURL": "https://example.com/stream/movie-12345.m3u8",
"DisplayString": "三体 第一季 第1集",
"BrandingInformation": {
"ProviderName": "ExampleTV"
}
}
使用场景
用户在手机上看到一个视频,点击「投屏到电视」,App 获取视频的流媒体 URL, 发送 LaunchURL 命令到电视。电视收到后直接打开该 URL 播放, 屏幕上显示 DisplayString 作为视频标题,加载画面展示品牌 Logo。
LauncherResponse —— 启动结果(0x02)
LaunchContent 和 LaunchURL 的统一响应。包含一个状态码和可选的附加数据。 控制端根据 Status 判断启动是否成功,失败时 Data 中可能包含错误详情。
| 字段 | 类型 | 说明 |
|---|---|---|
| Status | StatusEnum | 启动结果状态码(见下方枚举) |
| Data | string | 可选的附加数据,成功时可能返回会话 ID,失败时返回错误信息 |
// LauncherResponse 响应示例
// 启动成功
{
"Status": 0,
"Data": "playback-session-id=abc123"
}
// 启动失败 —— URL 不可用
{
"Status": 1,
"Data": "URL expired or geo-restricted"
}
属性详解
ContentLauncher Cluster 共有 2 个属性。点击下方汇总表中的属性 ID 可跳转到对应的详细说明。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0000 |
AcceptHeader | list<string> | 设备支持的内容 MIME 类型列表 |
0x0001 |
SupportedStreamingProtocols | SupportedProtocolsBitmap | 设备支持的流媒体协议位图 |
内容能力(0x0000, 0x0001)
描述设备能够接受和播放的内容类型与流媒体协议。控制端在发送 LaunchURL 前应检查这些属性,确保设备支持目标内容格式。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0000 |
AcceptHeader(支持的内容类型) | list<string> | 设备能处理的 MIME 类型列表,格式遵循 HTTP Accept Header 规范(如 "video/mp4"、"application/dash+xml")。控制端发送 LaunchURL 前应检查目标内容的 MIME 类型是否在此列表中。需要 UP 特性 |
0x0001 |
SupportedStreamingProtocols(支持的流协议) | SupportedProtocolsBitmap | 设备支持的流媒体协议位图。控制端据此选择合适的流地址格式(如 DASH 的 .mpd 或 HLS 的 .m3u8)。需要 UP 特性 |
AcceptHeader 和 SupportedStreamingProtocols 只在启用 UP(URLPlayback) 特性时才有意义。 如果设备只支持 CS(内容搜索),这两个属性可能不存在 —— 因为搜索启动不涉及 URL 格式判断, 内容格式由设备内部的应用自行处理。
结构体定义
ContentLauncher Cluster 使用多个结构体来描述搜索条件、播放偏好和品牌信息。
ContentSearchStruct
描述一次内容搜索的完整条件,包含一组搜索参数。多个参数之间是 AND 关系 —— 设备需要同时满足所有条件。
| 字段 | 类型 | 说明 |
|---|---|---|
| ParameterList | list<ParameterStruct> | 搜索参数列表,每个元素指定一个搜索维度(如类型、演员、流派) |
ParameterStruct
描述单个搜索参数 —— 由参数类型、搜索值和可选的外部 ID 组成。
| 字段 | 类型 | 说明 |
|---|---|---|
| Type | ParameterEnum | 参数类型(见下方枚举),决定 Value 的含义 |
| Value | string | 搜索值,如演员名 "刘慈欣"、流派 "Sci-Fi" |
| ExternalIDList | list<AdditionalInfoStruct> | 可选。外部平台的 ID 列表(如 IMDB ID、豆瓣 ID),帮助设备精确匹配内容 |
AdditionalInfoStruct
描述一个外部标识符的键值对,用于跨平台内容匹配。
| 字段 | 类型 | 说明 |
|---|---|---|
| Name | string | 标识符名称,如 "IMDB"、"Douban"、"TMDB" |
| Value | string | 标识符的值,如 "tt1234567"(IMDB 编号) |
BrandingInformationStruct
描述内容提供商的品牌展示信息,用于 LaunchURL 命令。设备在加载内容时可以显示提供商的品牌元素。 除 ProviderName 外,其他字段都是可选的 StyleInformationStruct(包含图片 URL、颜色、尺寸等样式信息)。
| 字段 | 类型 | 说明 |
|---|---|---|
| ProviderName | string | 内容提供商名称,如 "Netflix"、"YouTube" |
| Background | StyleInformationStruct | 可选。背景样式信息(图片 URL、颜色) |
| Logo | StyleInformationStruct | 可选。Logo 样式信息 |
| ProgressBar | StyleInformationStruct | 可选。进度条样式信息 |
| Splash | StyleInformationStruct | 可选。启动画面样式信息 |
| WaterMark | StyleInformationStruct | 可选。水印样式信息 |
PlaybackPreferencesStruct
描述播放偏好设置,包括起始播放位置、字幕和音轨选择。此结构体仅在启用 AP(AdvancedSeek) 特性时可用。
| 字段 | 类型 | 说明 |
|---|---|---|
| PlaybackPosition | uint64 | 起始播放位置,单位毫秒。0 表示从头开始 |
| TextTrack | TrackPreferenceStruct | 字幕轨道偏好(语言、特征) |
| AudioTracks | list<TrackPreferenceStruct> | 可选。音轨偏好列表,按优先级排列 |
轨道偏好结构体包含:LanguageCode(BCP-47 语言代码,如 "zh-CN")、
可选的 Characteristics(轨道特征列表,如字幕、解说、配音等)和
可选的 AudioOutputIndex(指定音频输出端口索引)。
枚举与位图
StatusEnum
LauncherResponse 中的状态码,表示内容启动的结果。
ParameterEnum
定义搜索参数的类型。控制端通过不同的 Type 值指定搜索维度, 设备据此在内容库中匹配。共 14 个枚举值。
SupportedProtocolsBitmap
设备支持的流媒体协议位图。控制端据此选择合适的流地址格式。
.mpd 清单
.m3u8 清单
如果设备同时支持 DASH 和 HLS(值 = 3,即 0b11),
控制端可根据内容源的可用格式灵活选择。一般来说,Apple 生态优先用 HLS,跨平台场景优先用 DASH。
Feature 位图
ContentLauncher Cluster 通过 FeatureMap(0xFFFC)声明设备支持的能力:
设备至少应启用 CS 或 UP 中的一个。如果两个都不启用, ContentLauncher Cluster 没有可用的命令,声明这个 Cluster 就没有意义。 AP 特性是对 CS 的增强,必须在 CS 启用的基础上才有效。
示例数据
一台支持 DASH 和 HLS 的智能电视的 ContentLauncher Cluster 属性读取结果:
{
// --- 支持的内容类型 ---
"0x0000": [ // AcceptHeader
"video/mp4",
"video/webm",
"audio/aac",
"application/dash+xml",
"application/x-mpegURL"
],
// --- 支持的流媒体协议 ---
"0x0001": 3 // SupportedStreamingProtocols
// = 0b11 (DASH + HLS)
}
发送 LaunchURL 前,应先检查 AcceptHeader (0x0000) 确认设备支持目标内容的 MIME 类型,
再检查 SupportedStreamingProtocols (0x0001) 确认设备支持的流协议。
如果目标格式不在支持范围内,应提前提示用户,避免收到 URLNotAvailable 错误。
常见场景
场景 1:语音助手「播放 XXX」
- 用户对语音助手说「在电视上播放三体」
- 检查设备
FeatureMap (0xFFFC),确认支持 CS 特性 - 构造 ContentSearchStruct:Type=Video(13),Value="三体"
- 发送
LaunchContent (0x00),AutoPlay=true - 设备在已安装的流媒体应用中搜索匹配内容,找到后自动开始播放
- 检查 LauncherResponse 的 Status:
0(Success)—— 播放已开始2(AuthFailed)—— 内容需要付费或登录,提示用户
场景 2:手机视频投屏到电视
- 用户在手机 App 中观看视频,点击「投屏」按钮
- 检查设备
FeatureMap (0xFFFC),确认支持 UP 特性 - 读取
AcceptHeader (0x0000),确认电视支持video/mp4或application/x-mpegURL - 读取
SupportedStreamingProtocols (0x0001),选择合适的流地址(如 HLS 的 .m3u8) - 发送
LaunchURL (0x01),附带视频 URL、标题和品牌信息 - 电视开始播放,屏幕上展示品牌 Logo 和视频标题
- 检查 LauncherResponse:
0(Success)—— 投屏成功1(URLNotAvailable)—— URL 不可用,可能是地域限制或格式不兼容