Mp3-файл Spark java, обслуживающий (динамически с поиском)

java html5-audio audio-streaming embedded-jetty

559 просмотра

1 ответ

Я пытаюсь создать простой сервис REST для обслуживания аудиофайлов (с поддержкой поиска). Я использую этот пример, который основан на Джерси: https://github.com/aruld/jersey-streaming/tree/jersey2

Это довольно простой пример, он слушает запросы GET и HEAD, используемые браузерами, ищет заголовок Range и отвечает 206 плюс запрошенный фрагмент архива (с байтовыми диапазонами). Подвох в том, что я переписываю это на spark java (крошечный фреймворк со встроенным джет-сервером).

Кажется, все в порядке. Браузер отправляет GET и сервер соответственно отправляет ответ ... хотя проигрыватель никогда не загружает и не воспроизводит ничего. Запрос сделан, и заголовок ответа идеален:

Запрос:

Host: localhost:4567
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0
Accept: audio/webm,audio/ogg,audio/wav,audio/*;q=0.9,application/ogg;q=0.7,video/*;q=0.6,*/*;q=0.5
Accept-Language: en-US,en;q=0.5
Range: bytes=0-
Connection: keep-alive

Отклик:

Accept-Ranges: bytes
Content-Length: 1048577
Content-Range: bytes 0-1048576/5563904
Content-Type: audio/mp3
Date: Sat, 20 Aug 2016 05:41:23 GMT
Last-Modified: Sat Aug 20 01:12:37 BRT 2016
Server: Jetty(9.3.6.v20151106)
sasd

Одна вещь, которую я заметил, заключается в том, что кажется, что передача для этого запроса никогда не заканчивается Когда я закрываю сервер, передача заканчивается на 0,03 КБ (всегда).

Код подтверждения моего приложения: http://pastebin.com/xjkLne7E

Автор: Lucas Montenegro Carvalhaes Источник Размещён: 08.11.2019 10:57

Ответы (1)


0 плюса

Решение

Нашел ответ! Я провел еще несколько исследований и обнаружил, что эта функция Spark должна быть реализована: https://github.com/perwendel/spark/issues/397

Пользователь tchoulihan уже попытался реализовать такую ​​функцию с успехом здесь:

https://github.com/tchoulihan/torrenttunes-client

Вот пример запроса get get, который обрабатывает загрузку:

https://github.com/tchoulihan/torrenttunes-client/blob/master/src/main/java/com/torrenttunes/client/webservice/Platform.java#L555

Я не могу вставить сюда BLOB-объект, поскольку GPLv3 конфликтует с лицензией cc-wiki. Его работа вдохновлена ​​тем же ресурсом, который я впервые нашел. Исходя из этого, я написал свою собственную версию, которая работает на Android, Mozilla и Chrome.

TL; DR Проблема была в том, что mozilla не понимает запрос 206 должным образом, и я не закрывал и не сбрасывал ByteOutputStream. Также я попытался использовать StreamingOutput из JAX в качестве ответа вместо того, чтобы отправлять простой необработанный HTTP-ответ.

Автор: Lucas Montenegro Carvalhaes Размещён: 20.08.2016 08:22
Вопросы из категории :
32x32