Api:
public HttpResponseMessage Get(string id)
{
var video = new VideoStream(id);
var response = Request.CreateResponse();
response.Content = new PushStreamContent((Action<Stream, HttpContent, TransportContext>)video.WriteToStream, new MediaTypeHeaderValue("video/webm"));
response.Content.LoadIntoBufferAsync();
return response;
}
Video Stream:
public async void WriteToStream(Stream outputStream, HttpContent content, TransportContext context)
{
try
{
byte[] buffer;
var f = File.Open(_filename, FileMode.Open, FileAccess.Read);
if (f != null)
buffer = new byte[f.Length];
else
buffer = new byte[Int32.MaxValue];
f.Close();
using (var video = File.Open(_filename, FileMode.Open, FileAccess.Read))
{
var length = (int)video.Length;
var bytesRead = 1;
while (length > 0 && bytesRead > 0)
{
bytesRead = video.Read(buffer, 0, Math.Min(length, buffer.Length));
await outputStream.WriteAsync(buffer, 0, bytesRead);
length -= bytesRead;
}
video.Close();
video.Dispose();
}
}
catch
{
throw;
}
finally
{
outputStream.Close();
}
}
Если видео больше 2 метров, хром отправляет повторный запрос по окончанию ролика. Была проблема
The remote host closed the connection. The error code is 0x80070040 Решилась увеличением executionTimeout.
Но вот почему повторная передача потока не происходит?