历史记录:我们正在通过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设备兼容?
您对这个问题有任何解决方案,因为我们也面临同样的问题。请张贴任何人的解决方案