摘要:本文介绍 ZWPlayer 在线播放列表编辑器与 ZWMAP 协议,说明如何用一个 JSON 文件统一管理 IPTV 直播流、HLS 电台、MP4 点播源,支持跨设备加载和链接分享,附 CORS 跨域问题处理和直播源维护建议。
一、背景
玩网络流媒体的人通常面临这样的情况:
- 央视、卫视的 HLS 直播流散落在各个 CDN,地址不固定;
- 国际免费频道(CGTN、DW、France 24、NASA TV、Al Jazeera 等)各有官方地址,需要分别记录;
- 网络电台(中国之声、SomaFM、Jazz Radio、NPR 等)多为裸 MP3/AAC 流,只能靠书签维护;
- 教育科普频道(CETV 空中课堂、纪录片频道)的播放地址需要单独查找。
这些资源单独打开基本都能播,但集中管理和分享比较麻烦——书签越来越多,发给别人一堆裸链接对方也不好用。
ZWPlayer 的做法是:用一个遵循 ZWMAP 协议的 JSON 文件作为统一容器,存储、加载、分享都通过这一个文件完成。
二、ZWMAP 协议简介
ZWMAP(ZWMAP/1.0)是 ZWPlayer 定义的媒体资源描述格式,用于描述播放列表的结构和元数据。一个典型的播放列表文件如下:
{
"zwp_protocol": "ZWMAP/1.0",
"zwp_type": "playlist",
"id": "my_tv_radio",
"title": "我的电视电台合集",
"autoPlayNext": true,
"groups": [
{
"id": "g1",
"name": "央视频道",
"expanded": true,
"items": [
{
"id": "it1",
"name": "CCTV-1 综合",
"url": "https://cd-live-stream.news.cctvplus.com/live/smil:CHANNEL1.smil/playlist.m3u8",
"type": "hls",
"isLive": true
},
{
"id": "it2",
"name": "CGTN 英语 (1080p)",
"url": "https://english-livebkali.cgtn.com/live/encgtn.m3u8",
"type": "hls",
"isLive": true
}
]
},
{
"id": "g2",
"name": "网络电台",
"items": [
{
"id": "it3",
"name": "CNR 中国之声",
"url": "http://ngcdn001.cnr.cn/live/zgzs/index.m3u8",
"type": "hls",
"isLive": true
}
]
}
]
}
核心字段说明
| groups / items | 两级结构:分组(频道分类/剧集/曲风)→ 条目(单个频道/单集),适合管理大量资源 |
| type | 媒体类型,如 hls / mp4 / mp3,支持自动推断,格式错误会被校验器提示 |
| isLive | 直播标记,直播模式下隐藏进度条,点播模式下启用续播 |
| autoPlayNext | 点播场景下自动播放下一条目 |
加载方式
- 本地加载:ZWPlayer 支持直接打开本地 JSON 文件;
- 远程加载:将文件托管到静态服务器(GitHub Pages、对象存储 OSS/COS/R2、个人 NAS 等),将 URL 分享给他人,对方在 ZWPlayer 中粘贴 URL 即可加载。
三、在线播放列表编辑器
ZWPlayer 提供了一个纯前端在线编辑器(地址见文末),编辑过程在浏览器本地完成,数据不经过服务器。
3.1 主要功能
① 多格式导入
支持拖入 M3U/M3U8 文本、批量导入音视频文件、从 URL 远程拉取,以及导入旧版 ZWMAP JSON。手头已有 M3U 列表的用户可以直接导入,不需要逐条重新录入。
② 树形编辑器
支持增删分组、条目拖拽排序、多选批量操作、Shift 框选、关键词搜索过滤。不需要手动编辑 JSON 也能完成所有编辑操作。
③ 实时校验
内置 16 条校验规则(V-001 ~ V-016),覆盖 URL 格式、媒体类型一致性、重复条目、ID 冲突等情况,导出前自动检查,减少导出无效列表的概率。
④ JSON 面板双向编辑
预览面板可直接修改 JSON 内容,Apply 后即时生效,方便熟悉 JSON 格式的用户手动微调。
⑤ 草稿自动保存
编辑内容自动保存到浏览器 localStorage,关闭标签页后重新打开仍可恢复。
⑥ 撤销/重做
支持完整的撤销历史,批量操作会合并为单步,方便回退。 
3.2 条目支持的元数据
每个条目除了 URL 之外,还可以配置以下字段:
| 外挂字幕 | 支持单字幕或多字幕数组,可为无字幕的源补充字幕 |
| 配音轨 | 挂载多语言音轨 |
| 章节(Chapters) | 长视频分章节跳转 |
| 缩略图 | 条目封面图 |
| 附注(Annotation) | 备注信息,如"该线路仅白天可用"、“来源:官网直播页” |
| 水印 | 播放时叠加文字或图片水印 |
这些字段都写入 JSON 文件,分享文件时一并传递。
3.3 预览模式
编辑完成后可切换到预览模式,直接在编辑器中试播列表里的频道,确认可用后再导出。
四、播放器功能
ZWPlayer 播放器对应支持列表中的元数据:
- 收藏:常用频道一键收藏,跨列表快速访问;
- 播放进度记忆:点播内容自动记录续播位置;
- 字幕 / 水印 / 章节:直接读取列表中的元数据渲染;
- 直播/点播区分:isLive: true 的条目隐藏进度条,false 则启用续播。

