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

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

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

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

4106 次点击
所在节点    程序员
29 条回复
009694
2022-03-02 17:53:46 +08:00
不让下载 那还可以录屏
jiobanma
2022-03-02 17:55:50 +08:00
@009694 当然不可能堵住所有的口子,只能说是防君子不防小人,能加点门槛就加点
yannxia
2022-03-02 17:56:00 +08:00
本地解码的时候解密嘛,有点像优酷之类的,下载下来的视频都是需要解密的,但是录屏就防不住,还有模拟输出设备的录屏就更没戏了,
jiobanma
2022-03-02 17:57:39 +08:00
@yannxia 因为只是一个简单的播放,就是前端一个播放器直接拿到源文件的地址去播放,所以增加视频编解码的话成本太高了
tieqishan07li
2022-03-02 17:57:55 +08:00
设置防盗链、使用 STS Token 拿资源
vone
2022-03-02 17:59:36 +08:00
wu67
2022-03-02 18:00:58 +08:00
换成 m3u 咯, 让播放器自己加载. 然后再整点 token, 定期刷新.
gadfly3173
2022-03-02 18:01:32 +08:00
私有 bucket + sts token 或自行实现前置访问认证,sts 应该是成本最低的方案了,不过用户稍稍看下请求也是能当场下下来的
jiobanma
2022-03-02 18:01:49 +08:00
@wu67 m38u 的话 得加一道流媒体服务了吧
Qusic
2022-03-02 18:02:02 +08:00
m3u8 做 streaming ?这样视频分片存储,一方面拖进度条的用户体验会很大提升,另一方面大部分用户都不知道怎么转码合并视频吧,我猜。另外把分片的视频流放前端 blob 里那难度就更大了
jiobanma
2022-03-02 18:03:33 +08:00
@Qusic 提供给我们的视频就是一个 mp4 格式的,如果切片的话,还要有个流媒体服务去切片放到 oss 里 那成本有点高了
jiobanma
2022-03-02 18:03:52 +08:00
@vone 这得二开播放器了吧
cssk
2022-03-02 18:05:29 +08:00
token ,header
gam2046
2022-03-02 18:10:03 +08:00
不嫌麻烦就是 hls + aes ,前端自行获取密钥,通过 ffmpeg wasm 播放。

再简化一点的方案,blob url 就足够挡住多数 F12 的初级用户了。
windyskr
2022-03-02 18:10:36 +08:00
wu67
2022-03-02 18:11:21 +08:00
@jiobanma 各种云应该有相应的服务吧. 考虑一下用现成的咯, 干嘛自己肝.
misdake
2022-03-02 18:17:04 +08:00
可能对楼主的问题没啥帮助,只是沿着 m3u8 的路提一句今天的小发现
今天下 wordpress 一个视频的时候,发现是静态 m3u8+静态单视频文件。视频文件可能是根据关键帧切分的,在拼接的时候直接二进制拼接,两端和切片之间都夹杂脏数据,m3u8 用#EXT-X-BYTERANGE 指向视频的一段段数据。这样直接下载文件是放不出来的。
但是,m3u8 没有任何保护,直接用 m3u8 下载就行了。。。
liuidetmks
2022-03-02 18:21:21 +08:00
添加 DRM ?
LnTrx
2022-03-02 18:54:03 +08:00
楼主先明确一下,blob url 这种程度够不够?
shellc
2022-03-02 18:56:08 +08:00
楼上有提到使用阿里云的视频加密方案,这个方案需要使用阿里云的播放器,同时如果能接受视频云的计费方式是可以的。

如果你的需求只是为了解决 Web 播放视频,并阻止通过查看网页源代码获取 URL 下载,并且不考虑爬虫的话。有一个方案你可以考虑。这个方案的核心就是 OSS 的 URL 是一次性的。可以把 bucket 或文件设置为 private 可见,在网页中输出的视频地址通过 OSS 的签名来访问,签名设置有效期为 10 秒,只要视频播放器在 10 秒内开始访问 OSS ,视频就可以顺利播放。超过 10 秒后,这个 URL 过期。10 秒是个经验值,就是浏览器从提交请求,到播放器开始访问 OSS 的超时时间。

绕过的方法就是写脚本自动化爬取,直接访问页面拿到地址开始下载。

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

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

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

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

© 2021 V2EX