ZWMAP 播放列表类型规范

1. 概述

播放列表类型用于描述一组有序的媒体内容集合,支持分组、自动播放和多种媒体格式。采用三层嵌套结构:播放列表 → 分组 → 视频项。使用 在线播放列表编辑工具 可以可视化管理和导出播放列表数据。

2. ZWMAP 头部

{
  "zwp_protocol": "ZWMAP/1.0",
  "zwp_type": "playlist"
}

zwp_protocol 和 zwp_type 为必填字段。不支持向后兼容,必须携带 ZWMAP 协议头。

3. 数据结构

3.1 根级别字段

字段 类型 必填 默认值 说明
zwp_protocol string 是 — 协议标识,固定 "ZWMAP/1.0"
zwp_type string 是 — 固定 "playlist"
zwp_version string 否 "1.0" 数据格式版本
id string 否 标题转 Slug 播放列表唯一标识符,用于隔离进度和收藏
title string 否 "" 播放列表标题
autoPlayNext boolean 否 true 是否自动播放下一项
player_min_version string 否 — 最低播放器版本要求
music object 否 — 全局音乐配置默认值(字段详见下表),仅 mediaKind:"audio" 的 item 播放时生效
groups array 是 — 分组数组

music 对象字段(根级,列表级默认值):

子字段 类型 默认值 说明
panel 'full' | 'bar' 'full' 面板形态:'full'(全屏面板)或 'bar'(紧凑底条)
visualizer 'classic' | 'vintage' | 'mountain' | 'bars' | 'circular' | 'mirror' | false 'classic' 频谱可视化形态
theme 'auto' | 'vintage' | 'classic' | '#hex' 'auto' 主题皮肤
vinyl bool true 唱片旋转动效
blurBackground bool true 毛玻璃背景
mediaSession bool true 系统媒体键集成

3.2 分组对象 (Group)

字段 类型 必填 默认值 说明
id string 否 自动生成 分组唯一标识符
name string 是 — 分组显示名称
expanded boolean 否 true 是否默认展开
items array 是 — 媒体项数组

3.3 媒体项对象 (VideoItem / AudioItem)

字段 类型 必填 默认值 说明
id string 否 自动生成 唯一标识符
name string 是 — 节目显示名称
url string 是 — 媒体播放 URL
type string 否 "auto" 媒体容器格式(mp4/hls/flv/dash/webrtc/auto)
mediaKind string 否 "video" 媒体种类:"video"(视频,默认) / "audio"(音频,触发音乐播放形态)
isLive boolean 否 false 是否直播流
poster string 否 — 海报图片 URL(音频项即唱片封面)
artist string 否 — 艺人/歌手(仅 mediaKind: "audio" 显示)
lyrics string|array 否 — 歌词文件 URL 或文本行数组(仅 mediaKind: "audio" 生效)
music object 否 — 单曲级音乐参数(如 theme 单曲主题色)
subtitle string|array 否 — 字幕文件 URL(单个或数组)
audioTracks string|array 否 — 配音音轨 URL(单个或数组)。元素为 URL 字符串或 {url, language, label, default} 对象,详见 音轨设置
chapter string 否 — 章节 JSON 文件 URL
annotation string 否 — 标注 JSON 文件 URL
thumbnail string 否 — 缩略图 JSON 文件 URL
watermark string 否 — 水印 JSON 文件 URL
epg_now string 否 — 当前节目名称(EPG 信息)

3.4 支持的视频类型

type 值 说明 依赖
mp4 MP4 视频 浏览器原生支持
hls HTTP Live Streaming hls.js
dash Dynamic Adaptive Streaming dash.js
flv HTTP FLV 流媒体 flv.js
webrtc WebRTC 实时流 WebRTC API
auto 自动检测 根据文件特征判断

4. 完整示例

{
  "zwp_protocol": "ZWMAP/1.0",
  "zwp_type": "playlist",
  "zwp_version": "1.0",
  "id": "demo_list_001",
  "title": "演示播放列表",
  "autoPlayNext": true,
  "player_min_version": "3.2.2",
  "groups": [
    {
      "id": "g1",
      "name": "央视频道",
      "expanded": true,
      "items": [
        {
          "id": "cctv1",
          "name": "CCTV-1 综合",
          "url": "https://cdn.zwplayer.com/media/demo.mp4",
          "type": "mp4",
          "isLive": false,
          "poster": "https://cdn.zwplayer.com/poster/cctv1.jpg",
          "subtitle": [
            "https://cdn.zwplayer.com/sub/zh.bcc",
            "https://cdn.zwplayer.com/sub/en.bcc"
          ],
          "audioTracks": [
            { "url": "https://cdn.zwplayer.com/dub/ja.m4a", "language": "ja", "label": "日语配音", "default": true },
            { "url": "https://cdn.zwplayer.com/dub/zh.m4a", "language": "zh", "label": "中文配音" }
          ],
          "chapter": "https://cdn.zwplayer.com/chapter/demo.json",
          "annotation": "https://cdn.zwplayer.com/annotation/demo.json",
          "thumbnail": "https://cdn.zwplayer.com/thumbnail/demo.json",
          "watermark": "https://cdn.zwplayer.com/watermark/demo.json",
          "epg_now": "新闻联播"
        }
      ]
    },
    {
      "id": "g2",
      "name": "教育视频",
      "expanded": false,
      "items": [
        {
          "id": "edu01",
          "name": "数学基础",
          "url": "https://cdn.zwplayer.com/media/math.mp4",
          "type": "mp4"
        }
      ]
    }
  ]
}

5. 约束规则

  1. zwp_protocol 和 zwp_type 为必填字段,缺少则拒绝加载
  2. groups 为必填字段,必须包含至少一个分组
  3. 每个 VideoItem 的 url 必填
  4. type 为 auto 时,播放器根据 URL 后缀和内容自动判断
  5. subtitle 可以是字符串(单个字幕)或数组(多字幕)
  6. audioTracks 可以是字符串(单个配音 URL)、数组(多配音)或对象数组({url, language, label, default})。default: true 的音轨会在切换到该视频项时自动激活
  7. chapter、annotation、thumbnail 和 watermark 引用的 JSON 文件也建议使用 ZWMAP 协议头