视频热区生成器 — 使用指南
在视频上创建可交互的热区节点,支持分支选择、测验、投票、表单等丰富的交互类型,并导出 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. 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. 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(Z&W 媒体标注协议)热区类型定义了描述视频交互热区的标准 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 数组。