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 请求的示例:
我不能在这里粘贴 blob,因为 GPLv3 会与 cc-wiki 许可证冲突。他的作品灵感来自于我最初发现的同一资源。基于此,我编写了一个适用于 android、mozilla 和 chrome.
的自己的版本
TL;DR 问题是 mozilla 没有正确理解 206 请求,我没有关闭和刷新 ByteOutputStream。我还尝试使用来自 JAX 的 StreamingOutput 作为响应,而不是发送简单的原始 http 响应。
我正在尝试创建一个简单的 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 请求的示例:
我不能在这里粘贴 blob,因为 GPLv3 会与 cc-wiki 许可证冲突。他的作品灵感来自于我最初发现的同一资源。基于此,我编写了一个适用于 android、mozilla 和 chrome.
的自己的版本TL;DR 问题是 mozilla 没有正确理解 206 请求,我没有关闭和刷新 ByteOutputStream。我还尝试使用来自 JAX 的 StreamingOutput 作为响应,而不是发送简单的原始 http 响应。