为什么服务器发送的是http 200响应而不是预期的206响应?

时间:2015-07-26 17:26:42

标签: http iis-7 video-streaming

历史:
我们通过http部分请求流传输.mp4视频。它在iPad / iPhone上工作正常,我们已经遵循了为iOS设备编码.mp4文件的所有推荐程序,因此问题不在于文件本身。视频文件存储在Web服务器的根目录之外,因此我们编写了代码以根据请求打开和流式传输视频。我们的测试使我们达到了比较我们的“流式”视频(工作但不在IOS中)和直接链接到文件的标题(在所有实例中工作但不是可能的解决方案,因为我们需要在Web之外存储文件)根)。以下是工作与非工作标题的比较。

直接链接到文件(为IOS工作):
请求1
状态代码200 OK
接受-范围:字节
内容长度:62086289
内容类型:视频/ MP4
日期:2015年7月26日星期日08:11:15 GMT
ETag的: “60be3570ae7ed01:0”
最后修改时间:2015年4月24日星期五16:48:06 GMT
服务器:Microsoft-IIS / 7.0
X-已启动通过:ASP.NET


请求2
状态代码:206部分内容
接受-范围:字节
内容长度:62086289
内容范围:字节0-62086288 / 62086289
内容类型:视频/ MP4
日期:2015年7月26日星期日08:11:16 GMT
ETag的: “60be3570ae7ed01:0”
最后修改时间:2015年4月24日星期五16:48:06 GMT
服务器:Microsoft-IIS / 7.0
X-已启动通过:ASP.NET



打开流媒体文件(不适用于IOS)
请求1
状态代码200 OK
接受-范围:字节
缓存控制:私人
内容长度:62086289
内容范围:字节0-62086289 / 62086289
内容类型:视频/ MP4
日期:2015年7月26日星期日16:55:22 GMT
服务器:Microsoft-IIS / 7.0
X-ASPNET-版本:4.0.30319
X-已启动通过:ASP.NET


请求2
状态代码200 OK
接受-范围:字节
缓存控制:私人
内容长度:62086289
内容范围:字节0-62086289 / 62086289
内容类型:视频/ MP4
日期:2015年7月26日星期日16:55:22 GMT
服务器:Microsoft-IIS / 7.0
X-ASPNET-版本:4.0.30319
X-已启动通过:ASP.NET


请注意,非工作版本的第二个请求保留在状态码200,并且不会更改为206.这是我们关注的可能是问题,但是处于亏损状态。下面是打开文件并发送到服务器的代码。请注意我们设置标题的方式。

 Dim iStream As System.IO.Stream

            ' Buffer to read 10K bytes in chunk:
            Dim buffer(10000) As Byte
            ' Length of the file:
            Dim length As Integer=0
            ' Total bytes to read:
            Dim dataToRead As Long=0

            Dim isPartialFile As Boolean = False
            Dim totalDelivered As Long = 0
            Dim totalFileSize As Long = 0
            Dim filename As String

 filename = fileID & file.Extension

 iStream = New System.IO.FileStream(filePath, System.IO.FileMode.Open,IO.FileAccess.Read, IO.FileShare.Read)
                ' Total bytes to read:
                dataToRead = iStream.Length
                totalFileSize = iStream.Length

 Response.ContentType = "video/mp4"
 Response.AddHeader("Accept-Ranges", "bytes")
 Response.AddHeader("Content-Range", "bytes 0-" + totalFileSize.ToString + "/" + totalFileSize.ToString)
 Response.AddHeader("Content-Length", totalFileSize.ToString)

' Read the bytes.
                While dataToRead > 0
                    ' Verify that the client is connected.
                    If Response.IsClientConnected Then
                        ' Read the data in buffer
                        length = iStream.Read(buffer, 0, 10000)

                        ' Write the data to the current output stream.
                        Response.OutputStream.Write(buffer, 0, length)

                        ' Flush the data to the HTML output.
                        Response.Flush()

                        ReDim buffer(10000) ' Clear the buffer
                        dataToRead = dataToRead - length
                    Else
                        isPartialFile = True
                        'record the data read in the database HERE (partial file)
                        'totalDelivered = totalFileSize - dataToRead

                        'prevent infinite loop if user disconnects
                        dataToRead = -1

                    End If
                End While


                iStream.Close()
                Response.End()

我们如何修改上述代码以使其与IOS设备一起使用,假设问题与206响应头有关?

0 个答案:

没有答案