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) 和可能的解决方案:

  1. Safari 非常期待一个实际命名的 MP4。没有其他文件和 mime 类型的组合有效。其他浏览器首先选择 WEBM 文件,尤其是 Chrome。 source
  2. 在 iOS 7.0.2 之前,Safari 确实支持 HTML5 视频,必须安装 Quicktime Player 才能运行。 source
  3. 还有一些问题是,在 iOS 7 中,蒸汽无法正常工作,而本地文件可以。 source
  4. 出于某种原因,视频无法在 iOS 上播放,除非设置了 controls="true"source
  5. iOS 不支持 h.264 提供的所有配置文件。您必须仅使用基线配置文件对您的 h264 进行编码,以便它可以在 iphone/ipad 上播放。 Encoding with Miro Video Converter might help. source