.NET Core 2.0 Web API for Video Streaming from FileStream(用于FileStream视频流的.NET Core 2.0 Web API)
问题描述
我发现了一大堆示例,它们使用的对象在我的应用程序中不可用,并且似乎与我的.NET Core Web API版本不匹配。在本质上,我是在一个项目上工作,将有<video>
标签的网页,并希望加载的视频使用一个流从服务器,而不是直接通过一个路径提供文件。一个原因是文件的来源可能会改变,而通过路径提供它们并不是我的客户想要的。因此,我需要能够打开流并异步写入视频文件。
出于某种原因,这会生成JSON数据,所以这是错误的。但我只是不明白我需要做些什么才能将流视频文件发送到HTML中的<video>
标记。
当前编码:
[HttpGet]
public HttpResponseMessage GetVideoContent()
{
if (Program.TryOpenFile("BigBuckBunny.mp4", FileMode.Open, out FileStream fs))
{
using (var file = fs)
{
var range = Request.Headers.GetCommaSeparatedValues("Range").FirstOrDefault();
if (range != null)
{
var msg = new HttpResponseMessage(HttpStatusCode.PartialContent);
var body = GetRange(file, range);
msg.Content = new StreamContent(body);
msg.Content.Headers.Add("Content-Type", "video/mp4");
//msg.Content.Headers.Add("Content-Range", $"0-0/{fs.Length}");
return msg;
}
else
{
var msg = new HttpResponseMessage(HttpStatusCode.OK);
msg.Content = new StreamContent(file);
msg.Content.Headers.Add("Content-Type", "video/mp4");
return msg;
}
}
}
else
{
return new HttpResponseMessage(HttpStatusCode.BadRequest);
}
}
推荐答案
HttpResponseMessage
在asp.net-core
中未用作返回类型,它会将其读取为对象模型,并按照设计将其序列化在响应中,正如您已经观察到的那样。
幸运的是,在ASP.NET Core 2.0中,您拥有
Enhanced HTTP header support
如果应用程序访问者请求带有Range请求标头的内容,ASP.NET将识别并处理该标头。如果请求的内容可以部分传递,ASP.NET将适当地跳过并仅返回请求的字节集。您不需要在您的方法中编写任何特殊的处理程序来适应或处理此功能;它会自动为您处理。
所以现在您要做的就是返回文件流
[HttpGet]
public IActionResult GetVideoContent() {
if (Program.TryOpenFile("BigBuckBunny.mp4", FileMode.Open, out FileStream fs)) {
FileStreamResult result = File(
fileStream: fs,
contentType: new MediaTypeHeaderValue("video/mp4").MediaType,
enableRangeProcessing: true //<-- enable range requests processing
);
return result;
}
return BadRequest();
}
确保启用范围请求处理。但是,正如文档中所述,应该根据请求头以及该数据是否可以部分传递来处理。
从那里开始,现在只需从视频客户端指向终端并让其发挥魔力
这篇关于用于FileStream视频流的.NET Core 2.0 Web API的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:用于FileStream视频流的.NET Core 2.0 Web API


基础教程推荐
- 错误“此流不支持搜索操作"在 C# 中 2022-01-01
- 将事件 TextChanged 分配给表单中的所有文本框 2022-01-01
- 如何动态获取文本框中datagridview列的总和 2022-01-01
- 经典 Asp 中的 ResolveUrl/Url.Content 等效项 2022-01-01
- 从 VS 2017 .NET Core 项目的发布目录中排除文件 2022-01-01
- 在 VS2010 中的 Post Build 事件中将 bin 文件复制到物 2022-01-01
- 首先创建代码,多对多,关联表中的附加字段 2022-01-01
- 全局 ASAX - 获取服务器名称 2022-01-01
- JSON.NET 中基于属性的类型解析 2022-01-01
- 是否可以在 asp classic 和 asp.net 之间共享会话状态 2022-01-01