如何防止直接从源下载媒体文件?

How to prevent direct downloading media file from source?

我正在开发视频流服务作为我的个人项目。

视频文件存储在 AWS S3 存储桶中(我正在使用媒体转换),Web 应用程序基于 React next.js 构建,后端基于 Express。 Passport 用于验证登录和注销的用户。

我正在使用 Plyr 播放视频源。

用作 Plyr 源的视频文件直接 link 来自 S3。 (即 https://aws_s3_bucket_name/sources/5c0a74osfjw.mp4

问题是,登录我的服务的用户可以使用chrome开发者工具获取我的视频文件源,甚至可以下载。

我想阻止下载文件 link(但用户应该可以通过我的服务观看视频)或隐藏源文件位置。

对此有什么好的建议吗? 谢谢你。 :)

理想情况下,您希望将 HLS 流式处理与 Cloudfront 结合使用。 Here is the tutorial 关于如何在 AWS 上做到这一点。它不会使复制您的内容变得完全不可能,但会使它变得更加困难。

但是,在您的情况下,Plyr 可能是最弱的 link。根据我阅读规范的理解,它或多或少是 HTML5 视频播放器的包装器,播放这些文件时可能会出现问题。如果可以选择更换为其他播放器 - 查看上面的 link 并考虑使用 CloudFront 流。

一个选项是 return 签名 url 给用户,而不是直接 link 给实际的 S3 对象。这使您能够为 url 设置过期超时,这意味着如果用户复制 link,它将在您指定的时间后变得不可用。您可以使用 getSignedUr() function of the AWS JavaScript SDK (or using a similar function in one of the other AWS SDKs). Moreover, you can use signed urls together with CloudFront. For more information about signed urls in general and CloudFront usage in particular can be found in the CloudFront developer guide.

生成带符号的 url

使用 AWS MediaConvert 将您的 mp4 转换为 HLS 流 - .m3u8 播放列表加上 .ts 片段。在创建作业的过程中,您可以传入一个解密密钥,该密钥将被烧录到播放列表中。像Videojs这样的视频播放器可以播放加密的HLS流。

这将阻止任何人直接下载视频。即使他们下载了片段,也不会播放,因为它们将被加密。

并且您将不得不使用一些程序来确保视频只在您的网站上播放。

这就是 S3 Video Player 阻止下载的做法。