Come riprodurre i contenuti video in asp.net?

Ho il seguente codice che scarica i contenuti video:

WebRequest wreq = (HttpWebRequest)WebRequest.Create(url); using (HttpWebResponse wresp = (HttpWebResponse)wreq.GetResponse()) using (Stream mystream = wresp.GetResponseStream()) { using (BinaryReader reader = new BinaryReader(mystream)) { int length = Convert.ToInt32(wresp.ContentLength); byte[] buffer = new byte[length]; buffer = reader.ReadBytes(length); Response.Clear(); Response.Buffer = false; Response.ContentType = "video/mp4"; //Response.BinaryWrite(buffer); Response.OutputStream.Write(buffer, 0, buffer.Length); Response.End(); } } 

Ma il problema è che l’intero file viene scaricato prima di essere riprodotto. Come posso renderlo in streaming e riprodurre mentre è ancora in download? O è questo fino all’applicazione client / ricevente da gestire?

Stai leggendo l’intero file in un singolo buffer, quindi inviando l’intero array di byte contemporaneamente.

Dovresti leggere un buffer più piccolo in un ciclo while .

Per esempio:

 byte[] buffer = new byte[4096]; while(true) { int bytesRead = myStream.Read(buffer, 0, buffer.Length); if (bytesRead == 0) break; Response.OutputStream.Write(buffer, 0, bytesRead); } 

Hai guardato Smooth Streaming ?

Guarda qui il codice di esempio

Questo è più efficiente per te, specialmente se hai bisogno di trasmettere un video da un file sul tuo server o anche questo file è ospitato su un altro server

File Sul tuo server:

 context.Response.BinaryWrite(File.ReadAllBytes(HTTPContext.Current.Server.MapPath(_video.Location))); 

File su server esterno:

 var wc = new WebClient(); context.Response.BinaryWrite(wc.DownloadData(new Uri("http://mysite/video.mp4")));