• 请不要在回答技术问题时复制粘贴 AI 生成的内容
jiobanma
V2EX  ›  程序员

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

  •  
  •   jiobanma ·
    banmajio · Mar 2, 2022 · 5804 views
    This topic created in 1708 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    绕过的方法就是写脚本自动化爬取,直接访问页面拿到地址开始下载。
    cxy2244186975
    cxy2244186975
    Mar 2, 2022 via Android
    21
    这几是一个好问题
    lsp 程序员马上捶死你
    Buges
    Buges
    Mar 2, 2022 via Android
    23
    随便加点鉴权(非加密),自然就不能拿到文件地址直接下载。
    ragnaroks
    ragnaroks
    Mar 2, 2022
    24
    blob ,分片,加密流

    fetch 先拿到原始加密字节数组后解密,解密的 key 可以直接写死,再喂给 blob 播放
    icy37785
    icy37785
    Mar 2, 2022 via iPhone
    25
    只要能够在线播放,那么久没有任何办法可以禁止下载,只能通过加密视频流的方式让他们下载回去没办法直接播放。你又不愿意对视频加密,那就没办法实现了。
    yuzo555
    yuzo555
    Mar 2, 2022
    26
    @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
    wangfei324017
    Mar 2, 2022
    27
    其实 blob 完全够了- -

    遇到 blob 的我就束手无策了,F12 搜 m3u8 都搜不到
    vibbow
    vibbow
    Mar 3, 2022
    28
    第一个想到的是开 DRM.
    skiy
    skiy
    Mar 3, 2022
    29
    @wangfei324017 也还是要加载 m3u8 的。当然,直接扒源码拿不到而已。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1544 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 81ms · UTC 18:11 · PVG 02:11 · LAX 10:11 · JFK 13:11
    ♥ Do have faith in what you're doing.