存在 OSS 上的 mp4 文件如何加密(禁止下载)

2022-03-02 17:49:49 +08:00
 jiobanma

需求是存在 OSS 上的一些 mp4 文件,只能通过 web 系统内的播放器播放,但是不能通过 F12 这种方式扒到的播放器标签存的 src 里面的原文件地址单独拿出去下载.也就是说即使拿到源文件地址也不能正常预览.

有大佬知道好的实现思路吗?

3824 次点击
所在节点    程序员
29 条回复
cxy2244186975
2022-03-02 19:03:18 +08:00
这几是一个好问题
lsp 程序员马上捶死你
HUNYXV
2022-03-02 19:03:27 +08:00
Buges
2022-03-02 19:41:46 +08:00
随便加点鉴权(非加密),自然就不能拿到文件地址直接下载。
ragnaroks
2022-03-02 19:58:24 +08:00
blob ,分片,加密流

fetch 先拿到原始加密字节数组后解密,解密的 key 可以直接写死,再喂给 blob 播放
icy37785
2022-03-02 20:33:15 +08:00
只要能够在线播放,那么久没有任何办法可以禁止下载,只能通过加密视频流的方式让他们下载回去没办法直接播放。你又不愿意对视频加密,那就没办法实现了。
yuzo555
2022-03-02 20:42:14 +08:00
@shellc
网页浏览器加载视频播放(以及多线程下载工具的下载)都不是单线程一次请求下载完的,都是边播边下载,很多 Range: bytes=x-x 的请求,播放暂停之后,缓冲一两分钟加载也就暂停了,恢复播放就会重新连接下载,这个时间不能是十秒,只能比用户完整播放的时间要长...;

上面说的 STS 也是不行的,属于是没看清楼主的需求,STS 只是相当于加了一个链接失效时间,用户抓到之后只要链接没失效还是可以下载的,而且嗅探工具(例如 IDM )还是可以直接下载;

Blob 方案只是隐藏了在 F12 - 元素和源代码里面的地址,并没有解决 F12 - 网络里面抓包的方案,而且用户如果安装了嗅探工具或者插件的话还是可以下载到;

ffmpeg wasm 方案的话,我只能说够折腾的,用户浏览器有那加载 ffmpeg 的时间,视频早下载完了。。。而且还是没有解决隐藏地址的问题;

稍微可行的方案是自编 MSE ,但这样太复杂了,也可以直接用现成的 flv.js 、HLS.js 或者 Dash.js ,但注意不能直接给个 M3U8 给他就播放,需要做点混淆。

现成的方案可以考虑 #15 提到的,也就是我们多吉云的防嗅探下载功能,是完全免费的,视频上传后复制代码贴到网页上即可使用,可以体验下: https://docs.dogecloud.com/vcloud/manual-anti-sniffer
流量的话每月免费 20GB ,超出部分最高 ¥ 0.11 / GB 。

如果视频比较重要舍得花钱的话,可以考虑我们的防盗水印功能: https://docs.dogecloud.com/vcloud/manual-unique-watermark
wangfei324017
2022-03-02 21:39:41 +08:00
其实 blob 完全够了- -

遇到 blob 的我就束手无策了,F12 搜 m3u8 都搜不到
vibbow
2022-03-03 12:07:10 +08:00
第一个想到的是开 DRM.
skiy
2022-03-03 13:31:06 +08:00
@wangfei324017 也还是要加载 m3u8 的。当然,直接扒源码拿不到而已。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/837508

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX