使用 Django 频道将 webRTC 视频流发送到服务器

Sas*_*ank 5 javascript python django webrtc django-channels

我正在尝试创建一个用 django 编写的人脸检测 Web 应用程序。该应用程序以这种方式工作。

  1. 用户导航到 url
  2. 摄像头在客户端机器上启动
  3. 然后将每一帧发送到服务器进行人脸检测
  4. 处理后的框架然后显示在网页上

我知道我不能使用 opencv VideoCapture 因为它只能在服务器端工作。当我在网上阅读时,人们要求我使用 javascript,特别是 webRTC 在客户端开始直播。所以我找到了这个教程,它解释了如何使用 javascript 在客户端机器上启动网络摄像头。

现在我的问题是如何将客户端机器上的 javascript 的每一帧发送到服务器端的 opencv python?

所有这一切都应该实时发生。所以我无法保存实时视频,然后在保存的视频上运行 python 代码。

一些站点要求我使用 AJAX 将数据发送到服务器端,但我不确定如何定位要在 javascript 代码中发送的每个帧。

到目前为止,这是我的代码

使用 webRTC 访问客户端摄像头

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta content="stuff, to, help, search, engines, not" name="keywords">
  <meta content="What this page is about." name="description">
  <meta content="Display Webcam Stream" name="title">
  <title>Display Webcam Stream</title>

  <style>
    #container {
      margin: 0px auto;
      width: 500px;
      height: 375px;
      border: 10px #333 solid;
    }

    #videoElement {
      width: 500px;
      height: 375px;
      background-color: #666;
    }
  </style>
</head>

<body>
  <div id="container">
    <video autoplay="true" id="videoElement">

    </video>
  </div>
  <script>
    var video = document.querySelector("#videoElement");

    if (navigator.mediaDevices.getUserMedia) {
      navigator.mediaDevices.getUserMedia({
          video: true
        })
        .then(function(stream) {
          video.srcObject = stream;
          // myJson = JSON.stringify(stream)
        })
        .catch(function(err0r) {
          console.log("Something went wrong!");
        });
    }

    console.log(video)
  </script>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

在这段代码中,我如何从网络摄像头访问每一帧。我试图打印videowith的内容,console.log但这没有帮助。

DJANGO 视图.py

def index(request):
    return render(request, 'cwrtc/index.html', {})
Run Code Online (Sandbox Code Playgroud)

我正在使用 django 通道,因为我想,要从客户端发送和接收数据,我可能必须使用 Web 套接字。我使用 python 是因为我计划向应用程序添加更多功能,这些功能比任何其他语言都更容易使用 python 进行编码。

是否可以将视频流从 javascript 发送到 python?

提前致谢

yum*_*oji 5

是的,您可以将视频从 javascript 发送到服务器上的 python,但是,您不能使用 Ajax 或 Web 套接字发送帧。

您可以这样做。

  1. 使用 javascript 在客户端创建 WebRTC 会话
  2. 使用本机代码在服务器端运行 webrtc。
  3. 现在通过交换 SDP 在客户端和服务器之间创建 p2p 会话。请注意,您需要在服务器端安装视频捕获设备,否则将不会有视频会话。如果没有,您可以在服务器端使用假视频捕获器。
  4. 然后,您可以将 python 代码与服务器上运行的 webrtc 实例连接起来。

如果您需要更多帮助,请告诉我。