【问题标题】:How to play an mp3 on a webpage but disallow that sound to be downloaded?如何在网页上播放 mp3 但不允许下载该声音?
【发布时间】:2017-05-12 16:25:32
【问题描述】:

我有一个音乐行业的客户,他推出了一张新专辑。在加载专辑唱片公司的给定页面后,我有点惊讶地发现从他们的网站下载声音非常容易,声音在以下 HTML5 源代码中运行:

<div class="sqs-audio-embed" data-url="https://...fileserverURL...SD+Master+V2.mp3" data-mime-type="" data-title="title" data-author="author" data-show-download="false" data-design-style="legacy" data-duration-in-ms="761000" data-color-theme="light" id="yui_3_17_2_1_144058079_1116">
    <div id="yui_3_17_2_1_149458079_1120" class="yui3-widget sqs-widget sqs-audio-player play-state-stopped ready-state-initialized">
     <div id="yui_3_17_2_1_149058079_1122" class="sqs-audio-player-content">
                </div>
            </div>
</div>

这是一个基于另一个域的嵌入式 URL。

所以我的问题是......

如何在网站上播放声音但拒绝直接下载或直接链接?

我的想法:

1) 我想,在 fileserverURL 上使用自定义 Content Security Policy 之类的东西可以解决问题,拒绝直接访问,除非访问来源,除非它是唱片公司网站的域名(例如)。

2) .htaccess 请求(例如阻止图像直接访问的请求)是否也可以工作,但如果通过某个域或网页播放/调用会出现某种异常? p>


总结:

  • Mp3 文件。
  • 文件位于与网站不同的 URL 域中
  • 文件可以在网站上播放,但不允许直接链接
  • 除非没有其他办法,否则希望避免使用 Javascript

我查看了有关 Stack Overflow 的其他问题,但没有找到与上述情况的实际解决方法相关的任何 (any!)(允许播放不允许直接访问)。我发现的最接近的是 2010 年的 this question,这似乎意味着上述操作无法完成,但我确信如果两台服务器(filehost website) 设置为允许通过充当网守的网站服务器访问文件,如上面的第 1 点。)


是的,我也知道承诺的人可以从下载的浏览器缓存中复制声音(实际播放声音的地方),但我并没有对此感到着迷,只是,嗯,一点点......

【问题讨论】:

    标签: html audio download mp3


    【解决方案1】:

    CSP 不是为此而设计的,而是针对相反的问题:网站上的运营商希望阻止从不同服务器加载内容(您是不同服务器的运营商,并且您希望阻止大多数网站加载您的内容)。

    正如您所概述的,您的第二个想法应该可以解决问题。深度链接预防不在乎它是 MP3 还是 JPEG。它必须在托管 mp3 的网站上。从浏览器中提取或伪造来源仍然是微不足道的。

    虽然我这么说很痛苦,但您可能应该寻找Encrypted Media Extensions,以获得更完整(如果更难实施)的解决方案。

    【讨论】:

    • 感谢您的信息。我一直在考虑使用 CSP 只允许某个响应者而不允许其他响应者,但我越想,CSP 可能不适用于直接链接访问。 EME 看起来像一个加密 API,而不是一个完整的工具,但到目前为止,这里的两个答案都注意到它,所以它绝对值得我研究更多。干杯。
    • 嗯,它处理加密和密钥分发。与所有 DRM 一样,其想法是您对数据进行加密,然后将密钥交给用户的播放器以读取它。该规范要求每个人都实施“Clearkey”,但这不适合生产使用。您可能需要widevine (www.widevine.com)、playready (microsoft.com/playready) 和/或fairplay (developer.apple.com/streaming/fps) 系统的组合
    【解决方案2】:

    我建议查看 EME(加密媒体扩展)。

    这里有一个教程https://www.html5rocks.com/en/tutorials/eme/basics/

    【讨论】:

    • 谢谢,粗略地看一下 EME 它(看起来像 javascript)看起来只是一半的过程,它是一个标准的 API,而不是一个完整的解决方案。您能否提供一个在 HTML5 页面上使用它的示例?
    • 教程里好像也有实现例子,还是用html5的影音播放。
    • 哈哈,是的,我才刚刚到达页面上的那个点.....(仍然最好在 SO 答案中放置一个示例,以防链接页面在未来)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 2011-01-07
    • 2012-09-01
    相关资源
    最近更新 更多