You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用无法播放Firebase Storage中由Google转码API生成的HLS视频

Flutter应用无法播放Firebase Storage中由Google转码API生成的HLS视频

看起来你的核心问题是ExoPlayer加载HLS子文件时返回404错误,虽然单独的TS文件能正常访问,但HLS播放列表(m3u8)里的路径配置不对,导致播放器无法正确获取到所有分片资源。我来帮你拆解问题并给出解决方案:

问题根源分析

从错误日志里的HttpDataSource$InvalidResponseCodeException: Response code: 404可以看出,播放器成功加载了主m3u8文件,但在请求里面引用的hls.m3u8?alt=media或者hls0000000000.ts?alt=media时找不到资源。原因主要有两个:

  1. 缺少权限验证参数:你手动给m3u8里的路径加了?alt=media,但没有带上Firebase Storage下载URL必需的&token=xxx参数。哪怕你设置了全开放的存储规则,Firebase Storage的私有资源下载仍需要token验证,子文件请求没有token会被判定为无权限,返回404。
  2. 相对路径解析异常:播放器会基于主m3u8的URL拼接子文件的请求地址,但Firebase Storage的路径结构特殊,直接使用相对路径可能导致请求URL和实际文件存储路径不匹配。

解决方案

方案1:手动修改m3u8路径为完整带权限的URL

把m3u8里的所有相对路径,替换成对应文件的完整Firebase下载URL(包含?alt=media&token=xxx):

  • 主m3u8(file_1708297675081_0f606403e29817ac9663.m3u8)里的hls.m3u8?alt=media,换成https://firebasestorage.googleapis.com/v0/b/MYPROJECT.appspot.com/o/[hls.m3u8的完整存储路径]?alt=media&token=TOKEN
  • 子m3u8(hls.m3u8)里的hls0000000000.ts?alt=media,换成对应TS文件的完整下载URL

这样播放器就能直接请求到正确的带权限资源,不会出现404。

方案2:转码时配置输出路径,自动生成正确的路径

如果你不想手动修改m3u8文件,可以在使用Google Transcoder API创建转码作业时调整输出设置:

  • 确保转码后的所有输出文件(主m3u8、子m3u8、TS分片)都上传到Firebase Storage的同一个目录下
  • 转码完成后,用Firebase Admin SDK批量获取所有文件的下载URL,再通过脚本批量替换m3u8里的相对路径为完整URL,避免手动操作的繁琐。

额外检查点

  • 确认所有TS分片和m3u8文件都已正确上传到Firebase Storage,且生成的下载URL能直接在浏览器打开对应文件(m3u8本身可能因浏览器CORS限制无法播放,但TS文件能打开就说明路径和权限没问题)
  • 可以先用修改好完整路径的m3u8文件测试播放,确认能正常播放后再排查其他潜在问题。

备注:内容来源于stack exchange,提问作者Adrián Varga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 07:04:30