Nginx+HLS 如何防盜鏈
业务逻辑: user—>服务接口( A 服务器)-->查询 直播 播放链接 http://x.m3u8 ( B 服务器) --》 301 跳转 user—>直连:http://x.m3u8
ffmpeg 拉取第三方直播 到本地 xxx.m3u8 (默认同时只存 5 个 ts 文件),再使用 nginx 代理本地文件提供对外播放地址
/usr/bin/ffmpeg http://xxxx -vcodec copy -scodec copy -acodec copy -hls_flags delete_segments -hls_delete_threshold 1 -hls_time 5 xx.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:3
#EXTINF:5.000000,
xx3.ts
#EXTINF:5.000000,
xx4.ts
#EXTINF:5.000000,
xx5.ts
#EXTINF:5.000000,
xx6.ts
#EXTINF:5.000000,
xx7.ts
由于是直播链接,每 1min 都会重新写入 m3u8 文件,意味着每 1min 浏览器/播放器都要重新请求.m3u8
问题:想实现播放鉴权(时间验证),目前在 301 跳转时播放链接上加参数 http://x.m3u8?token=jwtToken
但后续 浏览器/播放器都要重新请求 时 m3u8 用的时统一个 url 意味着?token=jwtToken 参数不会变化,如果 jwtToken 过期就一直过期 即
0:xxxx -->http 301-->http://x.m3u8?token=jwtToken1 首次
1: http://x.m3u8?token=jwtToken1 //正常鉴权播放
2: http://x.m3u8?token=jwtToken1 //鉴权过期 err
3: http://x.m3u8?token=jwtToken1 //播放器重试 jwtToken 不会变 err (问题在此处)
大佬们有没有什么好的解决办法/或思路?
限制:
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.