【问题标题】:WebApi Serving Videos on Mobile DevicesWebApi 在移动设备上提供视频
【发布时间】:2015-09-01 01:40:54
【问题描述】:

我正在使用 WebApi 在网站上提供视频。我已经在所有主要的桌面浏览器上对此进行了测试,并且 HTML5 Video 标签可以按预期播放视频。但是,我无法让它在 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

【问题讨论】:

    标签: ios html5-video mobile-safari asp.net-web-api2


    【解决方案1】:

    以下是您的文件无法工作的可能原因(某些)以及可能的解决方案:

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

    【讨论】:

    • 感谢您的回答,结果证明它是第一名。我现在必须用 .mp4 附加我的所有服务调用,即使它没有返回静态文件 grrrr
    • 知道为什么 safari 会这样做吗?其他浏览器使用 type 属性和 content-type 标头。
    • 因为它是 ios 并且他们相信他们所做的任何事情都是正确的。 不问任何问题。我还没有看到解决这个问题的方法。如果我发现我会更新我的答案。
    猜你喜欢
    • 1970-01-01
    • 2020-10-26
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    相关资源
    最近更新 更多