通过 Web 流式传输视频内容 API 2
Stream video content through Web API 2
我正在研究执行以下操作的最佳方法:
我有一堆闭路电视录像文件(MP4 文件,大小从 4MB 到 50MB 不等),我想通过门户网站提供这些文件。我的第一个想法是通过 Web API 流式传输文件,所以我找到了下面的 link:
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 文件,这背后有相当多的技术细节,所以这里是主题:
似乎要实现这一点,我需要将我的 MP4 文件编码为类似 WebM 的格式,但这会花费太多时间。 Icecast (http://icecast.org/),这是一个流媒体服务器,但我还没有尝试过,再次不确定这是否是我需要做的。
现在想起来,其实我不需要直播,我只需要让客户端通过浏览器播放视频文件,也许使用HTML5视频元素?问题是,我的应用程序也需要在 IOS 上工作,所以我认为这意味着我什至不能将我的 MP4 编码为 FLV 而只能使用 flash。
我真正需要的是将我所有的视频剪辑作为网页上的缩略图,如果客户点击其中一个,它就会尽快开始播放,而无需下载整个文件。想想 imdb.com 上的 "Watch Trailer" 功能。只需播放一个视频文件,这就是我想要的。我不需要直播,我认为 WebM 的用途是什么?同样,不确定。
将静态视频文件放在网络服务器上并在视频播放器中引用它们。您可以使用 HTML 的标准播放器 (
为了确保视频文件在开始播放之前不必完全下载,只需 运行 预先通过 qt-faststart。
两件事:
在您的 HTML 中使用 video element(这适用于浏览器和 iOS):
<video src="http://yoursite.com/api/Media/GetVideo?videoId=42" />
在您的 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;
}
我正在研究执行以下操作的最佳方法:
我有一堆闭路电视录像文件(MP4 文件,大小从 4MB 到 50MB 不等),我想通过门户网站提供这些文件。我的第一个想法是通过 Web API 流式传输文件,所以我找到了下面的 link:
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 文件,这背后有相当多的技术细节,所以这里是主题:
似乎要实现这一点,我需要将我的 MP4 文件编码为类似 WebM 的格式,但这会花费太多时间。 Icecast (http://icecast.org/),这是一个流媒体服务器,但我还没有尝试过,再次不确定这是否是我需要做的。
现在想起来,其实我不需要直播,我只需要让客户端通过浏览器播放视频文件,也许使用HTML5视频元素?问题是,我的应用程序也需要在 IOS 上工作,所以我认为这意味着我什至不能将我的 MP4 编码为 FLV 而只能使用 flash。
我真正需要的是将我所有的视频剪辑作为网页上的缩略图,如果客户点击其中一个,它就会尽快开始播放,而无需下载整个文件。想想 imdb.com 上的 "Watch Trailer" 功能。只需播放一个视频文件,这就是我想要的。我不需要直播,我认为 WebM 的用途是什么?同样,不确定。
将静态视频文件放在网络服务器上并在视频播放器中引用它们。您可以使用 HTML 的标准播放器 (
为了确保视频文件在开始播放之前不必完全下载,只需 运行 预先通过 qt-faststart。
两件事:
在您的 HTML 中使用 video element(这适用于浏览器和 iOS):
<video src="http://yoursite.com/api/Media/GetVideo?videoId=42" />
在您的 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;
}