防止托管视频被轻松下载

问题描述

我正在运营一个小型视频网站(约 1000 个托管视频)。使用 PHP 运行它,也可以自由使用任何服务器端依赖项(例如 ffmpeg)。

最初我有一个 .htaccess 设置来防止盗链/直接下载:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://original.url/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.original.url/.*$ [NC]
RewriteRule .(mp4|mp3|avi)$ - [F]

不幸的是,由于性能/交付速度问题,我不得不将我的媒体移动到存储/CDN(由于成本原因选择了 Digital Ocean Spaces)。

然而,令人不快的惊喜是存储没有限制引用者 IP 访问的功能。他们有过期的 URL 来解决盗链问题,但直接下载的问题仍然困扰着我。以如此简单的方式向用户提供 URL 以下载视频是一个真正的漏洞恕我直言。他们至少必须跳过箍。

我自己是一名开发者,但整个视频主题对我来说是一个相对较新的领域。

搜索正确的解决方案(并检查其他网站,例如 Youtube 的工作方式)给了我唯一合理的选择:

从二进制数据流式传输视频(类似于 youtube 和许多其他数据)。但是,为了有效地执行此操作,我可能需要将每个视频转换为一组小块/片段(我的每个视频约为 100 mbs)。

提出我自己的技术解决方案是否有意义(例如,在使用 FFMPEG 编码后将视频分割成片段,例如,使用 MPEG-DASH)并使用基于 HTML5 的播放器,该播放器可以播放此类格式——盒子?

有什么好的教程吗?浏览 stackoverflow 上的多个帖子并没有得到任何准确的分步指南。

解决方法

一般来说,如果视频可以流式传输,则没有有效的方法来防止它被下载。

您可以设置各种障碍,例如网址过期或混淆,但最终视频必须到达要播放的设备,并且它们有许多工具和记录良好的方法来捕获流式视频。

出于这个原因,大多数希望避免内容被复制和重新分发的流媒体服务会对内容进行加密,并使用 DRM 系统仅与授权用户安全地共享解密密钥。

大多数 DRM 都允许在到期时设置策略,内容是否可以通过 HDMI 播放,特定设备的分辨率等。

某些视频甚至可以通过在播放时将相机对准屏幕来复制,尽管这种方法的质量通常不是很好。在这种情况下,追踪泄漏源通常会成为焦点,并且可能会使用取证水印 - 实质上是在视频中隐藏一个不可见的水印,可以帮助识别泄漏源。

关于开发自己的流媒体技术解决方案的问题 - 视频流是一个复杂且专业的领域,通常必须支持多种设备类型的许多标准,因此通常更容易利用现有的专业流媒体服务器 - 有相当多的使用开源解决方案的指南,您可以查看它们以了解这些领域 - 例如:https://developer.mozilla.org/en-US/docs/Web/Media/DASH_Adaptive_Streaming_for_HTML_5_Video

,

我猜您可以使用 Google Widevine 和 Apple Fairplay DRM 加密服务提供商服务,例如 Vdocipher。他们无法在浏览器上保存您的盗版视频,但在应用和其他流媒体界面上,它们可以工作。