0

我在这里使用这个库我在这里使用这个插件播放视频。

按照代码:

控制器:

[HttpGet]
public ActionResult StreamUploadedVideo()
{            
    byte[] test = null;

    using (var ctx = new Entities())
    {
        var result = ctx.Table.Where(x => x.Field == 4).FirstOrDefault();

        test = result.Movie;

        return new RangeFileContentResult(test, "video/mp4", "Name.mp4", DateTime.Now);
    }
}

看法:

<video id="my-video" class="video-js" controls preload="auto" width="640" height="264" poster="MY_VIDEO_POSTER.jpg" data-setup="{}">
    <source src="@Url.Action("StreamUploadedVideo","Controller")" type='video/mp4'>
    <p class="vjs-no-js">
        To view this video please enable JavaScript, and consider upgrading to a web browser that
        <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>
    </p>
</video>

问题:当我更改视频时间(例如:将时间从 1:00 更改为 10:00 分钟)时,我遇到以下问题:

谷歌浏览器:A network error caused the media download to fail part-way.

歌剧:The media playback was aborted due to corruption problem or because the used features your browser did not support.

图片:

插入图像描述

其他浏览器都很好。Google 和 Opera 是今天日期的最新更新版本:07/04/2017

  • Microsoft Edge - 好的

  • 火狐 - 好的

  • Internet Explorer - 好的

  • Opera - 错误

  • 谷歌 - 错误

任何解决方案?

4

1 回答 1

1

您使用的代码存在问题,DateTime.Now用于modificationDate生成ETagLast-Modified标头。由于 chromium(Chrome 和 opera 背后的引擎)范围请求可以是有条件的(这意味着它们可以包含If-Match/ If-None-Match/ If-Modified-Since/ If-Unmodified-Since),它会导致412 Precondition Failed而不是200 OKor 206 Partial Content。如果基础内容没有改变,你应该使用相同的日期,就像这样。

[HttpGet]
public ActionResult StreamUploadedVideo()
{
    byte[] test = null;
    DateTime lastModificationDate = DateTime.MinValue;

    using (var ctx = new Entities())
    {
        var result = ctx.Table.Where(x => x.Field == 4).FirstOrDefault();

        test = result.Movie;
        lastModificationDate = result.LastModificationDate;
    }

    return new RangeFileContentResult(test, "video/mp4", "Name.mp4", lastModificationDate);
}
于 2017-04-07T21:05:26.763 回答