【问题标题】:Streaming Audio with Java使用 Java 流式传输音频
【发布时间】:2011-08-22 17:18:51
【问题描述】:

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

  1. 如何缓冲传输以便用户可以不间断地听到整个文件?传输整个文件然后播放它也很好,但知道如何执行此操作会很好。
  2. 如何验证到服务器的传输?我可以发送数据包并验证/重新发送每个数据包吗?
  3. 是否有用于此的现有 API(请!)还是我必须全部手动编写?

【问题讨论】:

  • 从您的问题来看,您的整个应用程序中涉及多少组件尚不清楚。您写道“我还需要将音频从服务器流式传输到要为用户播放的 Web 应用程序”。这意味着有一个 Web 应用程序一个服务器,两者是完全不同的。如果这是正确的,那么如果您提供有关当前存在的信息将会很有用。

标签: audio jakarta-ee stream file-transfer


【解决方案1】:

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

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

  2. 同样,这个问题的答案取决于您如何构建解决方案。不过,总的来说,只要您使用标准流 API(例如 Java IO),我就不会太担心验证内容是否有错误。网络堆栈的底层已经提供了纠错功能(例如,您的操作系统的网络驱动程序)。

  3. Apache Commons 的 File-Upload 可能有用 - 同样取决于您的架构:http://commons.apache.org/fileupload/

【讨论】:

    猜你喜欢
    • 2013-04-12
    • 2012-01-18
    • 1970-01-01
    • 2014-12-20
    • 2010-12-11
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多