Потоковое аудио с сервлетом Java в Google App Engine

Я пытаюсь создать в своем веб-приложении GAE Java URL-адрес, который позволяет потоковую передачу аудиофайла, но пока он работает только для прямой загрузки. Вот так выглядит мой сервлет для загрузки файла из BlobStore с BlobKey, отправленным в параметре "file_id":

public void doGet(HttpServletRequest req, HttpServletResponse res) 
        throws IOException {

    BlobInfoFactory bif = new BlobInfoFactory();

    BlobKey blobKey = new BlobKey(req.getParameter("file_id"));
    String fileName = bif.loadBlobInfo(blobKey).getFilename();

    res.setContentType("text/plain");
    res.setHeader("Content-Disposition", "attachment; filename=" + fileName);

    blobstoreService.serve(blobKey, res);
}

Сервлет сопоставляется с URL-адресом, который выглядит следующим образом: xxx.appspot.com/fileDownload?file_id=yyy

Как я могу получить доступ к этому URL на стороне клиента (браузер или мобильное приложение) для потоковой передачи аудиоданных вместо прямой загрузки? Должен ли я изменить сторону сервера, протокол стороны клиента для доступа к нему (вместо HTTP) или и то и другое?

Спасибо!

1 ответ

Решение
  1. Проверьте, какие аудиоформаты поддерживаются определенными браузерами. Ваш лучший выбор будет mp3 аудио.

  2. Используйте этот HTML-фрагмент на стороне клиента:

    <audio controls> <source src="http://path/to/your/audio/file.mp3" type="audio/mpeg"> Your browser does not support the audio element. </audio>

  3. Убедитесь, что ваш сервер обслуживает аудио файлы как audio/mpeg тип содержимого (также содержимое вашего блоба должно быть в формате mp3):

    res.setContentType("audio/mpeg");

  4. Удалить Content-Disposition заголовок. Это используется, когда вы хотите, чтобы браузер сохранил файл на локальный диск.

Другие вопросы по тегам