我正在建立一个类似于 thefuture.fm 的网站。DJ 可以上传 MP3 文件并设置文件是否只能流式传输或流式传输和下载。
该网站的访问者无需登录即可收听音乐。他们应该能够根据用户设置流式传输/下载这些 MP3 歌曲。
我正在使用 jPlayer 播放歌曲。我已经搜索了整个网络,但找不到任何解决方案。jPlayer 是否有阻止下载 MP3 文件之类的功能?或者有什么办法可以防止这种情况发生?
阻止下载实际上是不可能的。你可以让某人更难,但他仍然需要下载所有数据才能听到这首歌。因此,即使您使用某种加密将数据发送到您自己编写的 Flash 播放器,播放器也必须对其进行解密并播放音频。而且由于您可以反编译闪存,因此找出算法并不难。他也可以在播放音乐时重新录制音乐(类似于第一个 DVD 解密工具,只需 30 次/秒的屏幕截图即可通过百万美元的安全测量)
所以目标是让它变得更难,而不是不可能。
就个人而言,我会结合 cookie 寻找临时可用链接,因此我仍然可以使用 jplayer 而不必重新发明轮子。还可以使用一些混淆来使 URL 更难阅读。
当有人请求主 URL(您显示播放器的位置)时,会生成一个唯一密钥并将其保存在 cookie 中。唯一密钥应链接到会话中存储的 IP 地址和请求时间。
现在创建一个指向音乐文件的链接,如 playfile.php?file=music.mp3 或其他。只需确保 PHP 将处理文件请求。如果你混淆了这个链接,找到它会有点困难。
在 playfile.php 中检查 cookie 中的唯一代码,并检查它是否与会话中的 IP 地址匹配,并且请求时间小于 EG 15 秒(再长一点,并且在互联网连接缓慢的情况下无论如何都不会播放音乐)。如果是,则流式传输文件。如果不是,请阻止它。
现在,如果有人会编写程序/脚本来下载音乐,他可以。但如果有人有知识和时间这样做,没有什么能阻止他下载它。
这将阻止任何普通用户下载它。
防止盗链更容易一些,因为通常您需要检查一个引荐来源网址字符串。如果存在,那么您将知道不提供内容。这是一个代码示例。
另一方面,阻止下载要困难得多——最好的方法是让 Flash 应用程序实时解密数据——如果您使用简单的加密方案,大多数客户端硬件应该足够快。我在网上找不到太多这方面的内容,所以我想知道您是否必须自己进行一些 Flash/Flex 开发:分块下载 MP3 数据,从库中应用解密例程,然后将它们发送到某种 MP3解码缓冲区。我怀疑密码会被硬编码。
附录:我发现在更高版本的 Flash 中,您可以从缓冲区播放动态生成的声音(请参见此处)。因此,如果您愿意陷入某种 Flash/Flex 开发,那么解决方案就在眼前。我找不到任何访问低级 MP3 例程的东西,但不要忘记文件不必是从服务器传输的 MP3 - 将它们转换为您的应用程序需要的任何内容。
您正在搜索的内容无法通过 JavaScript 解决方案实现。如果你想让 javascript 播放一些东西,它必须下载它,为了下载它,JavaScript 需要一个 URL。
解决此问题的最常见方法是使用 Adobe Flash 并在其中制作播放器。您可以使播放器流式传输内容(在您的情况下为 mp3),而无需向用户显式公开实际数据位置。
将文件放在浏览器无法访问的位置,并使用 PHP 将它们作为一系列块使用HTTP/1.1 206 Partial Content
. 然后使用这样的方法来编辑上下文菜单以添加/删除“另存为”。
使用会话变量来消除直接链接。
实际上,有一个播放器会打乱网址,而且效果很好。我们使用它是因为这个出色的功能。下载/保存音频并非不可能,但至少不是仅仅打开检查器并复制 url 的问题。它还可以防止通过 URL 共享给外部资源。因此,与上述相反,它是可能的并且是可用的:)