Django web 使用 jetson tx2 作为服务器显示来自网络摄像头的流

Django web displaying stream from webcam using jetson tx2 as a server

我正在编写网络应用程序,我想:

  1. 显示来自网络摄像头的本地流 - 这意味着,我想从服务器流式传输视频(我不想打开客户端的网络摄像头)
  2. 阅读二维码并将其列在文本框中

这两个已经实现了但是!我遇到了一些意想不到的行为。我所描述的功能运行良好,但仅限于本地主机。我想部署它,以便可以通过不同的计算机访问它(它是为了在机器人上使用)。

所以要描述我的架构:我使用 Jetson TX2 作为服务器(这里连接了网络摄像头)。我正在使用 Django 网络框架、django-channels、daphne 作为网络服务器和 ngingx 作为代理。我在 supervisor 运行ning daphne 和后台进程。

我正在使用 worker(后台进程)从网络摄像头捕获帧并通过 redis 将其发送到网络后端。

所以当我 运行 它在本地主机上时,一切都按预期工作。当我将 Debug 设置为 FALSE 并将 Jetson 的 IP 添加到 ALLOWED_HOSTS 并尝试从不同的计算机访问网络时,会发生这种情况: 我可以看到,网络摄像头已被访问,因为网络摄像头灯亮了。我在网络摄像头前放了一些 QR 码,代码出现在网络上的文本框中!但是视频不存在(当 ALLOWED_HOSTS 包含本地主机视频时)。收集相机帧的后台进程输出出现以下错误:

libv4l2: error setting pixformat: Device or resource busy
OpenCV Error: Unspecified error (GStreamer: unable to start pipeline)
in cvCaptureFromCAM_GStreamer, file /home/nvidia/prototype/opencv/opencv-3.4.0/modules/videoio/$
VIDEOIO(cvCreateCapture_GStreamer (CV_CAP_GSTREAMER_FILE, filename)):raised OpenCV exception:
/home/nvidia/toyota_prototype/opencv/opencv-3.4.0/modules/videoio  /src/cap_gstreamer.cpp:890: error: (-2)$
in function cvCaptureFromCAM_GStreamer

我不会post这里的整个代码,因为我不知道问题到底出在哪里。有谁知道问题出在哪里?

感谢您的帮助!

所以,我想通了。在我的 html 模板中,我有一行链接到流地址:

 <img src="http://127.0.0.1:8000/webcam-stream">

我想,现在你们都知道问题出在哪里了。我需要将 IP 更改为主机地址。