HTTP服务器的本地磁盘上有一个长达一小时的.mp3
文件。大约10个Web客户端(使用最新版本的Chrome或Firefox,安装了最新版本的Flash)开始下载该文件。网页上的JavaScript或Flash ActionScript会导致.mp3
文件中的音频在Web客户端计算机的扬声器上播放。在文件下载完成之前开始播放音频,并且文件不会保存到Web客户端上的磁盘上(因此这是流式传输)。
无论何时开始下载,每个Web客户端用户必须几乎同时听到相同的音频。 (当然,他会错过音频的早期部分。)最大允许时间差是30毫秒,即如果用户A听到文件中的特定音频片段,那么用户B也应该听到它不超过30毫秒。没有必要具有低延迟,例如在客户端缓冲音频最长可达5秒(最好只需2秒),但扬声器上的实际播放应以同步方式进行。
假设客户端和服务器上的时钟在播放期间以相同的速度运行,但它们可以设置为非常不同的时间。 ServerDate JavaScript库(https://github.com/NodeGuy/ServerDate)或类似的东西可用于使客户端JavaScript代码高精度地了解服务器时间。
可以使用任何设置(例如低,恒定比特率)对.mp3
进行预编码。将它转换为Web客户端支持的另一种有损压缩格式也可以。
我的问题是:如何实施这样的系统?可以使用哪些现有技术(例如WebRTC,JW Player,其他网络播放器)?什么是相关的开源和自由软件技术? HTML5 + JavaScript能否提供比基于Flash的播放器更好的同步精度(或者这个问题)?是否已有可用的实施?
我发现了类似的问题:mp3 website player with synchronized playback (not streaming)我的要求比这更严格:网络客户端之间的时差不应超过30毫秒。它也不涉及时钟同步。