gpt4 book ai didi

c# - 如何使用 ASP.NET MVC 流式传输视频文件?

转载 作者:可可西里 更新时间:2023-11-01 09:12:55 33 4
gpt4 key购买 nike

我正在开发一个人们可以访问音频和视频文件的网站。我有下载文件的代码,它由以下两个操作方法组成......

public ActionResult GetAudioFile(int id) {
return GetFile(id, true);
}

public ActionResult GetVideoFile(int id) {
return GetFile(id, false);
}

private ActionResult GetFile(int id, bool isAudio) {
// Code to get info about the file, etc omitted for clarity
string downloadFileName = // full path to audio/video file
byte[] bytes = GetFileBytes(fileName); // also omitted
return File(bytes, (isAudio ? "audio/mpeg" : "video/mp4"), downloadFileName + (isAudio ? ".mp3" : ".mp4"));
}

这两个都可以正常工作,我可以下载任何一种类型的文件。

我现在想添加两个 Razor View ,一个用于收听音频文件,一个用于观看视频。我在音频 View 上做了以下操作,效果很好......

<audio src='@Url.Action("GetAudioFile", "Search", new {ID = @Model.ID})'
controls preload="auto"></audio>

然后我尝试对视频 View 执行相同的操作...

<video src='@Url.Action("GetVideoFile", "Search", new {ID = @Model.ID})' 
controls preload="auto" width="640" height="368"></video>

但是,当我尝试运行它时会出现 System.OutOfMemoryException。每个视频的平均大小约为 400-500Mb。

然后我尝试使用 Response.TransmitFile 方法如下...

  Response.ContentType = "video/mp4";
Response.AddHeader("content-disposition", "attachment; filename=myvideo.mp4"));
Response.TransmitFile(fileName);
Response.End();
return null;

...但这不起作用。在 Chrome 中,我可以在控制台中看到消息“资源解释为文档,但使用 MIME 类型视频/mp4 传输”,而在 FireFox 中,我在视频控件中看到相同的消息。

有人知道我该如何解决这个问题吗?理想情况下,我想流式传输文件,以便在第一个字节到达用户时立即开始播放,而不是让他们等到文件完全下载完毕。

我试过几个 Javascript 视频播放器,但都没有成功。

更新 我想知道问题是否根本不是 Controller 操作,因为我尝试将我的网络浏览器直接指向视频文件,我得到了一个看起来像音频播放器的东西,但是没有视频 Pane ,当我单击播放按钮时没有任何反应。不确定这是否有帮助。

最佳答案

MvcControllerFile 方法返回一个FileContentResult。后者不流式传输内容。据我所知,MvcController 根本不支持流。

您可能想尝试 ApiControllerPushStreamContent。后者提供了通过回调方法异步写入输出流的可能性。为此,您需要在解决方案中使用实际流。使用 byte[] 将始终将整个文件内容加载到内存中。

请在此处查看详细教程:Asynchronously streaming video with ASP.NET Web API

关于c# - 如何使用 ASP.NET MVC 流式传输视频文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27535845/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com