通过Web API 2流式传输视频内容

FaN*_*NIX 16 c# ffmpeg video-streaming html5-video asp.net-web-api

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

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

http://www.strathweb.com/2013/01/asynchronously-streaming-video-with-asp-net-web-api/

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

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

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

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

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

Dun*_*unc 22

两件事情:

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

    <video src="http://yoursite.com/api/Media/GetVideo?videoId=42" /> 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 支持206 PARTIAL CONTENTWeb API代码中的请求.这对于流媒体和iOS支持都至关重要,并且在您发布的那个帖子中提到过.

请按照以下示例:

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;
}
Run Code Online (Sandbox Code Playgroud)