M3U8常见错误及解决方案
遇到M3U8播放问题?这里有详细的故障排除指南
快速诊断提示:大多数M3U8播放问题都与CORS策略、网络连接或文件格式有关。 请先检查浏览器控制台的错误信息,这能帮助您快速定位问题。
CORS(跨域)错误
错误信息
Access to XMLHttpRequest at 'https://example.com/video.m3u8'
from origin 'https://yoursite.com' has been blocked by CORS policy:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
🔧 解决方案
1. 服务器端配置CORS头
在服务器响应中添加 Access-Control-Allow-Origin: *
2. 使用代理服务器
通过后端代理请求M3U8文件,避免浏览器CORS限制
3. 使用同源资源
将M3U8文件和网页部署在同一域名下
404 文件未找到
错误信息
GET https://example.com/segment-1.ts 404 (Not Found)
Failed to fetch segment #1 of "https://example.com/playlist.m3u8"
🔧 解决方案
1. 检查URL路径
确认M3U8文件中的TS片段路径是否正确(相对路径/绝对路径)
2. 验证文件存在
直接访问TS文件URL,确认文件确实存在于服务器上
3. 检查基础URL
如果使用相对路径,确保基础URL设置正确
解码/播放错误
错误信息
MEDIA_ERR_DECODE: The media resource indicated by the src attribute
or assigned media provider object was not suitable.
DOMException: Failed to decode media resource
🔧 解决方案
1. 检查编码格式
确保视频编码为H.264,音频编码为AAC(浏览器标准支持)
2. 验证M3U8格式
确认M3U8文件格式正确,包含必要的标签(#EXTM3U, #EXTINF等)
3. 使用兼容播放器
尝试使用HLS.js等专业播放器库,提供更好的兼容性
网络超时/连接错误
错误信息
NetworkError: Failed to fetch
ERR_CONNECTION_TIMED_OUT
Manifest request timed out
🔧 解决方案
1. 增加超时时间
调整播放器的超时设置,给慢速网络更多时间
2. 使用CDN加速
将视频文件部署到CDN,提高全球访问速度
3. 实现重试机制
添加自动重试逻辑,处理临时网络问题
加密内容错误
错误信息
KEY_LOAD_ERROR: Failed to load decryption key
KEY_SESSION_ERROR: Failed to generate license request
DECRYPT_ERROR: Failed to decrypt segment
🔧 解决方案
1. 验证密钥URL
确保#EXT-X-KEY标签中的URI可访问,且返回正确的密钥
2. 检查密钥格式
AES-128密钥应为16字节,确保密钥格式正确
3. 配置CORS策略
密钥服务器需要正确配置CORS,允许跨域请求
🛠️ 调试工具推荐
浏览器开发者工具
F12打开控制台,查看Network标签监控请求,Console查看错误信息
HLS.js Demo
使用官方demo页面测试M3U8链接,快速验证文件是否有效
FFmpeg/FFprobe
命令行工具检查视频编码、格式是否符合标准
在线M3U8验证器
使用在线工具验证M3U8文件格式是否符合HLS规范
💻 常用调试命令
检查视频编码信息
ffprobe -v quiet -print_format json -show_streams video.m3u8
测试M3U8链接可访问性
curl -I https://example.com/video.m3u8
下载并合并M3U8
ffmpeg -i "https://example.com/video.m3u8" -c copy output.mp4