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

时间:2015-08-01 21:58:52

标签: c# asp.net-web-api ffmpeg video-streaming html5-video

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

我有一堆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文件,这背后有相当多的技术细节,所以这里是线程:

Best approach to real time http streaming to HTML5 video client

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

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

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

2 个答案:

答案 0 :(得分:22)

两件事:

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

    <video src="http://yoursite.com/api/Media/GetVideo?videoId=42" /> 
    
  2. 支持Web API代码中的206 PARTIAL CONTENT个请求。对于流媒体和iOS支持,这是至关重要,并且在您发布的那个帖子中提到。

  3. 请按照以下示例:

    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;
    }
    

答案 1 :(得分:-1)

将静态视频文件放在Web服务器上,并在视频播放器中引用它们。您可以使用HTML的标准播放器(&lt; video src =“http://location/of/file.mp4”&gt;)或寻找更高档的东西 - 只需谷歌“html视频播放器”。

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