Maillot de REPOS soutien de reprise/de diffusion multimédia en continu
J'ai besoin à l'appui de reprendre le Maillot RESTE, je suis en train de faire de cette façon:
@Path("/helloworld")
public class RestServer {
@GET
@Path("say")
@Produces("audio/mp3")
public Response getMessage(@HeaderParam("Range") String r ) throws IOException{
String str="/Users/dima/Music/crazy_town_-_butterfly.mp3";
System.out.println(r);
RandomAccessFile f=new RandomAccessFile(str, "r");
int off=0;
int to=(int)f.length();
byte[] data ;
if(r!=null){
String from=r.split("=")[1].split("-")[0];
String t=r.split("=")[1].split("-")[1];
off=Integer.parseInt(from);
to=Integer.parseInt(t);
}
data= new byte[to-off];
f.readFully(data, off, to-off);
ResponseBuilder res=Response.ok(data)
.header("Accept-Ranges","bytes")
.header("Content-Range:", "bytes "+off+"-"+to+"/"+data.length)
.header("Pragma", "no-cache");;
if(r==null){
res=res.header("Content-Length", data.length);
}
f.close();
Response ans=res.build();
return ans;
}
}
Je veux être en mesure de flux mp3 de sorte que le navigateur peut rechercher de la musique, mais dans safari ça ne fonctionne toujours pas. des idées?
OriginalL'auteur Dima | 2013-01-19
Vous devez vous connecter pour publier un commentaire.
Voici mon prendre sur la base de la solution fournie ici. Il fonctionne correctement sur les différents navigateurs. Je suis en mesure de chercher de la musique très bien dans Safari et les autres navigateurs aussi bien. Vous pouvez trouver un exemple de projet sur mon Github référentiel qui a plus de détails. Chrome et Safari joliment tire parti de la gamme les en-têtes de diffuser des médias et vous pouvez le voir dans la requête/réponse de trace.
Ici est la MediaStreamer mise en œuvre, qui est utilisé pour diffuser de la sortie dans votre méthode.
BTW, quelle valeur dois-je mettre à chunk_size?
J'ai utilisé 1 MO morceaux dans mon exemple ici github.com/aruld/jersey-streaming/blob/master/src/main/java/com/... Il est utilisé lorsque le client n'envoie pas de plage limite supérieure, nous décidons donc de segmenter les médias à plusieurs bits.
Dieu, je souhaite que j'avais ça pour de la jetée. Je ne peux pas comprendre comment le convertir.
La caisse jersey2 branche qui utilise de la Jetée.
OriginalL'auteur Arul Dhesiaseelan
Depuis que j'ai été confronté à la même problema, j'ai essayé plusieurs solution générale[1] avec un
ContainerResponseFilter
qui se déclenchent quand unRange
en-tête est présent dans la demande et de travailler de façon transparente avec tous les supports de type, des entités et des ressources méthodes.C'est le
ContainerResponseFilter
qui utilisera encapsuler le flux de sortie dans unRangedOutputStream
(voir ci-dessous):Et voici le
RangedOutputStream
:[1] https://github.com/heruan/jersey-range-filter
OriginalL'auteur Giovanni Lovato