使用m3u8代理服务器解决 m3u8跨域播放的技术讨论

问题

拿到 m3u8播放地址,有很多 m3u8资源不允许跨域播放。 如下资源:

https://foxtv.blutv.com/blutv_foxtv_live/live.m3u8

使用 google前 5 个 m3u8在线播放器试试。

https://m3u8-player.com/
https://m3u8player.org/
http://tool.liumingye.cn/m3u8/
http://tool.pfan.cn/m3u8
https://m3u8play.com/

在浏览器开发者工具看到CORS错误如下:

Access to XMLHttpRequest at 'https://foxtv.blutv.com/blutv_foxtv_live/live.m3u8' from origin 'xxx' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

这些在线播放器很优秀,UI 上做的漂亮,但他们都是君子播放器。
这资源就是想看,网上那么多现成的 m3u8资源,去哪儿找他们的官方播放地址?

目标

公开可播放的m3u8资源我要看,没开放 CORS 跨站m3u8资源我也要看。

实现办法:

  1. 自已实现修改浏览器,不守 CORS 规则。显然:难度高上天,不可能。
  2. 先下载,再播放。 不算友好:需要清除下载的 ts文件。
  3. 实现一个代理,通过代理转发,避免CORS问题。

后两个办法可取, 我选择第三种方式,起一个后台代理

技术实现m3u8代理

  • 生成代理m3u8地址:原 m3u8地址发给代理服务器,生成代理 m3u8地址。
  • url转换:master playlist和 media playlist中的相对 url路径和绝对 url路径在代理中修改成代理m3u8地址
  • ts 内容经代理直接输出。

实现软件

飞鸟 m3u8下载器 v2.0.2新增功能:跨域播放

UI 丑了点:会慢慢改进。
没有在线播放方便: 服务器播放容易封 IP,效果不佳。 再一个小弟的服务器不承压。

玩的开心,别因 UI 丑而生气,不值得,想开点。

下载地址

GitHub - youwen21/flybird-m3u8downloader: https://github.com/youwen21/flybird-downloader

14 个赞

太强啦!

4 个赞

大佬牛

1 个赞

tieba95

1 个赞

大牛,佬

1 个赞

太强了!

1 个赞

太强啦

1 个赞

学到了!

1 个赞

强,如果想跨域播放m3u8 其实谷歌浏览器可以下载Moesif Origin/CORS Changer API Logger插件

1 个赞

太强了

1 个赞

谢谢各位的厚爱啦~~ 小小的改动啦。
等这版需求弄完,考虑把代理服务部署成在线m3u8播放器,方便观看。

1 个赞

From #dev to 开发调优