2016-08-20 8 views
0

シンプルなRESTサービスを作成して、シークサポートでオーディオファイルを提供しようとしています。私はジャージーに基づいています。この例を使用してい : https://github.com/aruld/jersey-streaming/tree/jersey2Spark javaサービングmp3ファイル(シークとダイナミック)

これは非常に単純な例ですが、それはGETとHEADブラウザで使用要求を、Rangeヘッダを探し、206プラスアーカイブで応答するリッスン要求されたスライス(バイト範囲で)。 ここでキャッチするのは、私がspark java(組み込みの桟橋サーバーを備えた小さなフレームワーク)にこれを書き直していることです。

すべてのことがOKであるようです。ブラウザは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

答えて

0

は答えを見つけました! 私はいくつかのより多くの研究を行なったし、それを実装するスパーク機能であることが判明:すでにここに成功して、このような機能を実装しようとしたtchoulihan https://github.com/perwendel/spark/issues/397

ユーザー:

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

ここではサンプルです

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

私はブロブを貼り付けることはできません:スパークは、アップロードを処理要求を取得しますここでGPLv3はcc-wikiライセンスと衝突するからです。 Hesの仕事は、私が最初に見つけたのと同じリソースに触発されています。それに基づいて、アンドロイド、モジラ、クロムで動作する自分のバージョンをコーディングしました。

TL; DR問題は、mozillaが206リクエストを正しく理解できず、私がByteOutputStreamを閉じてフラッシュしていないことです。また、単純な生のHTTPレスポンスを送信する代わりに、JAXからのStreamingOutputをレスポンスとして使用しようとしました。