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

问题描述 投票:2回答:1

历史记录:我们正在通过http部分请求流提供.mp4视频。除了在iPad / iPhone上以外,它都可以正常工作,并且我们遵循了所有建议的步骤来为iOS设备编码.mp4文件,因此问题不在于文件本身。视频文件存储在Web服务器根目录之外,因此我们已编写代码以根据要求打开和流式传输视频。我们的测试使我们可以比较“流式”视频的标头(在IOS中有效,但不能在IOS中使用)并直接链接到文件(在所有情况下均有效,但不是可行的解决方案,因为我们需要将文件存储在Web之外根)。这是工作头和非工作头的比较。

直接链接到文件(适用于IOS):请求1状态码200 OK接受范围:字节内容长度:62086289内容类型:视频/ mp4日期:2015年7月26日,星期日,08:11:15 GMTETag:“ 60be3570ae7ed01:0”上次修改时间:2015年4月24日星期五,格林尼治标准时间伺服器:Microsoft-IIS / 7.0X-Powered-By:ASP.NET请求2状态码:206部分内容接受范围:字节内容长度:62086289内容范围:字节0-62086288 / 62086289内容类型:视频/ mp4日期:2015年7月26日,星期日,08:11:16 GMTETag:“ 60be3570ae7ed01:0”上次修改时间:2015年4月24日星期五,格林尼治标准时间伺服器:Microsoft-IIS / 7.0X-Powered-By:ASP.NET打开用于流传输的文件(不适用于IOS)请求1状态码200 OK接受范围:字节缓存控制:私有内容长度:62086289内容范围:字节0-62086289 / 62086289内容类型:视频/ mp4日期:Sun,2015年7月26日16:55:22 GMT伺服器:Microsoft-IIS / 7.0X-AspNet版本:4.0.30319X-Powered-By:ASP.NET请求2状态码200 OK接受范围:字节缓存控制:私有内容长度:62086289内容范围:字节0-62086289 / 62086289内容类型:视频/ mp4日期:Sun,2015年7月26日16:55:22 GMT伺服器:Microsoft-IIS / 7.0X-AspNet版本:4.0.30319X-Powered-By: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()

假设问题出在206响应标头上,我们如何修改上述代码以使其与IOS设备兼容?

http iis-7 video-streaming
1个回答
0
投票

您对这个问题有任何解决方案,因为我们也面临同样的问题。请张贴任何人的解决方案

© www.soinside.com 2019 - 2024. All rights reserved.