2010-09-02 7 views
4

Existe-t-il un bon moyen de diffuser de la vidéo via asp.net sur une page Web normale et mobile? J'ai essayé ce qui suit, mais cela ne fonctionne pas dans mon Sony Ericsson K810i. Quand je l'essaie dans mon navigateur, je peux voir le clip (je ne sais pas si c'est en streaming).Diffuser la vidéo avec ASP.NET

html:

<object type="video/3gpp" 
     data="handlers/FileHandler.ashx" 
     id="player" 
     width="176" 
     height="148" 
     autoplay="true"></object> 

FileHandler.ashx (Best way to stream files in ASP.NET):

public void ProcessRequest (HttpContext context) { 

    string path = "~/files/do.3gp"; 

    string localPath = context.Server.MapPath(path); 

    if (!File.Exists(localPath)) 
    { 
     return; 
    } 

    // get info about contenttype etc 
    FileInfo fileInfo = new FileInfo(localPath); 
    int len = (int)fileInfo.Length; 
    context.Response.AppendHeader("content-length", len.ToString()); 
    context.Response.ContentType = FileHelper.GetMimeType(fileInfo.Name); // returns video/3gpp 

    // stream file 
    byte[] buffer = new byte[1 << 16]; // 64kb 
    int bytesRead = 0; 
    using(var file = File.Open(localPath, FileMode.Open)) 
    { 
     while((bytesRead = file.Read(buffer, 0, buffer.Length)) != 0) 
     { 
      context.Response.OutputStream.Write(buffer, 0, bytesRead); 
     } 
    } 

    // finish 
    context.Response.Flush(); 
    context.Response.Close(); 
    context.Response.End(); 

} 

Répondre

6

Qu'est-ce que vous avez est pas "techniquement" streaming. C'est un téléchargement de fichier. Votre client (navigateur/téléphone) a envoyé une requête HTTP et votre fichier FileHandler.ashx a ouvert le fichier et a écrit les octets dans le flux de réponse. C'est exactement la même interaction pour une requête de page Web, sauf que les données sont du texte html plutôt que des données binaires représentant une vidéo.

Si le téléphone ne prend pas en charge la vidéo, il se peut que le codage soit incompatible. Si vous êtes sûr que la vidéo peut être lue par le téléphone, vérifiez si le téléphone nécessite une prise en charge du téléchargement progressif (comme l'iPhone/iPad/iPod Touch nécessite que le lecteur multimédia "diffuse" des vidéos.) Si tel est le cas, besoin de regarder un certain nombre de solutions qui sont disponibles pour gérer les demandes de données d'octets et répondre à la demande avec les octets du fichier dans la plage spécifiée. J'ai écrit un library for ASP.NET MVC pour gérer cela et mon travail a été fait en fonction de ce guidance and source code