ZWMAP 协议概述

1. 什么是 ZWMAP

ZWMAP(ZWPlayer Media Application Protocol)是 ZWPlayer 播放器的媒体数据交换协议,用于规范化播放列表、字幕、章节、缩略图和标注五种 JSON 数据格式。通过统一的协议头字段,实现数据类型的自动识别和版本管理。

当前版本:ZWMAP/1.0

2. 协议组成

数据类型 zwp_type 值 说明
播放列表 playlist 一组有序的媒体内容集合
字幕 subtitle 视频文本字幕数据
章节 chapter 视频结构化分段信息
缩略图 thumbnail 进度条预览图雪碧图配置
标注 annotation 视频画面交互区域和事件

3. 协议头字段

所有符合 ZWMAP 协议的 JSON 文档在根级别包含一组以 zwp_ 为前缀的协议头字段:

字段 类型 必填 默认值 说明
zwp_protocol string 协议标识符,格式为 "ZWMAP/<major>.<minor>",当前版本为 "ZWMAP/1.0"
zwp_type string 数据类型标识,取值:playlist / subtitle / chapter / annotation / thumbnail
zwp_version string "1.0" 数据内容的语义版本号
zwp_encoding string "utf-8" 文档编码声明
zwp_id string 文档唯一标识符,用于引用、缓存和去重

3.1 最小示例

{
  "zwp_protocol": "ZWMAP/1.0",
  "zwp_type": "playlist",
  "groups": []
}

3.2 字段命名规则

  • 协议头字段统一使用 zwp_ 前缀,避免与业务数据字段冲突
  • 业务数据字段保持原有的命名风格不变
  • 新增的协议字段不得与现有业务字段重名

3.3 协议版本策略

zwp_protocol 的版本号遵循以下规则:

  • 主版本号 (major):不兼容的协议变更(如新增必填字段、删除字段)
  • 次版本号 (minor):向后兼容的协议变更(如新增可选字段)

播放器应检查 zwp_protocol 的主版本号是否支持,忽略无法识别的可选字段。

4. 检测逻辑

播放器通过以下步骤判断 JSON 是否为 ZWMAP 格式:

  1. 解析 JSON 对象
  2. 检查是否存在 zwp_protocol 字段
  3. 检查其值是否以 "ZWMAP/" 开头
  4. 读取 zwp_type 确定数据类型
  5. 路由到对应的类型处理器

5. 向后兼容规则

ZWPlayer 在加载 JSON 数据时,首先检查是否包含 ZWMAP 协议头。对于字幕章节类型,若不存在协议头,则通过内容特征自动探测数据类型以保持向后兼容。播放列表缩略图标注不支持向后兼容,必须携带 ZWMAP 协议头。

5.1 兼容性策略

类型 向后兼容 说明
playlist 必须携带 zwp_protocolzwp_type
annotation 必须携带 zwp_protocolzwp_type
thumbnail 必须携带 zwp_protocolzwp_type
subtitle 无头部时通过 body 字段探测,兼容 BCC JSON
chapter 无头部时通过内容特征探测,兼容纯数组格式

5.2 向后兼容探测流程

解析 JSON

    ├─ 检查 zwp_protocol 字段
    │   │
    │   ├─ 存在且以 "ZWMAP/" 开头 → 读取 zwp_type,路由到对应处理器
    │   │
    │   └─ 不存在 → 进入向后兼容探测(仅 subtitle 和 chapter)

    └─ 向后兼容探测规则(按优先级):

        ├─ 1. data.body 存在且是数组 → subtitle
        ├─ 2. data.chapters 存在且是数组 → chapter
        ├─ 3. Array.isArray(data) 且元素有 time+title → chapter

        └─ 无法识别 → 报错

5.3 向后兼容示例

字幕旧格式(BCC JSON):

{
  "font_size": 0.4,
  "font_color": "#FFFFFF",
  "body": [
    { "from": 1.0, "to": 5.0, "content": "字幕文本" }
  ]
}

章节旧格式(纯数组):

[
  { "title": "章节1", "time": "00:00:00" },
  { "title": "章节2", "time": "00:02:00" }
]

6. 设计原则

  1. 最小侵入:协议头字段以 zwp_ 前缀命名,不与业务字段冲突
  2. 选择性兼容:字幕和章节保持向后兼容,播放列表和标注强制使用 ZWMAP 头部
  3. 版本可控:通过 zwp_protocol 的版本号支持未来协议升级
  4. 自描述性:任何 ZWMAP JSON 都可通过头部字段自我标识类型和版本