【踩坑实录】xTeVe M3U 只有一行 #EXTM3U?你可能踩了这几个坑

xTeVe 2.2.0 真的坑多。我从昨晚折腾到现在,把所有踩过的坑都列出来。 如果你正在用 xTeVe,先看这篇,省得走弯路。


坑一:滤波器选了 39 个频道,M3U 还是空的

现象

滤波器页面显示「可选直播:39/39」,看起来一切正常。 但下载 xteve.m3u 打开一看,只有一行 #EXTM3U,没有任何频道。

原因

滤波器只是筛选候选频道,不是启用频道。 xTeVe 的 M3U 输出规则是:只有【制图】页面里处于启用状态的频道,才会被导出到 M3U。

你光在滤波器里选了频道,没进制图页面打勾启用,xTeVe 判定没有可用活动频道,输出当然是空的。

解决

  1. 左侧菜单点【制图】
  2. 页面顶部找到「全部启用」按钮,一次性勾选全部频道
  3. 点左上角【保存】,保存映射和激活状态

坑二:File Station 里看 xteve.m3u 文件大小,判断输出正不正常

现象

File Station 里 xteve.m3u 只有 100 多字节,以为是 M3U 没生成。

原因

xTeVe 的 /m3u 接口是实时动态生成的,不读取磁盘上的 xteve.m3u 文件。 磁盘上那个小体积文件只是占位空文件,完全没用。HTTP 接口返回什么内容,和那个文件半毛钱关系都没有。

之前我反复让你删文件、重启容器、看文件大小,全是错的。

正确验证方式

直接用浏览器访问 http://NASIP:34400/m3u/xteve.m3u,浏览器会自动下载文件。 下载后用记事本打开,看里面是只有一行 #EXTM3U,还是有一堆 #EXTINF 频道行。


坑三:VLC 打开 xteve.m3u 无法播放

现象

M3U 文件里频道列表正常,但 VLC 打开就是播不了,黑屏或者转圈。

原因

这不是 M3U 文本的问题,是 xTeVe 转发拉流失败。 xTeVe 输出的 M3U 里,每个频道的流地址都是 http://NASIP:34400/stream/xxx 这种代理地址。 播放器请求这个地址,xTeVe 容器再去请求原始源的流。

一旦容器的 UA、网络被源服务器识别拦截(返回 403),播放器就播不了。 哪怕你电脑浏览器能直接打开原始源流,Docker 容器里的请求也可能被拒。

排查步骤

  1. 编辑播放列表里的源 M3U,HTTP Headers 加上模拟 VLC 的 UA:
    User-Agent: VLC/3.0.20 LibVLC/3.0.20
  2. Streaming 设置里,Buffer 缓冲区设为 0,关闭 ffmpeg 缓冲转发
  3. 保存,重启 xTeVe 容器

坑四:lineup.json 返回 null

现象

浏览器直接访问 lineup.json,返回 null。

原因

xTeVe 2.2.0 的经典 bug。浏览器直接 GET 这个接口经常返回 null,但 HDHomeRun 客户端(比如 Jellyfin)用不同的请求方式读取是正常的。

结论

只要【制图】页面能看到频道列表,就说明线路数据存在,不用管 lineup.json 返回什么。


坑五:以为 xTeVe 有一键重定向开关

错误认知

之前有人告诉你 xTeVe 可以设置"重定向模式",直接返回原始流地址,不用容器转发。

事实

xTeVe 2.2.0 根本没有这个开关。 它输出的所有流地址都是 http://NASIP:34400/stream/xxx 形式,所有请求都必须经过 xTeVe 容器转发。 不存在"直接返回原始 URL"的选项。


总结

xTeVe 这个东西,坑多、bug 多、还不稳定。 如果你只是想在 Jellyfin 里看电视,真的没必要折腾。 直接 M3U 直连,简单粗暴,稳得多。