【踩坑实录】xTeVe M3U 只有一行 #EXTM3U?你可能踩了这几个坑
xTeVe 2.2.0 真的坑多。我从昨晚折腾到现在,把所有踩过的坑都列出来。 如果你正在用 xTeVe,先看这篇,省得走弯路。
坑一:滤波器选了 39 个频道,M3U 还是空的
现象
滤波器页面显示「可选直播:39/39」,看起来一切正常。
但下载 xteve.m3u 打开一看,只有一行 #EXTM3U,没有任何频道。
原因
滤波器只是筛选候选频道,不是启用频道。 xTeVe 的 M3U 输出规则是:只有【制图】页面里处于启用状态的频道,才会被导出到 M3U。
你光在滤波器里选了频道,没进制图页面打勾启用,xTeVe 判定没有可用活动频道,输出当然是空的。
解决
- 左侧菜单点【制图】
- 页面顶部找到「全部启用」按钮,一次性勾选全部频道
- 点左上角【保存】,保存映射和激活状态
坑二: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 容器里的请求也可能被拒。
排查步骤
- 编辑播放列表里的源 M3U,HTTP Headers 加上模拟 VLC 的 UA:
User-Agent: VLC/3.0.20 LibVLC/3.0.20 - Streaming 设置里,Buffer 缓冲区设为 0,关闭 ffmpeg 缓冲转发
- 保存,重启 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 直连,简单粗暴,稳得多。