必须修正uri解析逻辑,否则播放器将卡在加载状态;可通过浏览器network标签页确认相对路径是否被错误解析,推荐使用--base-url参数强制指定base url,或手动修正m3u8路径,或服务端配置base-uri标签及输出绝对路径。

当m3u8播放列表中引用的子m3u8或ts文件路径为相对路径,而客户端错误地按根目录拼接导致404时,必须修正URI解析逻辑,否则播放器将卡在加载状态。
确认相对路径是否被错误解析
打开浏览器开发者工具 → Network标签页 → 播放时过滤Media或XHR → 找到master.m3u8请求 → 查看其响应体中#EXT-X-STREAM-INF行后的路径(如chunklist.m3u8)→ 再查看浏览器实际发起的子请求URL。若子请求地址是https://cdn.example.com/chunklist.m3u8(缺失/live/层级),而非https://cdn.example.com/live/chunklist.m3u8,则证实base URI未继承父级路径。
这一步不能跳过,因为部分CDN会返回302重定向掩盖真实解析错误,仅靠肉眼检查m3u8内容无法定位问题。
强制指定Base URL(推荐)
方法一:使用N_m3u8DL-RE时添加--base-url参数
在命令行中显式传入master.m3u8所在目录的完整URL:
【必须与master.m3u8实际所在路径完全一致,末尾不加斜杠】
bash N_m3u8DL-RE "https://cdn.example.com/live/master.m3u8" --base-url "https://cdn.example.com/live/"
该参数会覆盖默认URI继承逻辑,所有相对路径均以此为基准解析,绕过RFC 8216中易出错的自动推导环节。
手动修正m3u8文件中的路径
第一步:用UTF-8编码打开master.m3u8文件(避免BOM干扰)
第二步:定位所有#EXT-X-STREAM-INF行下方的子m3u8路径行(如chunklist.m3u8)
第三步:将每条相对路径替换为绝对路径
例如将chunklist.m3u8 → https://cdn.example.com/live/chunklist.m3u8;将media_001.ts → https://cdn.example.com/live/media_001.ts
注意:若子m3u8内部仍含相对路径,需递归处理——先下载该子m3u8,再对其执行同样替换操作。此法适合调试或小规模修复,不适用于动态生成的多级嵌套结构。
服务端配置修正(治本)
方法1:在master.m3u8头部插入BASE-URI标签
在#EXTM3U之后、第一个#EXT-X-STREAM-INF之前,添加一行:
#EXT-X-SESSION-DATA:DATA-ID="com.example.base-uri",VALUE="https://cdn.example.com/live/"
或更通用的写法(需播放器支持RFC 8216§4.3.4.1):
#EXT-X-DEFINE:NAME="BASE-URI",VALUE="https://cdn.example.com/live/"
方法2:改用绝对路径生成m3u8
服务端生成playlist时,直接输出完整URL而非相对路径。这是最稳妥的方式,彻底规避客户端解析差异。需确保CDN或源站配置支持URI重写规则,避免硬编码域名导致迁移困难。











