これは、バイト範囲(部分的な要求)でビデオファイルを提供するC#(MVC)でWebAPIコントローラーを作成するために使用したソリューションです。部分的なリクエストにより、ブラウザは、ビデオ全体をダウンロードするのではなく、再生に必要な量のビデオのみをダウンロードできます。これにより、はるかに効率的になります。
これは最近のバージョンでのみ機能することに注意してください。
var stream = new FileStream(videoFilename, FileMode.Open, FileAccess.Read , FileShare.Read);
var mediaType = MediaTypeHeaderValue.Parse($"video/{videoFormat}");
if (Request.Headers.Range != null)
{
try
{
var partialResponse = Request.CreateResponse(HttpStatusCode.PartialContent);
partialResponse.Content = new ByteRangeStreamContent(stream, Request.Headers.Range, mediaType);
return partialResponse;
}
catch (InvalidByteRangeException invalidByteRangeException)
{
return Request.CreateErrorResponse(invalidByteRangeException);
}
}
else
{
// If it is not a range request we just send the whole thing as normal
var fullResponse = Request.CreateResponse(HttpStatusCode.OK);
fullResponse.Content = new StreamContent(stream);
fullResponse.Content.Headers.ContentType = mediaType;
return fullResponse;
}