实现类似于Spotify

时间:2016-01-26 12:30:12

标签: networking server audio-streaming tcp-ip

高级别描述

假设我有一个客户端程序(在我的特定情况下是一个iOS应用程序),它应该与远程主机上运行的服务器程序通信。该系统应如下工作:

  • 服务器具有一组索引音频文件,并使用索引作为标识符
  • 将它们公开给客户端
  • 客户端可以向服务器查询具有给定标识符的项目,服务器应该流式传输其内容,以便客户端可以实时播放
  • 服务器流式传输的数据只能由客户端本身使用,即嗅探流量的人不应该能够解释内容,用户也无法访问数据。

从我的角度来看,这是Spotify所做的简单实现。

技术问题

  • 如何在服务器和客户端之间传输音频数据?应该使用哪些协议?我知道在TLS之上使用某些东西可以保护信息免受嗅探流量的人的影响,但是如果他有权访问加密密钥,它就无法保护用户自己。

1 个答案:

答案 0 :(得分:1)

  

服务器流式传输的数据只能由客户端本身使用,即嗅探流量的人不应该解释内容......

HTTPS是最佳方式。

  

...并且用户不应该能够访问数据。

那是不可能的。即使你有某种神奇的东西来阻止解密数据的捕获(这是不可能的),有人总是可以记录音频输出,甚至是数字输出。

  

从我的角度来看,这是Spotify所做的简单实现。

Spotify不会这样做。没有人,也没有人能做到。这是不可能的。如果客户端必须解码数据,那么您就无法阻止某人修改数据的解码方式。

你能做什么

  • 使用HTTPS
  • 对您的网址进行签名,以便原始媒体只能在短时间内访问。每个人都有效地获得了自己的媒体URL。 (查看AWS S3如何处理此问题,以获得一个很好的示例。)
  • 如果您真的担心,可以watermark your files on-the-fly对其中的ID进行编码,以便有人泄露媒体时,您可以根据他们的帐户数据对其进行跟踪。这很昂贵,所以请确保你真的有这样做的商业案例。