audio - 使用 Java 流式传输音频

标签 audio jakarta-ee stream file-transfer

我正在构建一个通过麦克风收集语音作为 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 的 File-Upload 可能很有用 - 同样,这取决于您的架构:http://commons.apache.org/fileupload/
  • 关于audio - 使用 Java 流式传输音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5954730/

    相关文章:

    php - 一种播放 mp3 样本的方法

    android - 如何在Android中检查天气扬声器是否正在使用?

    java - 服务委托(delegate)抛出 "LazyInitializationException: could not initialize proxy - no Session"

    mongodb - 基于 Spring Boot 的项目中的 Spring Data MongoDB 配置

    stream - 卡夫卡流 - 如何分组两次?

    android - 在 fragment 上按下后退按钮时强制关闭

    javascript - 如何在移动网络中从 navigator.getUserMedia() 获取对象?

    java - 在 Linux 上的 Java EE 应用程序中调用 dll 文件

    c - printf 不创建输出或创建错误输出

    ios - 无法播放 SoundCloud 的某些轨道