How to stream video content in asp.net?

I have the following code which downloads video content:

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();
  }
}

But the problem is that the whole file downloads before being played. How can I make it stream and play as it’s still downloading? Or is this up to the client/receiver application to manage?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

You’re reading the entire file into a single buffer, then sending the entire byte array at once.

You should read into a smaller buffer in a while loop.

For example:

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);
}

Method 2

This is more efficient for you especially if you need to stream a video from a file on your server or even this file is hosted at another server

File On your server:

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

File on external server:

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

Method 3

Have you looked at Smooth Streaming?

Look at sample code here


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x