У меня есть следующий код, который загружает видеоконтент:
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();
}
}
Но проблема состоит в том, что целый файл загружает прежде чем быть играемым. Как я могу сделать это потоком и играть, поскольку это все еще загружает? Или это до приложения клиента/получателя для управления?
Вы считываете весь файл в один буфер, а затем отправляете весь массив байтов сразу.
Вы должны считывать в меньший буфер в цикле while
.
Например:
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);
}
Вы смотрели Smooth Streaming ?
Посмотрите пример кода здесь