如果您的 IPTV 服务商给的是 Xtream 登录(服务器、用户名、密码),而您想用的播放器只接受单条 M3U 链接——或者情况正好相反——您并没有被卡住。这两样其实是同一个东西。本质上,Xtream 登录只是把 M3U 链接里本就包含的信息写得更整齐而已。
本指南讲解两个方向的转换、需要注意的坑,以及如何在不把凭据输入到陌生人能看到的地方的前提下完成转换。本站的 Xtream ↔ M3U 链接转换器完全在您的浏览器里完成转换——该页面背后没有任何服务器端点。
M3U 链接是一个固定模板;Xtream 登录只是填进模板里的三个凭据。
为什么会需要这种转换
同一家服务商几乎总是同时支持两种形式,但您恰好安装的那款播放器只会要其中一种。各应用的分歧集中在几点:
- 只认 M3U 的老派播放器(VLC、基础的智能电视应用、专用 IPTV 盒子)接受一条链接。它们不了解 Xtream 的 API 端点;它们下载一份扁平的播放列表文件并从中播放直播流。
- 原生支持 Xtream 的播放器(大多数现代 IPTV 应用,包括 Klipa)更偏好三段式凭据。它们用凭据分别拉取直播频道列表、VOD 片库、剧集目录和 EPG——分类更好、可动态刷新,还有 M3U 导出无法表达的点播板块。
如果服务商给的是一种而播放器要另一种,转换只需 30 秒。您不必找服务商索要“另一种格式”——他们给您的本来就是两种,只是装在同一个壳里。
Xtream 转 M3U 的公式
所有 Xtream 服务商都用同一个 URL 模板。记住它之后,您就能手动用凭据拼出 M3U 链接:
http://<server>:<port>/get.php?username=<USERNAME>&password=<PASSWORD>&type=m3u_plus&output=mpegts
以凭据 server: http://server.example:8080、username: ABC、password: XYZ 为例,三条具体链接如下:
M3U: http://server.example:8080/get.php?username=ABC&password=XYZ&type=m3u_plus&output=mpegts
EPG: http://server.example:8080/xmltv.php?username=ABC&password=XYZ
player_api: http://server.example:8080/player_api.php?username=ABC&password=XYZ
各部分的含义:
get.php是播放列表端点。永远叫get.php——这里不存在服务商自定义命名。type=m3u_plus请求包含频道台标和分组标题的扩展 M3U 格式。纯type=m3u也能用,但生成的播放列表信息更少;您几乎总是想要m3u_plus。output=mpegts请求以原始 MPEG-TS 播放的直播流。另一个常见选项是output=hls,它生成 HLS(.m3u8)链接——适合浏览器和部分 Apple 设备,但在电视盒子上支持没那么普遍。如果您的播放器比较挑剔,第一件要试的事就是换output。xmltv.php是 EPG 端点。凭据相同,文档独立。大多数播放器在另一个输入框(“EPG URL”或“XMLTV URL”)里接收这条链接。player_api.php是 JSON API。“原生支持 Xtream”的播放器用它获取直播/VOD/剧集目录树和频道台标。
反向操作:从 M3U 链接提取凭据
拿到一条符合上述公式的 M3U 链接,您可以直接把三个 Xtream 字段读回来:
http://server.example:8080/get.php?username=ABC&password=XYZ&type=m3u_plus
└────┘ └────┘
username password
- 服务器是主机后第一个斜杠之前的全部内容:
http://server.example:8080。把/get.php及其后的部分去掉即可。 - 用户名是查询参数
username的值。 - 密码是查询参数
password的值。
如果缺少某个查询参数,说明这条链接不是标准 Xtream 格式。有些服务商提供的纯 M3U 链接里根本没有凭据——通常是静态或令牌式播放列表,链接本身就是秘密。这种链接没有什么可提取的;在任何支持 M3U 的播放器里原样使用即可。
常见的坑
有几个细节经常绊倒人。
特殊字符的 URL 编码
如果您的密码包含 &、=、+、#、% 或 / 这类字符,它们在 URL 里必须进行百分号编码。密码中间一个原样的 & 就会破坏 URL 解析——播放器会把它后面的内容当成另一个查询参数。
大多数服务商的控制面板会替您处理好。如果您手动拼链接而密码里有任何奇怪字符,先把密码过一遍任意“URL 编码”工具。或者干脆交给浏览器端转换器代劳。
端口
Xtream 服务商极少使用默认的 80 或 443 端口。常见的是 8080、25461、8000 或某个随机高位端口。端口是服务器 URL 的一部分,不是可选项。如果您看到 http://server.example/get.php?… 没带端口,要么它真用 80 端口(少见),要么服务商前面架了反向代理(也少见)。多数时候端口缺失只是因为有人手抄链接时弄丢了。
http 与 https
大多数 Xtream 服务商走 HTTP 而不是 HTTPS。https:// 形式常常返回证书错误或 404,因为服务器根本没有配置 TLS。如果拿到的服务器地址带 https:// 且无法使用,试试纯 http://。代价是您的密码将以明文传输;遗憾的是这在 IPTV 服务商中是常态。
M3U 链接的自定义路径
有些服务商会自定义路由——您看到的不是 /get.php,而是 /playlist.m3u、/m3u.php,甚至 /index.php?type=m3u。这些链接里的凭据仍然符合 Xtream API 的预期,转换器能正确提取,但服务商实际使用的播放列表链接是非标准的。如果您用标准的 /get.php 路径自己拼一条 M3U 链接,服务商可能会拒绝。这种情况请保留服务商给的原始链接——不要试图“修正”它。
凭据末尾的空白字符
从邮件或论坛帖子里粘贴时,经常会给用户名带上一个看不见的尾随空格、换行或不间断空格。Xtream API 把 ABC 和 ABC 视为不同的用户名;您会收到一个和密码错误一模一样的认证失败响应。转换器会自动去除用户名的空白并在发生时提醒您。如果您手动拼链接,先把每个字段粘到纯文本编辑器里,目视检查末尾。
安全地完成转换
网上有不少提供这种转换的网站。大多数没问题,有些则很可疑。风险很直白——粘进陌生人表单的凭据可能被记录、收集或重放。即便是毫无恶意的诚实运营者,也照样有访问日志。
本站的转换器在设计上就不可能留下关于您凭据的访问日志,因为它背后没有服务器端点。转换完全以 JavaScript 形式在您的浏览器里运行。凭据只存在于 DOM 输入框中,页面关闭即消失;它们不会出现在地址栏,不会进 localStorage,也不会被发送到任何地方。转换时打开浏览器的网络面板,您会看到零条携带凭据的出站请求。
这也是您对任何索要 IPTV 凭据的工具都应有的标准。如果某个转换器在您点击“转换”时发出了网络请求,那它按定义就已经把您的凭据传到了某个地方。
转换完成后:导入前先验证
成功拼出的链接不等于能用的链接。两个方向的转换都是确定性的字符串变换——作为变换它们没有错,但它们无法告诉您凭据是否有效、订阅是否在有效期、服务器是否可达。
在正式导入之前,有两个省事的检查:
- M3U 链接:把结果粘进 M3U 播放列表测试器。它会抓取播放列表、解析并探测前 100 路直播流。绿色表示链接没问题;红色会告诉您具体的失败类型(返回 HTML、404、死流)。
- Xtream 凭据:把三段凭据粘进 Xtream 凭据检查器。它在服务器端调用 API,返回认证状态、到期时间、连接数限制和频道数量,能区分“密码错误”“订阅到期”和“服务器不可达”。
装播放器之前先跑一遍其中任意一个,当问题出在凭据本身时能省下约二十分钟的排查时间。
当 M3U 链接里没有凭据时
您会遇到的一小部分 M3U 链接根本不是 Xtream。它们是托管在静态服务器上的扁平播放列表,或者秘密藏在路径而非查询串里的令牌式链接:
https://server.example/playlists/9c1f4a8b3e/stream.m3u8
这里没有可提取的东西——链接本身就是凭据。这类链接在只认 M3U 的播放器里原样可用。它们没有等价的 Xtream 表示,因为它们不是 Xtream Codes 面板生成的,而是来自另一套(更老的)IPTV 技术栈。如果服务商只给了您这种链接,而播放器坚持要 Xtream 凭据,那服务商确实没有 Xtream 登录可给。要么问服务商,要么换一款接受 M3U 链接的播放器。
在 Klipa 里是什么样子
Klipa 在同一个媒体库里并排接受两种形式。您可以把同一家服务商的 M3U 链接和 Xtream 登录添加为两个独立来源;应用会使用其中健康的那个。哪天 M3U 导出开始返回 HTML 了,Xtream API 调用会撑住您的频道列表直到下次刷新,反之亦然。
这就是“该用哪种格式”的简单答案——都用。如果只能选一个,Xtream 与 M3U 的对比讲了什么时候该以哪个为主。