存在 OSS 上的 mp4 文件如何加密(禁止下载) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
jiobanma
V2EX    程序员

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

  •  
  •   jiobanma
    banmajio 2022-03-02 17:49:49 +08:00 4766 次点击
    这是一个创建于 1325 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    遇到 blob 的我就束手无策了,F12 搜 m3u8 都搜不到
    vibbow
        28
    vibbow  
       2022-03-03 12:07:10 +08:00
    第一个想到的是开 DRM.
    skiy
        29
    skiy  
       2022-03-03 13:31:06 +08:00
    @wangfei324017 也还是要加载 m3u8 的。当然,直接扒源码拿不到而已。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2609 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 04:58 PVG 12:58 LAX 21:58 JFK 00:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86