我正在构建一个应用程序,该应用程序通过麦克风将语音收集为wav文件。这些录音需要流式传输到服务器并保存(作为 wav 文件,我知道它们很大,但它们必须是 wav)。我还需要将音频(可以是mp3)从服务器流式传输到Web应用程序,以便为用户播放。我不知道如何实现这一点,但我想使用 Java EE 应用程序,因为我熟悉 Java 并且它比 Flex 更容易维护(我们在工作中遇到旧的 Flex 代码问题)。我担心的是:
- 如何缓冲传输,以便用户不间断地听到整个文件?传输整个文件然后播放它也很好,但是知道如何做到这一点会很好。
- 如何验证到服务器的传输?我可以发送数据包并验证/重新发送每个数据包吗?
- 是否有现有的API(请!)还是我必须手动编写?
正如我评论您的问题时,目前尚不清楚您是否已经决定了拓扑中存在哪些组件。特别是,目前还不清楚您是否已经有一个服务器进程负责存储这些音频文件。因此,我将不得不在我的答案中做出一些假设。随意发表评论,我会尽力调整。
- 确保音频文件(由最终用户)播放
而没有网络引起的中断的唯一方法是让最终用户(或在最终用户端运行的应用程序,例如某些 JavaScript 代码)在完整下载音频流后播放音频流。除非你这样做,否则你只能降低断裂的风险;你无法消除它。即使是最复杂的缓冲算法也无法将网络中断 99.99% 处理为缓冲整个流。由于我不确定您是否涉及客户端应用程序,因此我不建议如何强制客户端下载整个文件而不是"随心所欲"地播放它;在最简单的情况下,您可能足以使用
Content-Disposition
标头:http://en.wikipedia.org/wiki/MIME#Content-Disposition同样,这个问题的答案取决于您如何构建解决方案。不过,一般来说,只要您使用标准的流 API(例如 Java IO),我就不会太担心验证内容是否存在错误。纠错已在网络堆栈(例如,操作系统的网络驱动程序)的较低位置提供。
Apache Commons的文件上传可能很有用 - 同样,这取决于你的架构:http://commons.apache.org/fileupload/