使用HttpHandler和IIS 5.1在iPhone上播放Quicktime视频

Mun*_*Mun 5 asp.net video quicktime httphandler video-streaming

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

生产环境正在运行IIS 6.0并且存在同样的问题,尝试通过Mobile Safari在iPhone上播放视频会显示上述错误.

我检查了Http Headers,它们在两个服务器之间看起来几乎是相同的(除了一些,比如Server头,显然会有所不同),除了它们以不同的顺序出现,尽管我怀疑这个造成了这个问题.

根据Google网上论坛上的这个帖子,添加'Accept-Ranges:bytes'标题会有所帮助,尽管这对我们没有任何影响.我还添加了ETag标题,没有任何运气.

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

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);
Run Code Online (Sandbox Code Playgroud)

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

有没有其他人经历过这样的事情,并对我能做些什么来获得这个工作有任何想法?

Eri*_*Law 2

为什么将 Response.Buffer 设置为 true?

您不能简单地添加“Accept-Ranges”标头,除非您还确保服务器支持 HTTP Range 请求。如果客户端玩家要求支持范围请求并且服务器拒绝处理它们,那么该请求将被拒绝似乎是合乎逻辑的。

您可以尝试使用 Fiddler 作为反向代理,看看 iPhone 是否发出 Range 请求。 http://www.fiddler2.com/Fiddler/Help/ReverseProxy.asp