视频热区生成器 — 使用指南
在视频上创建可交互的热区节点,支持分支选择、测验、投票、表单等丰富的交互类型,并导出 ZWMAP 兼容的 JSON 实现与 ZWPlayer 的无缝集成。
快速入门
视频热区生成器(Hotspot Generator)是一款免费的在线工具,可以在视频画面上叠加交互式热区节点,实现分支剧情、知识问答、信息展示、投票调查等互动体验。导出的 ZWMAP JSON 可直接用于 ZWPlayer 播放器。
快速上手步骤
-
加载视频
将本地视频文件(MP4、WebM)拖拽到窗口中,或者在地址栏中粘贴远程视频 URL 并按回车键。
-
添加节点
在视频画面上拖拽绘制热区,或按 N 键快速创建一个默认节点。也可以从右侧组件库中拖入预设模板。
-
配置属性和动作
选中节点后,在属性面板中调整位置、时间范围、样式和交互动作。支持多条动作链式触发。
-
预览和导出
按 P 键进入预览模式查看交互效果。确认无误后,导出 ZWMAP JSON 或直接复制 ZWPlayer 配置。
提示:此工具完全在浏览器中运行。视频数据和交互配置不会上传到任何服务器——您的文件始终保持私密。
节点类型
热区生成器支持 13 种节点类型,分为 4 个类别:
基础节点
| 类型 | 名称 | 说明 |
|---|---|---|
hotspot |
透明热区 | 透明可点击区域,用于触发动作。最常见的交互类型。 |
text |
文字 | 在视频上显示富文本内容,支持自定义字体、颜色、对齐方式等。 |
image |
图片 | 在视频上显示图片,支持自适应填充模式。 |
button |
按钮 | 可点击按钮,支持主题色、变体、形状等样式配置,可触发动作链。 |
交互节点
| 类型 | 名称 | 说明 |
|---|---|---|
choice |
选项分支 | 选项分支节点,提供多个选项供用户选择,每个选项可跳转到不同时间点。 |
quiz |
测验 | 测验节点,支持单选/多选、评分模式、最大尝试次数、正确/错误反馈。 |
form |
表单 | 表单收集节点,支持文本输入、下拉选择等多种字段类型,可配置提交 URL。 |
vote |
投票 | 投票节点,支持单选/多选投票,可显示投票结果,支持数据上报。 |
card |
信息卡片 | 信息卡片弹窗,支持标题、图片、内容、按钮等富文本布局。 |
高级节点
| 类型 | 名称 | 说明 |
|---|---|---|
webview |
网页嵌入 | 内嵌网页视图(IFrame),可在视频上展示外部网页内容。 |
map |
地图 | 地图节点,支持百度地图和高德地图,可标注位置和地址搜索。 |
系统节点
| 类型 | 名称 | 说明 |
|---|---|---|
countdown |
倒计时 | 倒计时节点,支持三种模式:独立读秒、悬浮伴随、精准挑战。 |
speed_controller |
变速控制 | 播放速度控制器,在指定时间范围内自动改变视频播放速度,不可见节点。 |
键盘快捷键
使用以下键盘快捷键提高工作效率:
| 按键 | 操作 | 说明 |
|---|---|---|
| Space | 播放 / 暂停 | 切换视频播放状态 |
| , | 逐帧后退 | 后退一帧 |
| . | 逐帧前进 | 前进一帧 |
| ← | 后退 5 秒 | 向后跳转 5 秒 |
| → | 前进 5 秒 | 向前跳转 5 秒 |
| N | 新建节点 | 在当前时间点创建一个新热区节点 |
| Delete | 删除节点 | 删除选中的节点 |
| Ctrl+Z | 撤销 | 撤销上一步操作 |
| Ctrl+Y | 重做 | 重做已撤销的操作 |
| Ctrl+S | 导出 | 导出 ZWMAP JSON 或保存 |
| P | 预览 | 进入交互预览模式 |
| Esc | 退出 | 退出预览模式或取消选择 |
浮动快捷菜单
选中画布上的任意节点,节点上方会出现快捷菜单。菜单按节点类型定制:类型专属动作在前,之后是公共区——隐藏/显示、复制节点、图层(置顶/上移/下移/置底)、删除节点(删除固定在末位防误触)。多选时仅显示公共区。
| type | 快捷动作 |
|---|---|
hotspot | 跳转设置(目标秒 + 取当前播放头 + 返回按钮)、边框颜色、提示文案 |
text | 加粗、文字颜色、字号、对齐 |
image | 适配循环、锁定比例、更换图片、圆角 |
button | 变体循环、形状循环、主题颜色、编辑文字 |
choice | 横排/竖排、变体循环、主题颜色、编辑选项 |
quiz | 编辑题目、单选/多选、强制完成、出现时暂停 |
form | 编辑字段、添加字段、强制完成 |
vote | 单选/多选、强制完成、编辑选项 |
card | 编辑正文、自动关闭、按钮文字 |
webview | 打开链接、最大化、修改地址 |
map | 地图选点、放大/缩小、复制坐标 |
countdown | 秒数步进(实时显示)、模式循环 |
speed_controller | 播放速率快捷档、恢复模式 |
动作与触发器
每个节点都可以配置一个或多个动作,在用户交互时按顺序依次触发。
动作类型
| 类型 | 名称 | 说明 |
|---|---|---|
SEEK_TIME |
跳转到时间 | 跳转到指定时间点。参数:时间(秒)。 |
PAUSE_MEDIA |
暂停播放 | 暂停视频播放。无需额外参数。 |
PLAY_MEDIA |
恢复播放 | 恢复视频播放。无需额外参数。 |
OPEN_LINK |
打开链接 | 打开指定 URL 链接。参数:URL、打开方式(新窗口/当前窗口)。 |
CONTROL_NODE |
控制组件 | 控制其他节点的显示/隐藏/激活/切换。参数:目标节点 ID、操作类型。 |
EMIT_MESSAGE |
触发前端事件 | 通过 postMessage 向父页面发送自定义消息。参数:键值对。 |
SUBMIT_DATA |
提交数据 | 向指定 API URL 发送 POST JSON 请求。参数:API URL、自定义数据。 |
触发器类型
- 点击 — 用户点击节点时触发
当前版本仅支持 click 触发;长按/滑动等其余触发器为协议预留,编辑器已移除,旧数据按 click 处理。
动画系统
每个节点都支持三种动画阶段:入场、强调、退场。支持多种预设动画效果和自定义时长。
入场动画
| 名称 | 标识 | 说明 |
|---|---|---|
| 淡入 | fadein |
从透明渐变为可见 |
| 左滑入 | slideinleft |
从左侧滑入 |
| 右滑入 | slideinright |
从右侧滑入 |
| 上滑入 | slideinup |
从下方滑入 |
| 下滑入 | slideindown |
从上方滑入 |
| 放大 | zoomin |
从小到大放大出现 |
| 弹入 | bouncein |
弹跳式出现 |
强调动画
| 名称 | 标识 | 说明 |
|---|---|---|
| 脉冲 | pulse |
周期性缩放脉冲 |
| 发光 | glow |
发光闪烁效果 |
| 抖动 | shake |
左右抖动 |
| 弹跳 | bounce |
上下弹跳 |
| 摇摆 | swing |
左右摇摆 |
退场动画
| 名称 | 标识 | 说明 |
|---|---|---|
| 淡出 | fadeout |
从可见渐变为透明 |
| 左滑出 | slideoutleft |
向左滑出消失 |
| 右滑出 | slideoutright |
向右滑出消失 |
| 上滑出 | slideoutup |
向上方滑出消失 |
| 下滑出 | slideoutdown |
向下方滑出消失 |
| 缩小 | zoomout |
从大缩小消失 |
动画时长
动画持续时间,单位为毫秒(ms)。默认值 300ms。范围:100–3000ms。
ZWMAP 交互标注规范
ZWMAP(ZWPlayer 媒体应用协议)的交互标注类型定义了描述视频交互热区的标准 JSON 格式。该协议实现了热区编辑工具与视频播放器之间的互操作性。
协议头部
每个 ZWMAP 热区文档以协议标识符开头:
{
"zwp_protocol": "ZWMAP/1.0",
"zwp_type": "annotation",
"zwp_version": "1.0"
}
节点对象字段
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id |
string | 是 | 节点唯一标识符(UUID)。 |
type |
string | 是 | 节点类型,如 hotspot、text、button、quiz 等。 |
name |
string | 否 | 节点显示名称。 |
time_range |
array | 是 | 节点出现时间,单位为秒。 |
position.x |
number | 是 | X 坐标,百分比(0–100)。 |
position.y |
number | 是 | Y 坐标,百分比(0–100)。 |
position.w |
number | 是 | 宽度,百分比(0–100)。 |
position.h |
number | 是 | 高度,百分比(0–100)。 |
style |
object | 否 | 样式对象,包含边框、透明度、背景色等视觉属性。 |
content |
object | 否 | 内容对象,根据节点类型不同而异。 |
event |
array | 否 | 事件数组,包含触发器和动作链配置。 |
animation |
object | 否 | 动画对象,包含入场、强调、退场动画配置。 |
完整示例
此示例展示了一个包含文本标注和按钮的简单 ZWMAP 文档:
{
"zwp_protocol": "ZWMAP/1.0",
"zwp_type": "annotation",
"zwp_version": "1.0",
"nodes": [
{
"id": "a1b2c3d4",
"type": "text",
"name": "Title Card",
"time_range": [0, 5],
"position": { "x": 10, "y": 10, "w": 80, "h": 15 },
"style": { "opacity": 1 },
"content": {
"type": "text",
"text": "Welcome to the interactive video!",
"style": { "color": "#ffffff", "fontSize": 24 }
},
"animation": {
"enter": "fadein",
"exit": "fadeout",
"duration": 300
}
},
{
"id": "e5f6g7h8",
"type": "button",
"name": "Skip Intro",
"time_range": [2, 8],
"position": { "x": 70, "y": 80, "w": 25, "h": 10 },
"event": {
"trigger": "click",
"actions": [
{ "type": "SEEK_TIME", "payload": { "target": 10 } },
{ "type": "PAUSE_MEDIA", "payload": {} }
]
}
}
]
}
ZWPlayer 集成
ZWPlayer 是一个功能丰富的 JavaScript 视频播放器,开箱即用支持视频标注交互。以下是如何将生成的标注配置与 ZWPlayer 集成。
播放器配置
在 ZWPlayer 初始化配置中添加 annotations 属性:
var player = new ZWPlayer({
playerElm: 'mse',
url: 'https://cdn.example.com/video.mp4',
annotations: {
"zwp_protocol": "ZWMAP/1.0",
"zwp_type": "annotation",
"nodes": [
{
"id": "a1b2c3d4",
"type": "button",
"name": "Click Me",
"time_range": [5, 15],
"position": { "x": 40, "y": 40, "w": 20, "h": 10 },
"event": {
"trigger": "click",
"actions": [
{ "type": "PAUSE_MEDIA", "payload": {} }
]
}
}
]
}
});
从工具复制配置
在工具的 JSON 面板中,点击复制按钮即可获取可直接使用的 ZWPlayer 配置片段。
实时预览
按 P 键或点击预览按钮,打开一个完整的 ZWPlayer 实例并加载当前标注配置。在预览中可以点击标注测试交互效果。按 Esc 键退出。
使用 ZWMAP JSON
将导出的 ZWMAP JSON 存放在服务器上,应用可以获取该 JSON 并将解析后的 nodes 数组直接传递给 ZWPlayer 配置中的 annotations 属性。
使用 JSON URL
除了传入对象,还可以直接将 ZWMAP JSON 文件的 URL 作为字符串传入,ZWPlayer 会自动获取并解析:
var player = new ZWPlayer({
playerElm: 'mse',
url: 'https://cdn.example.com/video.mp4',
annotations: 'https://cdn.example.com/annotations/movie_annotation.json'
});
部署方式:将导出的 ZWMAP JSON 文件下载并上传到 Web 服务器。确保 JSON 文件可公开访问。ZWPlayer 会在视频播放时自动加载和渲染标注。
拖拽加载
您还可以通过将文件直接拖拽到 ZWPlayer 播放器上来加载标注:
- 单独拖拽标注 JSON:将 *_annotation.json 文件拖入播放器,为当前播放的视频加载标注。
- 同时拖拽视频和标注:将视频文件与对应的标注 JSON 一起拖入,播放器会自动按文件名匹配(例如 movie.mp4 匹配 movie_annotation.json)。
- 播放列表拖拽:拖入多个视频及对应的标注文件,自动创建带交互标注的播放列表。
注意:拖拽的 JSON 文件需为 ZWMAP 协议格式(zwp_type 为 "annotation"),播放器会自动解析 nodes 数组。