五、典型使用场景
场景一:家庭频道整合
将央视、卫视、地方台、国际频道整理到一个 JSON 文件,托管到 NAS 或 GitHub Pages,家里各设备使用同一个 URL 加载,频道列表统一维护。
场景二:分享给朋友
将整理好的列表 JSON 上传到 GitHub Gist 或对象存储,把 URL 发给朋友,对方在 ZWPlayer 中粘贴 URL 即可直接使用。
场景三:多人协作维护
JSON 是纯文本,可以放进 Git 仓库多人维护,通过 Pull Request 合并修改,版本历史清晰。
六、常见问题
Q1:视频有地址,但放进播放器提示跨域(CORS)错误,怎么处理?
原因:ZWPlayer 运行在浏览器中(ZWPlayer.com 域名下),请求另一个域名的视频流(.m3u8、.ts、.mp4、音频流等)时,浏览器会检查对方服务器是否允许跨域访问。如果视频源服务器没有返回 Access-Control-Allow-Origin 响应头,浏览器会拦截请求,播放器端显示 CORS 错误。这不代表视频地址失效,而是浏览器的同源策略限制。
ZWPlayer 的处理方式:检测到视频源缺少 CORS 头时,会自动去掉 crossorigin 属性重试一次,多数情况下普通播放不受影响;截图、波形频谱等需要跨域授权的功能会对该源降级。
处理建议:
选带 CORS 头的源:收集直播流时,优先选官方 CDN 地址。广播电台和国际频道的官方 HLS 地址通常带 CORS 头;部分 IPTV 聚合源的地址面向机顶盒,不带 CORS 头,在浏览器里无法直接播放。
用附注说明限制:对于机顶盒能播但浏览器跨域报错的地址,在附注字段注明"浏览器端受 CORS 限制,建议用客户端播放器",方便使用者判断。
自建反向代理(进阶):如果需要在浏览器里播放不带 CORS 头的源,可以在自己的服务器搭反向代理,转发流量时添加 Access-Control-Allow-Origin: * 头。Nginx 示例:
location /proxy/ {
proxy_pass https://your-stream-source.com/;
add_header Access-Control-Allow-Origin *;
}
注意反向代理会消耗服务器带宽,适合自用或小范围使用。
关于播放列表 JSON 的跨域:将 JSON 文件托管到第三方服务器时,浏览器加载该文件同样受 CORS 约束。GitHub Pages、Gitee Pages、阿里云 OSS、腾讯云 COS、Cloudflare R2 等静态托管服务默认带 CORS 头,可以直接使用;自建静态服务需要手动添加 add_header Access-Control-Allow-Origin *;。
Q2:直播源经常失效,怎么维护?
免费直播源随时可能变化。几个实用做法:
- 用 Git 仓库(GitHub / Gitee)管理列表 JSON,配合编辑器的校验报告定期清理失效条目;
- 同一频道保留 2~3 条不同线路放在同一分组,互为备用;
- 用附注字段记录来源和可用时段,方便后续维护。
Q3:手里有现成的 M3U/M3U8 文件,能直接导入吗?
可以。编辑器支持粘贴 M3U/M3U8 内容批量导入,也支持从 URL 远程拉取,导入后自动解析为两级结构,校验、去重、分组操作均在界面中完成。
Q4:播放进度和收藏记录存在哪里?换设备还有吗?
收藏和播放进度保存在浏览器本地(localStorage),不上传服务器。换浏览器或换设备不会同步。附注、字幕、水印等元数据写在 JSON 文件里,随列表文件传递。
Q5:ZWPlayer 免费吗?可以用于商业项目吗?
在线播放列表编辑器免费使用,无需注册。播放器本体可在 GitHub Releases / Gitee Releases 获取,商业授权条款见官方文档。另有 WordPress 插件版,可在 WP 站点内嵌入播放器。
Q6:收集和分享直播源需要注意什么?
只收集和分享官方公开发布、或明确允许免费访问的流媒体资源,注意版权。整理时用附注写清来源和可用时段,方便使用者了解资源情况。
七、快速上手
相关链接
| 在线播放列表编辑器 | https://www.ZWPlayer.com/zh/tools/playlist/ |
| 编辑器帮助文档 | https://www.ZWPlayer.com/zh/tools/playlist/help.html |
| 播放器在线演示 | https://www.ZWPlayer.com/zh/tools/videoplayer/ |
| 开发文档 | https://www.ZWPlayer.com/zh/docs/support.html |
| GitHub Releases | https://github.com/chenfanyu/ZWPlayer-release/releases |
| WordPress 插件 | https://wordpress.org/plugins/zw-player-video-embed/ |
小结
ZWMAP 协议 + ZWPlayer 在线编辑器提供了一种相对轻量的方式来管理和分享免费流媒体资源:用一个 JSON 文件统一存储频道列表,托管到静态服务后可以通过链接直接分享,不需要搭建额外的后端服务。
对于有整理 IPTV 或网络电台习惯的用户,这套方案的上手成本不高,也有一定扩展空间。
文中涉及的工具均为公开可访问产品,示例直播流地址为写作时可用地址,实际可用性以访问时为准。




