Потоковое аудио с Java - PullRequest
5 голосов
/ 10 мая 2011

Я создаю приложение, которое собирает речь через микрофон в виде wav-файлов. Эти записи должны быть переданы на сервер и сохранены (как файлы WAV, я знаю, что они большие, но они должны быть WAV). Мне также нужно передавать потоковое аудио (это может быть mp3) с сервера в веб-приложение для воспроизведения для пользователя. Я понятия не имею, как реализовать это, но я хотел бы использовать приложение Java EE, потому что я знаком с Java, и его легче поддерживать, чем Flex (у нас проблемы со старым кодом Flex на работе). Мои опасения:

  1. Как мне буферизовать передачу, чтобы пользователи могли слышать весь файл без перерывов? Передача всего файла и затем его воспроизведение тоже хорошо, но знать, как это сделать, было бы неплохо.
  2. Как мне проверить передачу на сервер? Могу ли я отправлять пакеты и проверять / отправлять по каждому пакету?
  3. Существуют ли API для этого (пожалуйста!) Или я должен написать все это вручную?

1 Ответ

1 голос
/ 30 сентября 2012

Как я прокомментировал ваш вопрос, неясно, решили ли вы уже, какие компоненты существуют в топологии. В частности, неясно, есть ли у вас уже серверный процесс, отвечающий за хранение этих аудиофайлов. Поэтому мне придется сделать несколько предположений в моем ответе. Не стесняйтесь комментировать, и я сделаю все возможное, чтобы настроить.

  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/

...