web-dev-qa-db-fra.com

Diffuser du contenu vidéo via l'API Web 2

Je suis en train de déterminer la meilleure façon de procéder:

J'ai un tas de fichiers de séquences CCTV (fichiers MP4, allant de 4 Mo à 50 Mo), que je veux mettre à disposition via un portail Web. Ma première pensée a été de diffuser le fichier via l'API Web, j'ai donc trouvé le lien ci-dessous:

http://www.strathweb.com/2013/01/asynchronously-streaming-video-with-asp-net-web-api/

Après avoir implémenté un exemple de projet, j'ai réalisé que l'exemple était basé sur l'API Web 1 et non sur l'API Web 2.1, ce que j'utilise. Après avoir fait plus de recherches, j'ai obtenu le code à compiler avec WebAPI 2.1. J'ai alors réalisé que si je veux faire du streaming je ne peux pas utiliser de fichiers MP4, il y a pas mal de détails techniques derrière ça, alors voici le fil:

Meilleure approche du streaming http en temps réel vers un client vidéo HTML5

Il semble que cela fonctionne, j'ai besoin d'encoder mes fichiers MP4 en quelque chose comme WebM, mais cela va prendre trop de temps. Icecast ( http://icecast.org/ ), qui est un serveur de streaming, mais je ne l'ai pas encore essayé, encore une fois je ne sais pas si c'est ce que je dois faire.

Maintenant que j'y pense, je n'ai en fait pas besoin de streaming en direct, j'ai juste besoin de permettre au client de lire le fichier vidéo via son navigateur, peut-être en utilisant l'élément vidéo HTML5? Le fait est que mon application doit fonctionner sur IOS également, donc je pense que cela signifie que je ne peux même pas encoder mon MP4 en FLV et utiliser simplement flash.

Tout ce dont j'ai vraiment besoin, c'est d'avoir tous mes clips vidéo sous forme de miniatures sur une page Web, et si le client clique dessus, il commence à jouer dès que possible, sans avoir à télécharger le fichier entier. Pensez à la fonction "Regarder la bande-annonce" sur imdb.com. Il suffit de lire un fichier vidéo, c'est vraiment ce que je veux. Je n'ai pas besoin de streaming LIVE, à quoi sert, je pense, WebM? Encore une fois, pas sûr.

16
FaNIX

Deux choses:

  1. Utilisez un élément vidéo dans votre HTML (cela fonctionne dans les navigateurs ET iOS):

    <video src="http://yoursite.com/api/Media/GetVideo?videoId=42" /> 
    
  2. Soutien 206 PARTIAL CONTENT requêtes dans votre code API Web. Ceci est crucial pour le streaming et le support iOS, et est mentionné dans le fil que vous avez publié.

Suivez simplement cet exemple:

http://blogs.msdn.com/b/webdev/archive/2012/11/23/asp-net-web-api-and-http-byte-range-support.aspx

En un mot:

if (Request.Headers.Range != null)
{
    // Return part of the video
    HttpResponseMessage partialResponse = Request.CreateResponse(HttpStatusCode.PartialContent);
    partialResponse.Content = new ByteRangeStreamContent(stream, Request.Headers.Range, mediaType);
    return partialResponse;
}
else 
{
    // Return complete video
    HttpResponseMessage fullResponse = Request.CreateResponse(HttpStatusCode.OK);
    fullResponse.Content = new StreamContent(stream);
    fullResponse.Content.Headers.ContentType = mediaType;
    return fullResponse;
}
23
Dunc