内容启动 Cluster(ContentLauncher)

Cluster ID: 0x050A  |  所在 Endpoint: 媒体端点(电视、机顶盒、流媒体设备等)

ContentLauncher 负责在媒体设备上启动内容播放 —— 既可以通过搜索条件查找内容,也可以直接通过 URL 启动。 它是智能电视、机顶盒、流媒体棒等设备的核心 Cluster 之一,是语音助手「播放 XXX」指令的底层实现。 控制端可以指定搜索关键词、播放偏好(字幕语言、起始位置)和品牌展示信息。

三个 Feature 决定设备能力

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 特性
属性与 Feature 的关系

AcceptHeader 和 SupportedStreamingProtocols 只在启用 UP(URLPlayback) 特性时才有意义。 如果设备只支持 CS(内容搜索),这两个属性可能不存在 —— 因为搜索启动不涉及 URL 格式判断, 内容格式由设备内部的应用自行处理。

结构体定义

ContentLauncher Cluster 使用多个结构体来描述搜索条件、播放偏好和品牌信息。

描述一次内容搜索的完整条件,包含一组搜索参数。多个参数之间是 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> 可选。音轨偏好列表,按优先级排列
TrackPreferenceStruct

轨道偏好结构体包含:LanguageCode(BCP-47 语言代码,如 "zh-CN")、 可选的 Characteristics(轨道特征列表,如字幕、解说、配音等)和 可选的 AudioOutputIndex(指定音频输出端口索引)。

枚举与位图

StatusEnum

LauncherResponse 中的状态码,表示内容启动的结果。

0
Success 成功 —— 内容已启动或搜索结果已展示
1
URLNotAvailable URL 不可用 —— 链接无法访问、格式不支持或已过期
2
AuthFailed 认证失败 —— 内容需要登录或权限不足
3
TextTrackNotAvailable 字幕不可用 —— 请求的字幕语言或类型不存在
4
AudioTrackNotAvailable 音轨不可用 —— 请求的音轨语言或类型不存在

ParameterEnum

定义搜索参数的类型。控制端通过不同的 Type 值指定搜索维度, 设备据此在内容库中匹配。共 14 个枚举值。

0
Actor 演员 —— 按演员名搜索
1
Channel 频道 —— 按频道名称或编号
2
Character 角色 —— 按角色名搜索
3
Director 导演 —— 按导演名搜索
4
Event 事件 —— 按体育赛事或直播事件
5
Franchise 系列 —— 按内容系列或 IP
6
Genre 流派 —— 按类型标签(科幻、动作等)
7
League 联赛 —— 按体育联赛
8
Popularity 热度 —— 按流行度排序
9
Provider 提供商 —— 按内容提供方
10
Sport 运动 —— 按运动类型
11
SportsTeam 球队 —— 按运动队名
12
Type 类型 —— 内容类型(Movie / TV / Music 等)
13
Video 视频 —— 按视频标题直接搜索

SupportedProtocolsBitmap

设备支持的流媒体协议位图。控制端据此选择合适的流地址格式。

Bit 0
DASH Dynamic Adaptive Streaming over HTTP —— 对应 .mpd 清单
Bit 1
HLS HTTP Live Streaming —— 对应 .m3u8 清单
协议选择

如果设备同时支持 DASH 和 HLS(值 = 3,即 0b11), 控制端可根据内容源的可用格式灵活选择。一般来说,Apple 生态优先用 HLS,跨平台场景优先用 DASH。

Feature 位图

ContentLauncher Cluster 通过 FeatureMap(0xFFFC)声明设备支持的能力:

Bit 0
CS(ContentSearch) 内容搜索 —— 启用后支持 LaunchContent 命令,通过搜索条件查找并启动内容
Bit 1
UP(URLPlayback) URL 播放 —— 启用后支持 LaunchURL 命令和 AcceptHeader / SupportedStreamingProtocols 属性
Bit 2
AP(AdvancedSeek) 高级定位 —— 启用后 LaunchContent 可携带 PlaybackPreferences(播放位置、字幕、音轨偏好)
至少启用一个

设备至少应启用 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」
  1. 用户对语音助手说「在电视上播放三体」
  2. 检查设备 FeatureMap (0xFFFC),确认支持 CS 特性
  3. 构造 ContentSearchStruct:Type=Video(13),Value="三体"
  4. 发送 LaunchContent (0x00),AutoPlay=true
  5. 设备在已安装的流媒体应用中搜索匹配内容,找到后自动开始播放
  6. 检查 LauncherResponse 的 Status:
    • 0(Success)—— 播放已开始
    • 2(AuthFailed)—— 内容需要付费或登录,提示用户
场景 2:手机视频投屏到电视
  1. 用户在手机 App 中观看视频,点击「投屏」按钮
  2. 检查设备 FeatureMap (0xFFFC),确认支持 UP 特性
  3. 读取 AcceptHeader (0x0000),确认电视支持 video/mp4 或 application/x-mpegURL
  4. 读取 SupportedStreamingProtocols (0x0001),选择合适的流地址(如 HLS 的 .m3u8)
  5. 发送 LaunchURL (0x01),附带视频 URL、标题和品牌信息
  6. 电视开始播放,屏幕上展示品牌 Logo 和视频标题
  7. 检查 LauncherResponse:
    • 0(Success)—— 投屏成功
    • 1(URLNotAvailable)—— URL 不可用,可能是地域限制或格式不兼容