2016-08-20 2 views
0

J'essaye de créer un service REST simple pour servir des fichiers audio (avec support de recherche). J'utilise cet exemple qui est basé sur Jersey: https://github.com/aruld/jersey-streaming/tree/jersey2Spark java Serving fichier mp3 (dynamique avec seek)

Ceci est un exemple très simple, il écoute demandes GET et HEAD utilisés par les navigateurs, recherchez l'en-tête de gamme et répondre avec 206 plus les archives tranche demandée (avec des plages d'octets). La capture ici est que je réécris ceci sur l'étincelle java (un cadre minuscule avec un serveur embarqué de jetée).

Tout semble être OK. Le navigateur envoie le GET et le serveur crée la réponse en conséquence ... bien que le joueur ne charge jamais et ne joue rien. La demande est faite et l'en-tête de réponse est parfaite:

Demande:

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 

Réponse:

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 

Une chose que je remarque est que le transfert semble pour cette demande ne se termine jamais. Lorsque je ferme le serveur, le transfert se termine à 0,03 Ko (toujours).

Ma preuve de code application concept: http://pastebin.com/xjkLne7E

Répondre

0

trouvé une réponse! j'ai fait quelques recherches et trouvé qu'il est une option Spark à mettre en œuvre: https://github.com/perwendel/spark/issues/397

utilisateur tchoulihan déjà essayé de mettre en œuvre cette fonctionnalité avec succès ici:

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

Voici un échantillon de la demande get étincelle qui gère le chargement:

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

Je ne peux pas coller un blob ici puisque GPLv3 se heurterait à la licence cc-wiki. Son travail est inspiré de la même ressource que j'ai trouvée pour la première fois. Basé sur cela j'ai codé une version de mon propre qui fonctionne sur android, mozilla et chrome.

TL; DR Le problème était que mozilla ne comprenait pas la requête 206 correctement et que je ne fermais pas et vidais le ByteOutputStream. J'ai également essayé d'utiliser le StreamingOutput de JAX comme réponse au lieu d'envoyer une simple réponse http brute.