【问题标题】:ConnectionResetError while playing a video file over Django, with FileField and HTML5 video tag通过 Django 播放视频文件时出现 ConnectionResetError,带有 FileField 和 HTML5 视频标签
【发布时间】:2020-06-30 10:53:18
【问题描述】:

我有一个 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(request, client_address, self)
init 中的文件“/usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socketserver.py”,第 720 行 self.handle()
文件“.../env/lib/python3.7/site-packages/django/core/servers/basehttp.py”,第 171 行,在句柄中 self.handle_one_request()
文件“.../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 行,读入 return self._sock.recv_into(b)
ConnectionResetError: [Errno 54] Connection reset by peer*

我认为这与用户在视频仍处于打开状态时离开 HTML 页面这一事实有关。

你知道如何解决吗?

BR,
沙哈尔

【问题讨论】:

  • 这个错误信息是本地的,对吧,在开发模式下?如果视频是从 S3 提供的,那么您将不会收到此错误,因为 S3 会看到连接中断,而不是您的 Django 实例。
  • 是的,正确的。你知道如何克服它吗?
  • 没有理由克服它,这很正常。在开发中,您的视频由 Django (runserver) 提供,但 Django 并不是真正为提供静态文件而设计的,尤其是不是长视频流。在生产中,您的视频将由 S3(或 CDN,如果您将其添加到混合中)提供,您不会看到此问题。
  • 太好了,明白了,非常感谢!

标签: html django video connection filefield


【解决方案1】:

您看到的是本地 Django“运行服务器”在提供大文件时中断时出现的错误。 Django 并不是真正为提供静态文件而设计的,因此当您导航到不同的页面并且您的浏览器中断视频流时确实会出现此错误。

这在制作中不应该担心:您的视频将由 S3 或最好是您添加到组合中的 CDN 提供。当流被中断时,那些不会有问题(或者至少你不必担心它并且不会在你的日志中看到这个)。在这种情况下,Django 根本没有涉及。

如果这阻碍了您的开发流程,您可能希望通过 adding a filter 将这些错误从您的开发日志中抑制到您的日志中(仅在开发中)。

【讨论】:

    猜你喜欢
    • 2012-11-11
    • 2014-01-24
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    相关资源
    最近更新 更多