移动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, startIndex, length);
}
else
context.Response.TransmitFile(filePath);
现在,令我无休止的是要求Safari似乎使用的协议。从代理通过提琴手的请求,我得到aprox 2MB文件的以下内容。
注意:当请求通过IIS 7直接提供的mp4文件时,协议和请求量是相同的
首先,它请求2个字节,这允许它读取\'Content-Range \'标头。
现在,它请求全部内容(?)
--
再次执行步骤1和2.。
--
现在只请求文件的一部分(???)
如果文件较大,则最后的步骤将更多。我已经测试了多达99个请求,其中每个请求包含均等分割的文件部分。这是有道理的,这是我所期望的。我无法理解的原因是为什么它在最后请求文件的不同部分之前对前2个字节发出2个初始请求,以及对整个文件发出2个请求。
正如我得出的结论,这取决于文件的长度以及用户是否观看足够长的时间,导致文件被下载2至3次。
任何人都可以理解这种行为,也许可以解释一下我可以做些什么来防止多次下载。谢谢。
没有找到相关结果
已邀请:
1 个回复
镶骄册筷