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

20

我正在思考如何最好地实现以下操作:

我有一堆CCTV摄像头录制的文件(MP4格式,大小从4MB到50MB不等),我想通过Web门户使它们可用。我的第一个想法是通过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并仅使用Flash。

我真正需要的是将所有视频剪辑以缩略图形式显示在网页上。如果客户点击其中一个,它将立即开始播放,而无需下载整个文件。想象一下 imdb.com 上的“观看预告片”功能。只需播放视频文件,那就是我想要的。我不需要直播流,这是我认为 WebM 用于的吗?但我不确定。


你能在<video>标签中播放.mp4文件吗? - Freerey
2个回答

27

两件事:

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

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

只需按照此示例操作:

https://devblogs.microsoft.com/aspnet/asp-net-web-api-and-http-byte-range-support/

简而言之:

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

-3
将静态视频文件放置在Web服务器上,并在视频播放器中引用它们。您可以使用HTML的标准播放器(<video src="http://location/of/file.mp4">),也可以选择更花哨的东西,只需搜索“html video player”即可。
为确保视频文件在开始播放之前不必完全下载,请先通过 qt-faststart 运行它们。

你应该阅读问题标题,他肯定不会像你建议的那样有将文件复制到服务器的问题。 - Amirreza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接