ConnectionResetError при воспроизведении видеофайла со значением Django, с FileField и HTML5 video tag - PullRequest
0 голосов
/ 19 марта 2020

У меня есть проект Django, где FileField применяется для хранения видеофайла (mp4).
Видеофайл фактически хранится в AmazonS3.

Видеофайл затем отображается в соответствующем HTML, хотя Django DetailView, с тегом HTML5.

<video width='50%' controls>
<source src="{{ object.video_sample.url }}" type="video/mp4">
    Your browser does not support the video tag.
</video>

Видео воспроизводится хорошо как локально (локальный ip) на развернутом сервере, так и на нем.
Тем не менее, я получаю это досадное сообщение об ошибке в терминале / журналах:

Исключительная ситуация при обработке запроса от (...)
Трассировка (последний последний вызов):
Файл "/usr/local/Cellar/python/3.7.6_1/Frameworks/Python .framework / Versions / 3.7 / lib / python3 .7 / socketserver.py ", строка 650, в process_request_thread self.finish_request (request, client_address)
Файл" /usr/local/Cellar/python/3.7.6_1 /Frameworks/Python.framework/Versions/3.7/lib/python3.7/socketserver.py ", строка 360, в файле finish_request self.RequestHandlerClass (запрос, адрес клиента, self)
Файл" / usr / local /Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socketserver.py ", строка 720, в init self.handle ()
Файл "... / env / lib / python3 .7 / site-packages / django / core / servers / basehttp.py", строка 171, в дескрипторе self.handle_one_request ()
File ". ../env /lib/python3.7/site-packages/django/core/servers/basehttp.py ", строка 179, в handle_one_request self.raw_requestline = self.rfile.readline (65537)
Файл" / usr / local /Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socket.py ", строка 589, в readinto, чтобы вернуть self._sock.recv_into (b)
ConnectionResetError: [Errno 54] Сброс соединения по пиру *

Я думаю, что это связано с тем, что пользователь покидает страницу HTML, пока видео еще открыто.

Знаете ли вы, как решить эту проблему?

BR,
Shahar

1 Ответ

0 голосов
/ 19 марта 2020

То, что вы видите, является ошибкой локального Django "сервера запуска", когда он прерывается при обслуживании большого файла. Django на самом деле не предназначен для обслуживания stati c файлов, поэтому вы действительно получаете эту ошибку, когда переходите на другую страницу и ваш браузер прерывает видеопоток.

Это не должно быть чем-то беспокоиться о производстве: ваше видео будет обслуживаться S3 или, предпочтительно, CDN, который вы добавляете к миксу. У них не будет проблем, когда поток прерывается (или, по крайней мере, вам не придется беспокоиться об этом, и вы не увидите этого в своих журналах). Django в этом случае вообще не участвует.

Если это мешает вашему процессу разработки, вы можете захотеть подавить эти ошибки в журнале разработки, добавив фильтр в ваши журналы. (только в разработке).

...