gpt4 book ai didi

python - 浏览器在响应完全下载之前关闭套接字

转载 作者:太空狗 更新时间:2023-10-30 00:10:10 24 4
gpt4 key购买 nike

我有一个使用 http.server 的简单 Python 服务器.目的不是在html页面中显示视频,也不是下载视频文件,而是直接在浏览器中显示视频。这是我目前所拥有的:

import http.server

class SuperHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
path = self.path
encodedFilePath = 'file.mp4'

with open(encodedFilePath, 'rb') as videoFile:
self.send_response(200)
self.send_header('Content-type', 'video/mp4')
self.end_headers()
self.wfile.write(videoFile.read())
print('File sent: ' + videoFile.name)

server_address = ('', 8000)
handler_class = SuperHandler
httpd = http.server.HTTPServer(server_address, handler_class)
httpd.serve_forever()

我遇到的问题是响应不包含完整视频。 file.mp4 是 50MB,但是当我查看 Chrome 或 Firefox 的网络选项卡时,它说响应只有 1MB。是否有未传输完整文件的原因?我是否需要添加某种 HTTP header 才能使其正常工作?

编辑:

现在这是我的代码:

server_address = ('', 8000)
handler_class = http.server.SimpleHTTPRequestHandler
httpd = http.server.HTTPServer(server_address, handler_class)

httpd.serve_forever()

我现在正在使用默认的 SimpleHTTPRequestHandler 的 do_GET,但它仍然无法正常工作(虽然现在响应是 40MB/30MB 而不是 1MB)。

当我在 Chrome 上请求 file.mp4 时,套接字连接在约 7 秒后关闭(在 Firefox 上约 5 秒),这使得脚本抛出一个 BrokenPipeError: [Errno 32 ] 破管, because the server is still trying to write the rest of the video file on a closed socket .

所以我的问题是:如何让浏览器在关闭套接字之前下载完整的响应?

附加信息

发送给客户端的 HTTP 响应 header :

HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.5.0
Date: Mon, 28 Dec 2015 02:36:39 GMT
Content-type: video/mp4
Content-Length: 53038876
Last-Modified: Fri, 25 Dec 2015 02:09:52 GMT

最佳答案

事实证明,我使用的视频文件已损坏(可能有一些丢帧或类似情况)。我用多个其他 .mp4 进行了测试,效果非常好。

就响应的 http header 而言,播放视频文件(或更准确地流式传输视频文件,如@hrunting 所指)真正需要的是:

HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.5.0
Date: Sat, 02 Jan 2016 02:45:34 GMT
Content-type: video/mp4
Content-Length: 33455269
Last-Modified: Sat, 02 Jan 2016 02:45:27 GMT

我认为即使是 ServerDateLast-Modified header 也不是强制性的(它们由 SimpleHTTPRequestHandler 自动发送) .

正如@qarma 和@hrunting 所指出的,如果您想让用户跳转到视频中的特定时间,您应该支持Range header 。支持 Range header 是个好主意,因为它由 Chrome 默认发送。

关于python - 浏览器在响应完全下载之前关闭套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34459494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com