Spark java提供mp3文件(动态搜索)

时间:2016-08-20 06:09:19

标签: java html5-audio audio-streaming embedded-jetty

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

这是一个非常简单的示例,它侦听浏览器使用的GET和HEAD请求,查找Range标头并使用206加上请求的归档切片(带字节范围)进行响应。 这里的问题是我在spark java(一个带有嵌入式jetty服务器的小框架)上重写它。

每件事似乎都没问题。浏览器发送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,03KB(总是)结束。

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

1 个答案:

答案 0 :(得分:0)

找到答案! 我做了一些研究,发现它是一个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响应。