如何解决移动Safari发出多个视频请求
| 我正在设计一个iPad的Web应用程序,该应用程序在移动Safari中使用HTML5。我正在通过运行.NET Framework v2.0的IIS 7上承载的ASP.NET .ashx文件手动传输文件。 基本代码部分如下所示:// If we receive range header only transmit partial file
if (context.Request.Headers[\"Range\"] != null)
{
var fi = new FileInfo(filePath);
long fileSize = fi.Length;
// Read start/end index
string headerRange = context.Request.Headers[\"Range\"].Replace(\"bytes=\",\"\");
string[] range = headerRange.Split(\'-\');
int startIndex = Convert.ToInt32(range[0]);
int endIndex = Convert.ToInt32(range[1]);
// Add header Content-Range,Last-Modified
context.Response.StatusCode = (int)HttpStatusCode.PartialContent;
context.Response.AddHeader(HttpWorkerRequest.GetKnownResponseHeaderName(HttpWorkerRequest.HeaderContentRange),String.Format(\"bytes {0}-{1}/{2}\",startIndex,endIndex,fileSize));
context.Response.AddHeader(HttpWorkerRequest.GetKnownResponseHeaderName(HttpWorkerRequest.HeaderLastModified),String.Format(\"{0:r}\",fi.CreationTime));
long length = (endIndex - startIndex) + 1;
context.Response.TransmitFile(filePath,length);
}
else
context.Response.TransmitFile(filePath);
现在,令我无休止的是要求Safari似乎使用的协议。从代理通过提琴手的请求,我得到aprox 2MB文件的以下内容。
注意:当请求通过IIS 7直接提供的mp4文件时,协议和请求量是相同的
首先,它请求2个字节,这允许它读取\'Content-Range \'标头。
现在,它请求全部内容(?)
--
再次执行步骤1和2.。
--
现在只请求文件的一部分(???)
如果文件较大,则最后的步骤将更多。我已经测试了多达99个请求,其中每个请求包含均等分割的文件部分。这是有道理的,这是我所期望的。我无法理解的原因是为什么它在最后请求文件的不同部分之前对前2个字节发出2个初始请求,以及对整个文件发出2个请求。
正如我得出的结论,这取决于文件的长度以及用户是否观看足够长的时间,导致文件被下载2至3次。
任何人都可以理解这种行为,也许可以解释一下我可以做些什么来防止多次下载。谢谢。
解决方法
根据我对您的问题的评论,过去我也遇到过类似的问题。如果可以控制服务器(我没有),可以尝试做的一件事是禁用文件的gzip或身份编码。我认为,在第一次请求全部内容(列表中的第二个)时,它会要求使用gzip编码(压缩)的内容。也许您可以将IIS配置为不为gzip编码请求提供文件。
这是我对此主题的原始(未回答)问题:
https://stackoverflow.com/questions/4855485/mpmovieplayercontroller-not-playing-full-length-mp3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。