使用Java流式传输音频

时间:2011-05-10 18:35:30

标签: audio java-ee stream file-transfer

我正在构建一个应用程序,它通过麦克风收集语音作为wav文件。这些录音需要流式传输到服务器并保存(作为wav文件,我知道它们很大,但它们必须是wav)。我还需要将音频(这些可以是mp3)从服务器传输到Web应用程序以便为用户播放。我不知道如何实现它,但我想使用Java EE应用程序,因为我熟悉Java并且它比Flex更容易维护(我们在工作时遇到旧的Flex代码问题)。我担心的是:

  1. 如何缓冲传输,以便用户不间断地听到整个文件?传输整个文件然后播放它也很好,但知道如何做到这一点会很好。
  2. 如何验证到服务器的传输?我可以发送数据包并验证/重发每个数据包吗?
  3. 是否有现有的API(请!)或者我必须手写这个吗?

1 个答案:

答案 0 :(得分:1)

正如我对您的问题发表评论,目前尚不清楚您是否已经确定了拓扑中存在哪些组件。特别是,目前还不清楚您是否已经有一个服务器进程负责存储这些音频文件。因此,我将在答案中做出一些假设。随意评论,我会尽力调整。

  1. 确保播放音频文件(由最终用户)而没有网络引发的中断的唯一方法是让最终用户(或最终运行的应用程序) - 用户端,例如一些JavaScript代码)在完整下载后播放音频流。除非你这样做,否则你只能降低休息的风险;你不能消除它。即使是最复杂的缓冲算法也无法应对99.99%的网络中断以缓冲整个流。由于我不确定你是否有一个客户端应用程序参与其中,我不能建议如何强制客户端下载整个文件而不是“当它来”时播放它;在最简单的情况下,您可以使用Content-Disposition标题就足够了:http://en.wikipedia.org/wiki/MIME#Content-Disposition

  2. 这个问题的答案再次取决于您如何构建解决方案。但是,一般情况下,只要您使用标准流API(例如Java IO),我就不会过于担心验证内容是否有错误。网络堆栈中已经提供了较低的纠错(例如,您的操作系统的网络驱动程序)。

  3. Apache Commons的文件上传可能会有用 - 再次,取决于您的架构:http://commons.apache.org/fileupload/