一、很多新手搞不懂 M3U8 里面两种路径格式M3U8 索引里面TS 分片、子 M3U8、密钥地址有两种写法绝对路径完整 URL、相对路径。很多开发分不清两者差异代理、CDN、环境迁移的时候踩大量坑。现象经常是直接访问源站 M3U8 播放正常经过 Nginx 代理之后TS 分片 404测试环境一切正常部署到正式环境域名一变全部分片 404 黑屏。很多人花大量时间排查 Nginx proxy_pass 配置但是根源是 M3U8 内部 URL 路径写法。简单通俗解释绝对路径写完整 https 域名 完整资源地址例如https://xxx.com/1.ts相对路径不写域名只写资源文件名例如1.ts、./sub/index.m3u8。相对路径拼接规则以当前这份 M3U8 文件访问 URL 作为基准地址拼接出完整请求地址。很多人误以为相对路径是相对于服务器磁盘文件目录这个理解是错误的相对路径是基于浏览器 HTTP 访问的 URL 路径不是服务器本地磁盘路径。遇到路径相关 404 故障我会使用 m3u8live.cn 网页调试工具打开 M3U8 原始文本直接查看里面分片是绝对路径还是相对路径快速定位路径拼接问题。二、绝对路径优缺点✅优点写死完整域名不用关心 M3U8 访问路径层级不会出现拼接错位。 ❌缺点域名写死测试、生产环境域名切换或者经过代理网关转发M3U8 报文内部域名不会自动变化分片直接 404。如果要改写域名必须使用 Nginx sub_filter 修改 M3U8 返回报文内容。适用场景域名固定不会做代理转发改写域名的业务。三、相对路径优缺点✅优点不写死域名M3U8 在哪里访问就自动继承当前访问域名。Nginx 代理、环境域名切换不需要修改 M3U8 报文 body 内容proxy_pass 直接转发就可以正常工作这是代理场景优先推荐方案。 ❌缺点对 URL 路径层级非常敏感。如果代理增加一层 URL 路径前缀相对路径拼接会出错导致分片 404。重点相对路径的基准是浏览器访问这份 M3U8 的 HTTP URL不是服务器磁盘文件位置。四、高频路径踩坑场景坑 1源站 M3U8 写死绝对域名Nginx 代理转发分片 404proxy_pass 只能转发 HTTP 请求不会修改 M3U8 响应 body 内部的文本。M3U8 里面写死源站域名代理之后浏览器读取 M3U8 里面的旧域名直接请求源站域名如果浏览器访问不到源站域名分片 404。坑 2使用相对路径代理增加 URL 路径前缀路径层级错乱源 M3U8 访问地址/live/index.m3u8TS 写1.ts。代理之后访问地址变成/proxy/live/index.m3u8浏览器会拼接成/proxy/live/1.ts。如果后端路径层级对不上分片 404。坑 3Master 多码率主索引子流路径写错切换清晰度 404Master 主索引里面子 M3U8 地址相对路径基准是 Master 主索引的访问 URL很多新手误以为是子文件所在磁盘目录导致子流拼接错误切换清晰度 404。坑 4把磁盘本地文件路径和 HTTP 访问 URL 路径混淆很多运维把服务器磁盘目录和浏览器 HTTP 访问路径混为一谈导致相对路径配置怎么调都不对。五、业务开发运维建议如果业务要经过 Nginx 代理、网关转发 M3U8优先源站输出相对路径尽量不要写死绝对 URL避免需要 sub_filter 替换报文。如果业务必须使用绝对路径代理场景要开启 sub_filter 做字符串替换同时直播动态 M3U8 关闭代理缓存防止替换后的旧报文被缓存。Master 多码率主索引子流相对路径以 Master 主索引 HTTP 访问 URL 作为基准做拼接写路径的时候一定要考虑这一点。排错直接看 M3U8 原始文本观察分片地址写法结合浏览器 F12 看分片最终拼接出来的完整请求 URL。六、总结M3U8 里面的相对路径、绝对路径是代理、环境迁移的时候高频踩坑点。相对路径基准是浏览器访问 M3U8 的 HTTP URL不是服务器磁盘路径。经过 Nginx 代理的业务优先源站输出相对路径可以避免修改 M3U8 响应报文的麻烦。遇到分片 404借助网页调试工具查看 M3U8 原始文本再看浏览器实际请求出来的分片完整 URL快速定位路径拼接问题。