Spark java 服务 mp3 文件(动态搜索)

Spark java Serving mp3 file (dynamic with seek)

我正在尝试创建一个简单的 REST 服务来提供音频文件(具有搜索支持)。 我正在使用这个基于 Jersey 的例子: https://github.com/aruld/jersey-streaming/tree/jersey2

这是一个非常简单的示例,它侦听浏览器使用的 GET 和 HEAD 请求,查找范围 header 并以 206 加上请求的存档切片(带有字节范围)作为响应。 这里的问题是我 re-writing 在 spark java(一个带有嵌入式码头服务器的小型框架)上。

一切似乎都还好。浏览器发送 GET,服务器相应地创建响应……尽管播放器从不加载或播放任何内容。请求发出,响应header完美:

要求:

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,03KB(总是)。

我的概念验证应用程序代码: http://pastebin.com/xjkLne7E

找到答案了! 我做了一些更多的研究,发现它是一个要实现的 Spark 功能: https://github.com/perwendel/spark/issues/397

用户 tchoulihan 已尝试在此处成功实现此类功能:

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

这是处理上传的 spark 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。我还尝试使用来自 JAX 的 StreamingOutput 作为响应,而不是发送简单的原始 http 响应。