我正在研究实现以下目标的最佳方法:
我有一堆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的用途?再一次,不确定。
答案 0 :(得分:22)
两件事:
在HTML中使用video element(适用于浏览器和iOS):
<video src="http://yoursite.com/api/Media/GetVideo?videoId=42" />
支持Web API代码中的206 PARTIAL CONTENT
个请求。对于流媒体和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;
}
答案 1 :(得分:-1)
将静态视频文件放在Web服务器上,并在视频播放器中引用它们。您可以使用HTML的标准播放器(&lt; video src =“http://location/of/file.mp4”&gt;)或寻找更高档的东西 - 只需谷歌“html视频播放器”。
为了确保视频文件在开始播放之前无需完全下载,只需通过qt-faststart预先运行它们。