【问题标题】:Playing MP3 songs without disclosing the path of the file在不透露文件路径的情况下播放 MP3 歌曲
【发布时间】:2011-07-01 06:53:03
【问题描述】:

我正在用 PHP 开发一个购物车,我将在其中销售 MP3 格式的歌曲。通过产品展示,我想让访问者/用户只听歌曲 1 次。因此,如果我使用 JW 播放器之类的播放器来播放歌曲。播放器在网页源代码中公开文件路径,可以直接下载文件。

我正在寻找它来播放歌曲,以便访问者不知道歌曲文件的路径。

我怎样才能避免这种情况?请指教。

谢谢

【问题讨论】:

    标签: php flash cart shopping


    【解决方案1】:

    您要求的是 DRM 系统。这种东西是不存在的。

    理由:

    • Alice 想向 Bob 发送一条消息(MP3 文件)
    • Alice 不希望 Eve 收到消息(MP3 文件)
    • 鲍勃和夏娃是同一个人

    这就是 DRM 试图解决的问题。您所能做的就是尝试向最终用户隐藏事实。祝你好运……

    (在上面的示例中,您可以将“Alice”替换为“服务器”,将“Bob”替换为“站点访问者”,将“Eve”替换为“想要下载文件而不付费的用户”。)

    如果你接受你不能拥有 DRM 系统,还有更多的可能性:

    • 在用户付费之前,仅将文件的一部分发送给用户
    • 销毁样本文件/添加水印(例如,在播放 15 秒时,MP3 文件包含录制“这是歌曲的演示版本,实际购买的歌曲不会包含此消息”。

    请注意,您的示例文件必须与您销售的实际文件不同。这是解决用户在付费之前获取实际文件问题的唯一方法。

    【讨论】:

      【解决方案2】:

      你不能。

      虽然您可以隐藏 URL,但您无法阻止人们免费下载歌曲。这不是 HTTP 的工作方式。如果您提供一个 URL,无论是否隐藏,它最终都必须响应要播放的数据。否则,JWPlayer 将无法播放数据。

      由于 JWPlayer 被嵌入到网站中,它必须向一些提供数据的后端服务器发出请求。这些请求很容易被拦截,而且人们只需几天时间就能发现他们可以免费下载完整专辑。

      因此,如果您想确保自己不会破坏商店,请提供低质量的 mp3(这可能会带来糟糕的聆听体验,并且不会说服人们购买)或提供歌曲的预览(就像几乎所有其他人一样)确实)。

      【讨论】:

      • 您可以播放完整的歌曲,但偶尔需要配音说“这是一个预览”。
      • @Bart 是的,这是另一种可能的选择。尽管您无法保护歌曲在通过 HTTP 服务时不被复制,但这并没有改变。我会以与提供简短预览相同的方式看待它。
      • 好,我也是这么想的 :)
      【解决方案3】:

      根据在 URL 中传递的一些随机字符串创建一个提供 MP3 文件的页面。每个随机字符串都存储在数据库表中,参考实际文件位置。一旦歌曲被听过一次,翻转数据库中的状态字段以防止再次使用该随机字符串。

      您不必担心泄露文件的真实路径,因为即使用户查看源代码,他们也只会看到随机字符串。

      此外,您应该对下载执行相同类型的操作。要求用户登录,而不是文件的直接路径,而是通过一个 php 页面传递它,这样文件的链接就不会“在那里”供任何人获取/使用。

      【讨论】:

      • 那无济于事。即使 URL 只能一次获取,那一次也足以下载整首歌曲。一旦人们知道他们可以获得一次完整的文件,他们就会编写一个抓取工具来收集一次性 URL 并下载它们。
      【解决方案4】:

      所以基本上,您想要实现的是为买家提供他即将购买的歌曲的“样本”。 听完样本后,他就可以购买完整的歌曲了。

      在我看来,您可以在这里遵循 2 条路径:

      1. 将所有歌曲切成小样本,例如 1 分钟,然后让他们只听。 如果用户下载成功,就没有问题,因为他不会拥有完整的歌曲。您可以使用像FFMPEG 这样的 mp3 编码器/解码器在服务器端自动为您创建小样本。

      2. 由于 Flash 非常适合流式传输音频/视频,因此您可以使用按需流式传输机制,该机制还可以为用户提供歌曲的样本。这样,您只会将样本的字节发送给客户端,而不是完整的歌曲。这可以通过使用开源媒体服务器技术来实现,例如Red5

      虽然选项 2 可能是最可靠的解决方案,但它也是最耗时且最难实现的解决方案。

      许多在线音乐商店都在做同样的事情。它们只为您提供有限的预览。
      以下是我所知道的一些:

      干杯

      【讨论】:

      • 即使使用选项 2,您也无法播放整个文件,因为访问者仍然可以通过将数字版本捕获到声卡来进行完美复制(或者如果操作系统试图阻止复制,则可能复制 SP/DIF 输出数据进入声卡)。
      • 选项 2 仍然允许用户免费捕获整首歌曲,如果您将整首歌曲流式传输给他们。使用 Adob​​e Audition 之类的录制工具进行简单的环回录制可让您捕获当前在您的机器上播放的音频,但仍需要为音频添加水印以阻止这种情况。
      • 好吧,我们可以使用 Flash 吗?就像将歌曲嵌入到 Flash 文件中然后播放该 Flash 一样?
      • 确实,为了完整起见,编辑了回复。选项 2 还需要您仅发送样品。
      • Zack,不,我不建议这样做,因为您的 swf 会变得臃肿,而且客户端实际上可以反编译您的 swf 并从那里获取歌曲:P 您需要加载动态播放歌曲以使其正常工作
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多