jPlayer Stream MP3 但防止下载和盗链

Posted

技术标签:

【中文标题】jPlayer Stream MP3 但防止下载和盗链【英文标题】:jPlayer Stream MP3 but prevent from downloading and hotlinking 【发布时间】:2012-12-08 20:27:30 【问题描述】:

我正在建立一个类似于 thefuture.fm 的网站。 DJ 可以上传 MP3 文件并设置文件是否只能流式传输或流式传输和下载。

网站的访问者无需登录即可收听音乐。他们应该能够根据用户设置流式传输/下载这些 MP3 歌曲。

我正在使用 jPlayer 播放歌曲。我在网上搜索过,但找不到任何解决方案。 jPlayer 是否有阻止下载 MP3 文件之类的功能?或者有什么办法可以防止这种情况发生?

【问题讨论】:

您想流式传输歌曲,但不希望用户下载数据? 是的@Daniel,你有什么想法吗? jPlayer 无法做到这一点。 jPlayer 需要以与用户下载文件完全相同的方式访问文件。您也无法使用任何其他 html/javascript 播放器来做到这一点。您可以使用 Flash 播放器完成此操作,但请注意,阻止下载仍然相当困难 - 您可以使其更难下载。 @MosheKatz 感谢您提供信息...您能告诉我如何使用 Flash 播放器防止它发生吗? 我在答案中添加了一条关于从缓冲区播放 Flash 数据的注释。这将需要您编写自己的 Flash 音乐播放器,但我认为可用的例程会使这变得非常容易。最难的部分是加密,但也必然有免费的库。 Afaik Flex 开发环境是免费的,Adobe 网站上有很多示例。 【参考方案1】:

您所搜索的内容无法通过 JavaScript 解决方案实现。如果你想让 JavaScript 播放一些东西,它必须下载它,为了下载它,JavaScript 需要一个 URL。

解决此问题的最常见方法是使用 Adob​​e Flash 并在其中制作播放器。您可以在不显式向用户公开实际数据位置的情况下制作播放器流式传输内容(在您的情况下为 mp3)。

【讨论】:

【参考方案2】:

防止盗链更容易一些,因为通常您需要检查引荐来源网址字符串。如果存在,那么您将知道不提供内容。 Here 是一个代码示例。

另一方面,阻止下载要困难得多 - 最好的方法是让 Flash 应用程序实时解密数据 - 如果您使用简单的加密方案,大多数客户端硬件应该足够快。我在网上找不到太多这方面的内容,所以我想知道您是否必须自己进行一些 Flash/Flex 开发:分块下载 MP3 数据,从库中应用解密例程,然后将它们发送到某种 MP3解码缓冲区。我怀疑密码会被硬编码。

附录:我发现在更高版本的 Flash 中,您可以播放来自缓冲区 (see here) 的动态生成的声音。因此,如果您愿意陷入一些 Flash/Flex 开发,那么解决方案就在眼前。我找不到任何访问低级 MP3 例程的东西,但不要忘记文件不必是从服务器传输的 MP3 - 将它们转换为您的应用程序需要的任何内容。

【讨论】:

【参考方案3】:

将文件放在浏览器无法访问的位置,并使用 php 通过HTTP/1.1 206 Partial Content 将它们作为一系列块流式传输。然后使用this 之类的方法编辑上下文菜单以添加/删除“另存为”。

使用会话变量来消除直接链接。

【讨论】:

【参考方案4】:

实际上不可能阻止下载。你可以让某人更难,但他仍然需要下载所有数据才能听到这首歌。因此,即使您使用某种加密将数据发送到您自己编写的 Flash 播放器,播放器也必须对其进行解密并播放音频。而且由于您可以反编译闪存,因此找出算法并不难。他还可以在播放音乐时重新录制音乐(类似于第一个 DVD 解密工具,只需每秒 30 次截屏即可通过百万美元的安全测量)

所以目标是让它变得更难,而不是不可能。

就我个人而言,我会结合 cookie 使用临时可用链接,这样我仍然可以使用 jplayer 而不必重新发明***。还可以使用一些混淆来使 URL 更难阅读。

当有人请求主 URL(您显示播放器的位置)时,会生成一个唯一密钥并将其保存在 cookie 中。唯一密钥应链接到会话中存储的 IP 地址和请求时间。

现在创建一个指向音乐文件的链接,例如 playfile.php?file=music.mp3 或其他。只需确保 PHP 将处理文件请求。如果您混淆了此链接,将很难找到它。

在 playfile.php 中检查 cookie 中的唯一代码,并检查它是否与会话中的 IP 地址匹配,并且请求时间小于 EG 15 秒(再长,并且在互联网连接缓慢的情况下无论如何都不会播放音乐) .如果是,则流式传输文件。如果不是,请阻止它。

现在,如果有人要编写程序/脚本来下载音乐,他可以。但是,如果有人有足够的知识和时间来做这件事,那么没有什么能阻止他下载它。

这将阻止任何普通用户下载它。

【讨论】:

【参考方案5】:

实际上,有一个播放器可以打乱网址,而且效果很好。我们使用它是因为这个出色的功能。下载/保存音频并非不可能,但至少不是仅仅打开检查器并复制 url 的问题。它还可以防止通过 URL 与外部资源共享。因此,与上述相反,它是可能的并且是可用的:)

在此处查看插件: https://wordpress.org/plugins/mp3-jplayer/

【讨论】:

以上是关于jPlayer Stream MP3 但防止下载和盗链的主要内容,如果未能解决你的问题,请参考以下文章

视频及MP3 播放浅析 Jplayer参数详细

JPlayer 音频问题

jPlayer不是函数错误 - Stream Player

关于播放器JPlayer的使用及遇到的问题

内容类型 HTTP application/octet-stream 在 MVC3 中使用 JPlayer 的 FireFox 不支持

防止mp3的渐进式下载?