通过Web API 2流式传输video内容

我正在研究实现以下目标的最佳方法:

我有一堆闭路电视录像文件(MP4文件,大小从4MB到50MB不等),我想通过门户网站提供这些文件。 我的第一个想法是通过Web API流式传输文件,所以我找到了以下链接:

Asynchronously streaming video with ASP.NET Web API

在实现示例项目之后,我意识到该示例基于Web API 1,而不是Web API 2.1,这正是我正在使用的。 在做了一些研究之后,我得到了用WebAPI 2.1编译的代码。 然后我意识到,如果我想做流媒体我不能使用MP4文件,这背后有相当多的技术细节,所以这里是线程:

实时HTTP流式传输到HTML5video客户端的最佳方法

似乎这个工作我需要将我的MP4文件编码为像WebM这样的东西,但这需要花费太多时间。 Icecast( http://icecast.org/ ),这是一个流媒体服务器,但我还没有尝试过,再次不确定这是否是我需要做的。

现在我想到了,我实际上不需要直播,我只需要允许客户端通过他们的浏览器播放video文件,也许使用HTML5video元素? 问题是,我的应用程序也需要在IOS上工作,所以我认为这意味着我甚至无法将我的MP4编码为FLV并只使用闪存。

我真正需要的是将所有video剪辑作为缩略图放在网页上,如果客户点击一个,它就会开始尽快播放,而不必下载整个文件。 想想imdb.com上的“Watch Trailer”function。 只需播放video文件,这就是我想要的。 我不需要LIVE流媒体,这就是我认为WebM的用途? 再次,不确定。

两件事情:

  1. 在HTML中使用video元素 (适用于浏览器和iOS):

     
  2. 在您的Web API代码中支持206 PARTIAL CONTENT请求。 这对于流媒体和iOS支持都至关重要 ,并且在您发布的那个post中提到过。

请按照以下示例:

http://blogs.msdn.com/b/webdev/archive/2012/11/23/asp-net-web-api-and-http-byte-range-support.aspx

简而言之:

 if (Request.Headers.Range != null) { // Return part of the video HttpResponseMessage partialResponse = Request.CreateResponse(HttpStatusCode.PartialContent); partialResponse.Content = new ByteRangeStreamContent(stream, Request.Headers.Range, mediaType); return partialResponse; } else { // Return complete video HttpResponseMessage fullResponse = Request.CreateResponse(HttpStatusCode.OK); fullResponse.Content = new StreamContent(stream); fullResponse.Content.Headers.ContentType = mediaType; return fullResponse; } 

将静态video文件放在Web服务器上,并在video播放器中引用它们。 您可以使用HTML的标准播放器(

为了确保video文件在开始播放之前不必完全下载,只需通过qt-faststart预先运行它们。