asp.net - 使用 HttpHandler 和 IIS 5.1 在 iPhone 上播放 Quicktime 视频

标签 asp.net video httphandler video-streaming quicktime

我正在尝试使用 HttpHandler 从 ASP.NET Web 应用程序将 QuickTime 视频流式传输到 iPhone。从 IIS 5.1 (Windows XP) 托管 Web 应用程序时,视频播放器打开,然后显示错误“服务器配置不正确”。但是,当使用 IIS 7.5 (Windows 7) 时,视频播放正常。

生产环境运行的是IIS 6.0,也有同样的问题,通过Mobile Safari在iPhone上播放视频报错如上。

我检查了 Http header ,它们在两个服务器之间似乎几乎相同(除了少数几个,例如 Server header ,它们显然不同),除了它们以不同的顺序出现,但我怀疑这是导致问题的原因。

根据 Google 网上论坛上的 this thread,添加“Accept-Ranges: bytes” header 会有所帮助,尽管这对我们没有影响。我还添加了 ETag header ,但没有任何运气。

实际负责发送文件的代码如下所示:

Context.Response.Buffer = true;
Context.Response.ContentType = "video/x-m4v";

Context.Response.AppendHeader("Content-Disposition", "filename=\"Video.m4v\"");
Context.Response.AppendHeader("Content-Length", "23456789");

Context.Response.AppendHeader("Accept-Ranges", "bytes");
Context.Response.AppendHeader("ETag", GetETag(path));

Context.Response.TransmitFile(path);

上面传输文件的代码似乎运行正常,视频文件在所有桌面浏览器中以及在 Windows 7 上从 IIS 7.5 托管时都能正常播放。只有在尝试使用移动设备在 iPhone 上播放视频文件时,问题才会出现Safari 将上述代码与托管在 IIS 5.1 或 IIS 6.0 上的 ASP.NET Web 应用程序结合使用。

有没有其他人经历过这样的事情并且对我可以做些什么来使它工作有任何想法?

最佳答案

经过一番搜索,我找到了这篇文章 Range-Specific Requests in ASP.NET这描述了我遇到的确切问题。从该站点实现 RangeRequestHandlerBase 类(进行一些小的修改以适应我们现有的项目结构)似乎已经解决了问题,并且视频播放现在可以从 IIS5/6 正常运行。

@Eric - 我对你的回答投了赞成票,因为你的评论是对正确方向的插入。仅添加“Accept-Ranges” header 是不够的(尽管在 IIS7 中工作),并且需要修改 http 处理程序以处理范围请求并确保发送正确的数据。

关于asp.net - 使用 HttpHandler 和 IIS 5.1 在 iPhone 上播放 Quicktime 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1635209/

相关文章:

video - 如何在ffmpeg中调用atadenoise函数?

asp.net - ASP.Net延迟,如何确定是客户端还是服务器?

javascript - 如何在 Internet Explorer 6 中取消注册事件处理程序?

c# - 通过 ASP.NET WebMethod 在 JSON 中添加 Entity Framework 实体(一对多)

html - 如何以这种格式在 GridView 页脚和 ItemTemplate 中格式化数字 ("###,###.000")

ios - 转换为 HLS 时,Swift ReplayKit AVAssetWriter 视频音频不同步

audio - 计算 PTS 和 DTS 以在 ffmpeg 中编码新的视频和音频

asp.net - 缓存ASP.NET HTTP处理程序服务器和客户端的响应

c# - ASP.NET Core RC2 和 .NET 4.5.1 应用程序之间的共享 cookie 身份验证

asp.net - 如何在Asp.net MVC3的View中以dd/MM/yyyy格式显示日期