实现类似于 Spotify 的音频流服务
Implementing an audio stream service similar to Spotify
高级描述
假设我有一个客户端程序(在我的特定情况下是一个 iOS 应用程序)应该与远程主机上的服务器程序 运行 通信。系统应按如下方式工作:
- 服务器有一组索引音频文件并使用索引作为标识符将它们公开给客户端
- 客户端可以向服务器查询具有给定标识符的项目,服务器应流式传输其内容以便客户端可以实时播放
- 服务器流式传输的数据只能由客户端本身使用,即嗅探流量的人不应该能够解释内容,用户也不应该能够访问数据。
在我看来,这是 Spotify 功能的简单实现。
技术问题
- 音频数据应该如何在服务器和客户端之间传输?应该使用什么协议?我知道在 TLS 之上使用某些东西可以保护信息免受嗅探流量的人的侵害,但是如果用户有权访问加密密钥,它就无法保护信息免受用户本人的侵害。
The data streamed by the server should only be used by the client itself, i.e. someone sniffing the traffic should not be able to interpret the contents…
HTTPS 是最好的方式。
…and the user should not be able to access the data.
这不可能。即使您有某种魔法来防止捕获解密数据(这是不可能的),总有人可以记录音频输出,甚至是数字记录。
From my perspective, this is a simple implementation of what Spotify does.
Spotify 不这样做。没有人这样做,也没有人可以。不可能。如果客户端必须解码数据,那么您无法阻止某人修改数据的解码方式。
你能做什么
- 使用 HTTPS
- 在您的 URL 上签名,以便原始媒体只能在短时间内访问。每个人都有效地向媒体展示了自己的 URL。 (查看 AWS S3 如何处理这个,这是一个很好的例子。)
- 如果你真的很担心,你可以watermark your files on-the-fly,在其中编码一个 ID,这样如果有人泄露了媒体,你就可以根据他们的帐户数据来追踪他们。这很昂贵,因此请确保您确实有这样做的商业案例。
高级描述
假设我有一个客户端程序(在我的特定情况下是一个 iOS 应用程序)应该与远程主机上的服务器程序 运行 通信。系统应按如下方式工作:
- 服务器有一组索引音频文件并使用索引作为标识符将它们公开给客户端
- 客户端可以向服务器查询具有给定标识符的项目,服务器应流式传输其内容以便客户端可以实时播放
- 服务器流式传输的数据只能由客户端本身使用,即嗅探流量的人不应该能够解释内容,用户也不应该能够访问数据。
在我看来,这是 Spotify 功能的简单实现。
技术问题
- 音频数据应该如何在服务器和客户端之间传输?应该使用什么协议?我知道在 TLS 之上使用某些东西可以保护信息免受嗅探流量的人的侵害,但是如果用户有权访问加密密钥,它就无法保护信息免受用户本人的侵害。
The data streamed by the server should only be used by the client itself, i.e. someone sniffing the traffic should not be able to interpret the contents…
HTTPS 是最好的方式。
…and the user should not be able to access the data.
这不可能。即使您有某种魔法来防止捕获解密数据(这是不可能的),总有人可以记录音频输出,甚至是数字记录。
From my perspective, this is a simple implementation of what Spotify does.
Spotify 不这样做。没有人这样做,也没有人可以。不可能。如果客户端必须解码数据,那么您无法阻止某人修改数据的解码方式。
你能做什么
- 使用 HTTPS
- 在您的 URL 上签名,以便原始媒体只能在短时间内访问。每个人都有效地向媒体展示了自己的 URL。 (查看 AWS S3 如何处理这个,这是一个很好的例子。)
- 如果你真的很担心,你可以watermark your files on-the-fly,在其中编码一个 ID,这样如果有人泄露了媒体,你就可以根据他们的帐户数据来追踪他们。这很昂贵,因此请确保您确实有这样做的商业案例。