5

我有一个简单的MVC动作,它返回一个FilePathResult指向视频的动作。由于某种原因HTML5视频(使用js-video.js)没有播放视频。如果我将 URL 更改为我知道有效的 URL,则视频可以正常播放。所以这一定与我提供文件的方式有关。

如果我在浏览器中浏览到 URL,视频会下载然后正常播放。

该视频.mp4的返回 MIME 类型为video/mp4.

我正在使用Video Studio 2012,.NET 4和.IIS 8 ExpressWindows 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返回的屏幕截图:

网络

文件获取请求

mp4 请求失败

失败的 mp4 请求详细信息

4

1 回答 1

6

HTML5Video标记需要支持Range Requests

在静态文件的情况下,此支持由服务器内部提供,但在ASP.NET MVC操作的情况下,它需要在ActionResult级别实现。

ASP.NET MVC 中的 Range Requests – RangeFileResult一文详细描述了如何创建ActionResult具有Range Request支持的 ASP.NET MVC。这里还有一个使用VideoJS的示例应用程序:ASP.NET MVC 中的 VideoJS

于 2012-11-14T08:20:25.267 回答