У меня есть простой сервер Python, который использует _1 _. Цель состоит не в том, чтобы показать видео на странице 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
составляет 50 МБ, но когда я смотрю на вкладку сети в Chrome или Firefox, он говорит, что ответ составляет всего 1 МБ. Есть ли причина, по которой не передается полный файл? Мне нужно добавить какой-то HTTP-заголовок, чтобы это работало?
РЕДАКТИРОВАТЬ:
Теперь это мой код:
server_address = ('', 8000)
handler_class = http.server.SimpleHTTPRequestHandler
httpd = http.server.HTTPServer(server_address, handler_class)
httpd.serve_forever()
Сейчас я использую do_GET
SimpleHTTPRequestHandler по умолчанию, но он все еще не работает (хотя теперь ответ составляет 40 МБ / 30 МБ вместо 1 МБ).
Когда я запрашиваю file.mp4
в Chrome, соединение сокета закрывается через ~ 7 секунд (~ 5 секунд в Firefox), что заставляет скрипт выдавать BrokenPipeError: [Errno 32] Broken pipe
, , потому что сервер все еще пытается записать оставшуюся часть видеофайла в закрытый сокет.
Итак, мой вопрос: как я могу заставить браузер загружать полный ответ, прежде чем он закроет сокет?
Дополнительная информация
Заголовки HTTP-ответа, отправленные клиенту:
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