我有一个简单的MVC
操作,返回指向视频的FilePathResult
。出于某种原因,HTML5
视频(使用js-video.js
)未播放视频。如果我将URL更改为我知道有效的URL,则视频播放正常。所以它必须与我提供文件的方式有关。
如果我浏览浏览器中的URL,视频会下载,然后播放正常。
视频为.mp4
,返回的MIME类型为video/mp4
。
我正在使用Video Studio 2012
,.NET 4
,IIS 8 Express
和Windows 7 x64 Home Premium
。
以下是我的代码:
[Authorize(Roles = "File_Read")]
public FileResult Get(int? id)
{
try
{
if (id == null)
throw new ArgumentNullException("id");
var fileRepo = FileRepositoryFactory.Repository;
var file = fileRepo.GetById(id.Value);
if (file == null)
throw new InvalidOperationException(String.Format("Failed to find file with id: {0}", id));
if (String.IsNullOrWhiteSpace(file.FilePath))
{
return this.File(file.Data, file.MIMEType, file.FileName);
}
else
{
return this.File(file.FilePath, file.MIMEType, file.FileName);
}
}
catch (Exception ex)
{
return this.File("failed.txt", "text/plain");
}
}
以下是Chrome
返回的屏幕截图:
答案 0 :(得分:6)
HTML5 Video
tage需要支持 Range Requests 。
如果是静态文件,则此支持由服务器在内部提供,但在 ASP.NET MVC 操作的情况下,需要在ActionResult
级别实现。
文章Range Requests in ASP.NET MVC – RangeFileResult详细介绍了如何使用 Range Request 支持创建ASP.NET MVC ActionResult
。还有一个使用 VideoJS 的示例应用程序:VideoJS in ASP.NET MVC