Vbscript HTTP_范围在视频搜索栏上不起作用

Vbscript HTTP_范围在视频搜索栏上不起作用,vbscript,asp-classic,video-streaming,http-range,Vbscript,Asp Classic,Video Streaming,Http Range,我正在尝试使用ASP/VBscript流式传输mp4文件。我使用ADODB.Stream来读取文件,并使用一些代码来检测用户请求的范围。视频已成功加载,但单击搜索栏时,什么也没有发生。我已在响应标题中设置了所有接受范围、内容范围和内容长度: HTML代码: <video controls> <source src="video.asp"> </video> video.asp filename ="test.mp4"

我正在尝试使用ASP/VBscript流式传输mp4文件。我使用
ADODB.Stream
来读取文件,并使用一些代码来检测用户请求的范围。视频已成功加载,但单击搜索栏时,什么也没有发生。我已在响应标题中设置了所有
接受范围
内容范围
内容长度

HTML代码:

<video controls>
<source src="video.asp">
</video>

video.asp

filename ="test.mp4"

Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = 1
objStream.Open
objStream.LoadFromFile(server.mappath(filename))
sizebyte=objStream.size

Response.ContentType = "video/mp4"
Response.AddHeader "Accept-Ranges", "0-" & sizebyte

'Checking if user requested a range (by clicking on seekbar)

if Request.ServerVariables("HTTP_RANGE")<>"" then
    'Cleaning startbyte from (bytes=) and (-)
    startbyte=replace(Request.ServerVariables("HTTP_RANGE"),"-","")
    startbyte=replace(startbyte,"bytes=","")

    Response.AddHeader "Content-Range", "bytes " & startbyte & "-" & sizebyte-1 & "/" & sizebyte
    response.AddHeader "Content-Length", (int(sizebyte) - int(startbyte))
else
    response.AddHeader "Content-Length", sizebyte
end if

do while not objStream.EOS
    response.binarywrite objStream.Read(1024000)
    Response.Flush
loop

objStream.Close
Set objStream = Nothing
Response.StatusCode = 206
filename=“test.mp4”
设置objStream=Server.CreateObject(“ADODB.Stream”)
objStream.Type=1
对象流。打开
objStream.LoadFromFile(server.mappath(文件名))
sizebyte=objStream.size
Response.ContentType=“视频/mp4”
Response.AddHeader“接受范围”、“0-”和大小字节
'检查用户是否请求范围(通过单击seekbar)
如果Request.ServerVariables(“HTTP_RANGE”)“”则
'正在从(字节=)和(-)清除起始字节
startbyte=replace(Request.ServerVariables(“HTTP_范围”),“-”,“”)
startbyte=替换(startbyte,“bytes=”,“”)
Response.AddHeader“内容范围”、“字节数”和startbyte&“-”&sizebyte-1&“/”&sizebyte
response.AddHeader“内容长度”(int(sizebyte)-int(startbyte))
其他的
response.AddHeader“内容长度”,sizebyte
如果结束
不使用objStream.EOS时执行
response.binarywrite objStream.Read(1024000)
回答,齐平
环
objStream,关闭
设置objStream=Nothing
Response.StatusCode=206

您的头看起来是正确的,但在完成所有这些之后,当客户端只希望响应头中定义的范围时,您尝试将整个文件分块流式传输。例如,将流移入10秒钟,查看
内容范围内传递的内容,并根据开始字节调整
ADODB.stream
位置。谢谢@Lankymart。我添加了
objStream.position=startbyte
,但还没有更改。好的,开始位置已经更正,但是您正在读取的字节量呢?它需要匹配
内容范围
标题所需的数量。@AliSheikhpour顾名思义
。LoadFromFile
将所有数据加载到内存中,即使您需要发送~1 MB的数据,所有视频文件(比如1 GB大小)都将被读取和写入内存。然后,在响应结束之前,不会释放分配的内存。这在各个方面都是对资源的巨大浪费。@AliSheikhpour如果目的是不损害视频URL和/或您在ASP Classic中所做的某些授权逻辑,我强烈建议您使用其他方法。如果您的web服务器支持的话,一个.NET HTTP模块/处理程序甚至一个PHP脚本都是更好的选择。