视频热区生成器 — 使用指南
在视频上创建可交互的热区节点,支持分支选择、测验、投票、表单等丰富的交互类型,并导出 ZWMAP 兼容的 JSON 实现与 ZWPlayer 的无缝集成。
快速入门
视频热区生成器(Hotspot Generator)是一款免费的在线工具,可以在视频画面上叠加交互式热区节点,实现分支剧情、知识问答、信息展示、投票调查等互动体验。导出的 ZWMAP JSON 可直接用于 ZWPlayer 播放器。
快速上手步骤
-
加载视频
将本地视频文件(MP4、WebM)拖拽到窗口中,或者在地址栏中粘贴远程视频 URL 并按回车键。
-
添加节点
在视频画面上拖拽绘制热区,或按 N 键快速创建一个默认节点。也可以从右侧组件库中拖入预设模板。 to create a default node. You can also drag preset templates from the component library.
-
配置属性和动作
选中节点后,在属性面板中调整位置、时间范围、样式和交互动作。支持多条动作链式触发。
-
预览和导出
按 P 键进入预览模式查看交互效果。确认无误后,导出 ZWMAP JSON 或直接复制 ZWPlayer 配置。 to enter preview mode and test interactions. When ready, export the ZWMAP JSON or copy the ZWPlayer config directly.
提示:此工具完全在浏览器中运行。视频数据和交互配置不会上传到任何服务器——您的文件始终保持私密。
节点类型
热区生成器支持 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 | 退出 | 退出预览模式或取消选择 |
动作与触发器
每个节点都可以配置一个或多个动作,在用户交互时按顺序依次触发。
动作类型
| 类型 | 名称 | 说明 |
|---|---|---|
SEEK_TIME |
跳转到时间 | 跳转到指定时间点。参数:时间(秒)。 |
PAUSE_MEDIA |
暂停播放 | 暂停视频播放。无需额外参数。 |
PLAY_MEDIA |
恢复播放 | 恢复视频播放。无需额外参数。 |
OPEN_LINK |
打开链接 | 打开指定 URL 链接。参数:URL、打开方式(新窗口/当前窗口)。 |
CONTROL_NODE |
控制组件 | 控制其他节点的显示/隐藏/激活/切换。参数:目标节点 ID、操作类型。 |
EMIT_MESSAGE |
触发前端事件 | 通过 postMessage 向父页面发送自定义消息。参数:键值对。 |
SUBMIT_DATA |
提交数据 | 向指定 API URL 发送 POST JSON 请求。参数:API URL、自定义数据。 |
触发器类型
- 点击 — 用户点击节点时触发
- 长按 — 用户长按节点超过阈值时触发
- 滑动 — 用户在节点上滑动时触发
- 拖拽 — 用户拖拽节点时触发
- 被动 — 由其他动作或事件自动触发
- 手势 — 识别特定手势(如双指缩放)时触发
动画系统
每个节点都支持三种动画阶段:入场、强调、退场。支持多种预设动画效果和自定义时长。
入场动画
| 名称 | 标识 | 说明 |
|---|---|---|
| 淡入 | 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.start |
number | 是 | 节点出现时间,单位为秒。 |
time_range.end |
number | 是 | 节点消失时间,单位为秒。 |
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 | 否 | 内容对象,根据节点类型不同而异。 |
events |
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": { "start": 0, "end": 5 },
"position": { "x": 10, "y": 10, "w": 80, "h": 15 },
"style": { "opacity": 1 },
"content": {
"text": "Welcome to the interactive video!",
"color": "#ffffff",
"fontSize": 24
},
"animation": {
"enter": { "type": "fadein", "duration": 300 },
"exit": { "type": "fadeout", "duration": 300 }
}
},
{
"id": "e5f6g7h8",
"type": "button",
"name": "Skip Intro",
"time_range": { "start": 2, "end": 8 },
"position": { "x": 70, "y": 80, "w": 25, "h": 10 },
"events": [
{
"trigger": "click",
"actions": [
{ "type": "SEEK_TIME", "time": 10 },
{ "type": "PAUSE_MEDIA" }
]
}
]
}
]
}
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": { "start": 5, "end": 15 },
"position": { "x": 40, "y": 40, "w": 20, "h": 10 },
"events": [
{
"trigger": "click",
"actions": [
{ "type": "PAUSE_MEDIA" }
]
}
]
}
]
}
});
从工具复制配置
在工具的 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 数组。