Comment diffuser les fichiers audio/vidéo tels que MP3, MP4, AVI, etc à l'aide d'une Servlet
Je voudrais flux de mes fichiers audio/vidéo pour le web à l'aide de servlet.
J'ai fait une tentative avec la suite de la servlet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
File file = new File("/Users/myfolder/Documents/workspace/love.mp3");
response.setContentType(getServletContext().getMimeType(file.getName()));
response.setContentLength((int) file.length());
Files.copy(file.toPath(), response.getOutputStream());
}
Et le code HTML suivant:
<a href="/media" data-format="mp3 ogg">Click Here!</a>
Cependant, le joueur est juste de chargement... chargement... chargement...
Comment est-il la cause et comment puis-je le résoudre?
OriginalL'auteur Likoed | 2012-11-27
Vous devez vous connecter pour publier un commentaire.
Un grand nombre de médias, les joueurs exigent que le serveur prend en charge la soi-disant HTTP demandes de plage. I. e. il doit être en mesure de revenir à des parties spécifiques du fichier de média sur demande avec un
en-tête. Par exemple, seuls les octets exactement à l'indice de 1000 jusqu'à 2000 sur un fichier de 10 MO de long. Ceci est obligatoire pour de nombreux acteurs des médias, afin d'être en mesure de sauter une certaine gamme de médias de flux assez rapidement et/ou afin d'améliorer la vitesse de mise en mémoire tampon par la création de connexions multiples, dont chacune des demandes différentes parties du fichier.
C'est cependant beaucoup plus de code dans votre servlet, qui nécessite une compréhension de la HTTP
spécification. Habituellement, le servletcontainer (Tomcat, JBoss as, Glassfish, etc) par défaut servlet prend déjà en charge cette sorti de la boîte. Donc si il y a un moyen de publier le dossier media dans le web, en standard, de sorte que vous n'avez pas besoin de homegrow une servlet pour cela, alors je vais aller sur cette route.
Il est difficile de savoir qui servletcontainer que vous utilisez, donc je vais supposer Tomcat dans cet exemple:
Il suffit de déposer
love.mp3
fichier dans le web public du contenu du projet web, de sorte qu'il est seulement disponible par<a href="love.mp3">
sans la nécessité pour l'ensemble de la servlet.Ou, mettre le
love.mp3
fichier dans un nouveau sous-dossier deTomcat/webapps
dossier, par exempleTomcat/webapps/media/love.mp3
. De cette façon, il est disponible par<a href="/media/love.mp3">
.Ou, mettre le
love.mp3
fichier à un autre emplacement sur le disque, par exemple/path/to/media/love.mp3
et ajouter le/media
dossier en tant que nouveau contexte en ajoutant la ligne suivante à Tomcat/conf/server.xml
:De cette façon, il est disponible par
<a href="/media/love.mp3">
.De toute façon, Tomcat, propre
DefaultServlet
, qui a un soutien adéquat pourdemandes, seront utilisés pour diffuser le contenu.
Mais si il n'y a absolument aucun moyen de faire usage de servletcontainer propre défaut servlet, alors vous avez besoin de réécrire votre servlet code de telle manière qu'il prend correctement en charge
demandes. Vous pouvez obtenir de l'inspiration de l'open source des exemples tels que Tomcat
DefaultServlet
et OmniFacesFileServlet
.Voir aussi:
Oui, je le sais. Avez-vous lire et compris ma réponse? Votre servlet doit prendre en charge
Range
demandes. Le servletcontainer par défaut de servet cependant supporte déjà sorti de la boîte, de sorte qu'il est beaucoup plus préférable de se contenter de l'utiliser en publier le fichier directement sur le web.OK.. Merci pour votre réponse, mais il semble avoir besoin de temps pour comprendre. Je vais l'essayer.
Est il possible que je peux mettre en œuvre un filtre de demande pour du contenu statique qui est servi par le DefaultServlet?
OriginalL'auteur BalusC