iOS下使用HTML video标签如何为所有后续m3u8请求携带token查询参数
iOS 原生 video 标签播放带授权 HLS 视频的最优解决方案
首先明确前提:iOS 系统的原生 HLS 播放器完全不支持自定义请求头,所以所有依赖传递 Authorization 头的方案在原生 video 标签上都无法实现,优先从以下几个兼容性最好的方案里选适配自己业务的即可:
- 方案1:Cookie 绑定授权凭证(最推荐,改造成本最低)
把授权 token 存入 HLS 资源所属域名的 Cookie 中,iOS 原生播放器发送所有 HLS 相关请求(主 m3u8、子 m3u8、ts 分片)时会自动携带同域名 Cookie,后端只需要把校验逻辑从读请求头改成读 Cookie 里的 token 即可。如果涉及跨域,只需要配套配置 CORS 规则允许携带凭证即可,不需要修改任何 HLS 资源的路径规则。 - 方案2:路径嵌入 token + 反向代理重写
将 token 直接放到 HLS 资源的路径前缀中,比如主 m3u8 地址修改为http://example.com/token/<my_token>/path/mymovie.m3u8,后端通过 Nginx 等反向代理提取路径中的 token 完成校验,同时在返回主 m3u8 内容时,动态给内部引用的所有子 m3u8、ts 分片路径都拼接上相同的 token 前缀,所有后续请求自然会携带 token。 - 方案3:服务端动态生成带签名的子资源路径
后端生成主 m3u8 内容时,直接给内部引用的所有子 m3u8、ts 分片地址都拼接上和主地址规则一致的签名/查询参数(包含 token、过期时间等校验信息),哪怕只有主 m3u8 初始请求带了 token,返回的子资源本身就已经带了合法的校验参数,iOS 播放器请求子资源时会自动带上对应参数。
内容的提问来源于stack exchange,提问作者jimmy
相关产品推荐
相关产品推荐

