这是一个创建于 293 天前的主题,其中的信息可能已经有所发展或是发生改变。
├── index.m3u8 # 主播放列表
├── key.key # 解密密钥
├── 001.ts # 视频片段
├── 002.ts
├── ....ts
现在云存储的每部影片是以上面文件结构存储的,想要实现文件分离。
目前是想到了以下 2 个方案,但感觉还不是最佳方案:
1.将 m3u8 文件内容和解密 key 写到数据库并删除服务器上的 m3u8 和 key 文件,只在云存储中保留 ts 文件,播放器请求 api 获取 m3u8 内容,api 读取 MySQL 数据库中的 m3u8 内容并拼接解密 key 的 api 地址,返回 m3u8 内容给客户端
2.将解密 key 写到数据库并删除服务器上的 key 文件,只在云存储中保留 m3u8 和 ts 文件,播放器请求 api 获取 m3u8 内容,api 读取云存储中的 m3u8 内容并拼接解密 key 的 api 地址,返回 m3u8 内容给客户端
数量多的情况下感觉都会有数据库性能瓶颈或者加载速度的问题,请问各位佬有没有更好的方案?
8 条回复 2025-03-21 10:40:51 +08:00  | | 1 gam2046 293 天前 分离的目的是什么?
看起来像是希望保护视频资源。这种需求请直接上 DRM 。
你说的这一套操作,人家在客户端只需要抓个包,全是无用功。
如果是指为了防脚本小子,第二种方法就够了,相对实施简单。如果视频内容是自己编码的,key 可以根据某些内容生成,这样也不需要保存数据库,比如根据标题/id 等信息,直接 hash 一下,作为 key 即可。 |
 | | 2 ysc3839 293 天前 @ gam2046 市面上的 DRM 方案有免费的吗?估计楼主在小公司,没能力承担 DRM 的费用,只能想些免费的旁门左道来提高盗版门槛。 |
 | | 3 jackOff 293 天前 可以试试偏硬件的物理密码终端,每个终端由公司签名公钥,这样子加密后的流量下发给持有密码终端的硬件就能通过对应硬件的私钥解密,当然这种东西其实就是卫星电视盒子的牢技术,但管用就行。软件解密总是很难避免被逆向的问题,硬件解密就看你这个解密器黑盒技术咋样了 |
 | | 4 NGGTI 293 天前 解密 key 动态生成吧。每次打开视频都是不一样的 key 。key 只能使用 1 次。只能提高破解的难度。 |
 | | 6 NGGTI 292 天前 @ B4a1n 没了解过咋实现的,去年研究钉钉视频下载就是这样。key 只有 1 次有效果。 |
 | | 7 fengci 292 天前 这种方案目前都是 盗版视频用的多,因为不需要 重新压制 ,直接在视频任何位置插入广告 |
 | | 8 YuushaTao 292 天前 不如在请求 m3u8 时加点验证 sign 防止盗流 |