私は以前この技術をhttp://www.strathweb.com/2013/01/asynchronously-streaming-video-with-asp-net-web-api/に使用しており、非同期のビデオストリーミングに最適でした。ASP.Net Core Web APIの非同期ビデオストリーミングは動作しません。
しかし、ASP.NET Coreの場合、この方法は期待どおりに機能しません。
public class VideoStream
{
private readonly string _filename;
public VideoStream(string filename)
{
_filename = filename;
}
public async Task WriteToStream(Stream outputStream, HttpContent content, TransportContext context)
{
try
{
var buffer = new byte[65536];
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;
}
}
}
catch (Exception)
{ return; }
finally
{
outputStream.Flush();
outputStream.Dispose();
}
}
}
と私はビデオストリーミング要求に対して次のアクションがあります:ビデオストリーミングクラスによって
があるデフォルトAsp.Netコアで組み込まれていませんので、メディア
[HttpGet]
[Route("[action]")]
public IActionResult GetVideo(int id)
{
var fileName = GetVideoFileName(id);
var video = new VideoStream(fileName);
var response = new HttpResponseMessage
{
Content = new PushStreamContent(video.WriteToStream, new MediaTypeHeaderValue("video/mp4"))
};
var objectResult = new ObjectResult(response);
objectResult.ContentTypes.Add(new Microsoft.Net.Http.Headers.MediaTypeHeaderValue("video/mp4"));
return objectResult;
}
をビデオ/ mp4用フォーマッタ私は以下のカスタムメディアフォーマッタを作成しました
public class VideoOutputFormatter : IOutputFormatter
{
public bool CanWriteResult(OutputFormatterCanWriteContext context)
{
if (context == null)
throw new ArgumentNullException(nameof(context));
return true;
}
public async Task WriteAsync(OutputFormatterWriteContext context)
{
if (context == null)
throw new ArgumentNullException(nameof(context));
var response = context.HttpContext.Response;
response.ContentType = "video/mp4";
How to impelemnt ???
}
}
私のカスタムフォーマッタを実際に呼び出します。 video/mp4用のこのカスタムメディアフォーマッタの実装方法はわかりません。 誰でも私を助けることができますか?
共有してくれてありがとうございますが、純粋なコアにPushStreamContentが見つかりませんでした。サンプルがありますか? – Soren
@Soren残念ながら、私は解決策を見つけることができず、nginxのようなリバースプロキシを介してビデオを配信するだけでした。 – villecoder