3

我正在尝试为使用 HTML5 标记显示的视频提供少量内容保护。

我试图通过使用一次性令牌从我的 C# .NET 应用程序提供视频来做到这一点。

我已经成功交付了视频(它可以播放),但我无法使用播放器的导航栏。也就是我不能点击进度条来改变玩家的当前位置。位置指示器只是弹回原始位置并恢复。此外,一旦视频播放完毕,如果不重新加载页面,就无法再次播放。

我已禁用令牌的“一次性”部分。所以问题不是一次性使用。这与我提供文件的方式有关。我尝试返回 C# File 对象和 FileStream 对象作为结果,效果相同。

任何的意见都将会有帮助。

//这里是视图

@{ 指导 aGuid;

string Guidstr;

aGuid = Guid.NewGuid();

Guidstr = aGuid.ToString();

Session[Guidstr] =@"Chrome_ImF.mp4" ;

}

///这里是控制器代码

    public FileResult File(string id)
    {
        string moviename;
        moviename =  (Session[id] as string);
        moviename = @"C:\dev\asp\hercules\hercules\Content\samples\" + moviename;
        //Session.Remove(id);

        return File(moviename, "video/mp4");
    }



    public FileStreamResult Stream(string id)
    {
        string moviename;
        moviename = Session[ id ] as string;
       // Session.Remove(id);

        FileStream fs = new FileStream(moviename, FileMode.Open, FileAccess.Read);
        fs.Seek(0, SeekOrigin.Begin);
        return File(fs,"video/mp4");


    }
4

1 回答 1

3

我最终使用 Codeplex (http://mvcresumingactions.codeplex.com/) 的 MVCResumingActions 库解决了这个问题。

似乎视频播放器希望能够对视频发出特定范围的请求(为了在资源完全加载之前向前搜索)。如果您的回复没有正确表明您支持该功能,那么所有导航基本上都会被烤掉。

所以我开始走这条路,并找到了一些关于这个话题的好资源。

http://dotnetslackers.com/articles/aspnet/Range-Specific-Requests-in-ASP-NET.aspx http://www.devx.com/dotnet/Article/22533/1954?pf=true

但 MVCResumingActions 项目提供了最快和最简单的路径。

该项目本身没有文档,所以这就是我所做的

1) 如果您的 IDE 中没有安装 NuGet,请安装它。

2) 从包管理控制台安装包

PM> 安装包 MVC.ResumingActionResults

3)在您的控制器中,添加此 using 子句

using VikingErik.Mvc.ResumingActionResults;

4)然后定义您的操作方法。

将其声明为 ResumingActionResults 提供的类型之一。我不知道如何使用提供的所有类型,但在我的情况下,我想流式传输视频,所以我选择了“ResumingFileStreamResult”

这是我的测试操作,位于我自己的“StreamController.cs”文件中。我把它命名为“维京人”以纪念埃里克

public ResumingFileStreamResult Viking (string file)

 {

  moviename = Server.MapPath("~/Content/samples/" + file);

  FileStream fs = new FileStream(moviename, FileMode.Open, FileAccess.Read);

  ResumingFileStreamResult fsr = new ResumingFileStreamResult(fs,"video/mp4");

  return fsr;

}

以下是我放入视图文件的内容:

<script src="http://api.html5media.info/1.1.5/html5media.min.js"></script>
 <video controls preload>
   <source src="/Stream/Viking?file=Chrome_ImF.mp4" />
 </video>

瞧,它就像一个魅力。

于 2012-07-03T02:32:15.867 回答