WebApi 在移动设备上提供视频服务
WebApi Serving Videos on Mobile Devices
我正在使用 WebApi 在网站上提供视频服务。我已经在所有主要的桌面浏览器上对此进行了测试,并且 HTML5 视频标签按预期播放视频。但是,我无法在 iPhone (Mobile Safari) 上使用它。即使在按下播放按钮后,也不会调用 Get() 方法。
WEBAPI 代码
public HttpResponseMessage Get()
{
var path = System.Web.Hosting.HostingEnvironment.MapPath("~/Content/testbw2.mp4");
var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
if (Request.Headers.Range != null)
{
try
{
HttpResponseMessage partialResponse = Request.CreateResponse(HttpStatusCode.PartialContent);
partialResponse.Content = new ByteRangeStreamContent(stream, Request.Headers.Range, _mediaType);
return partialResponse;
}
catch (InvalidByteRangeException invalidByteRangeException)
{
return Request.CreateErrorResponse(invalidByteRangeException);
}
}
else
{
HttpResponseMessage fullResponse = Request.CreateResponse(HttpStatusCode.OK);
fullResponse.Content = new StreamContent(stream);
fullResponse.Content.Headers.ContentType = _mediaType;
return fullResponse;
}
}
HTML
<video controls>
<source src="http://localhost/WebApplication24/api/range" type="video/mp4">
Your browser does not support the video tag.
</video>
如果我将视频 src 更改为直接指向文件...
src="http://localhost/WebApplication24/Content/testbw2.mp4"
它有效,所以我知道这不是编码问题。
我做错了什么吗?如果 url 不以 .mp4
结尾,我感觉移动 safari 不会请求视频 src
以下是您的文件无法正常工作的可能原因 (some) 和可能的解决方案:
- Safari 非常期待一个实际命名的 MP4。没有其他文件和 mime 类型的组合有效。其他浏览器首先选择 WEBM 文件,尤其是 Chrome。 source
- 在 iOS 7.0.2 之前,Safari 确实支持 HTML5 视频,必须安装 Quicktime Player 才能运行。 source
- 还有一些问题是,在 iOS 7 中,蒸汽无法正常工作,而本地文件可以。 source
- 出于某种原因,视频无法在 iOS 上播放,除非设置了
controls="true"
。 source
- iOS 不支持 h.264 提供的所有配置文件。您必须仅使用基线配置文件对您的 h264 进行编码,以便它可以在 iphone/ipad 上播放。 Encoding with Miro Video Converter might help. source
我正在使用 WebApi 在网站上提供视频服务。我已经在所有主要的桌面浏览器上对此进行了测试,并且 HTML5 视频标签按预期播放视频。但是,我无法在 iPhone (Mobile Safari) 上使用它。即使在按下播放按钮后,也不会调用 Get() 方法。
WEBAPI 代码
public HttpResponseMessage Get()
{
var path = System.Web.Hosting.HostingEnvironment.MapPath("~/Content/testbw2.mp4");
var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
if (Request.Headers.Range != null)
{
try
{
HttpResponseMessage partialResponse = Request.CreateResponse(HttpStatusCode.PartialContent);
partialResponse.Content = new ByteRangeStreamContent(stream, Request.Headers.Range, _mediaType);
return partialResponse;
}
catch (InvalidByteRangeException invalidByteRangeException)
{
return Request.CreateErrorResponse(invalidByteRangeException);
}
}
else
{
HttpResponseMessage fullResponse = Request.CreateResponse(HttpStatusCode.OK);
fullResponse.Content = new StreamContent(stream);
fullResponse.Content.Headers.ContentType = _mediaType;
return fullResponse;
}
}
HTML
<video controls>
<source src="http://localhost/WebApplication24/api/range" type="video/mp4">
Your browser does not support the video tag.
</video>
如果我将视频 src 更改为直接指向文件...
src="http://localhost/WebApplication24/Content/testbw2.mp4"
它有效,所以我知道这不是编码问题。
我做错了什么吗?如果 url 不以 .mp4
结尾,我感觉移动 safari 不会请求视频 src以下是您的文件无法正常工作的可能原因 (some) 和可能的解决方案:
- Safari 非常期待一个实际命名的 MP4。没有其他文件和 mime 类型的组合有效。其他浏览器首先选择 WEBM 文件,尤其是 Chrome。 source
- 在 iOS 7.0.2 之前,Safari 确实支持 HTML5 视频,必须安装 Quicktime Player 才能运行。 source
- 还有一些问题是,在 iOS 7 中,蒸汽无法正常工作,而本地文件可以。 source
- 出于某种原因,视频无法在 iOS 上播放,除非设置了
controls="true"
。 source - iOS 不支持 h.264 提供的所有配置文件。您必须仅使用基线配置文件对您的 h264 进行编码,以便它可以在 iphone/ipad 上播放。 Encoding with Miro Video Converter might help. source