繁体   English   中英

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

[英]Sending webRTC video stream to server with django channels

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

  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>

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

DJANGO views.py

def index(request):
    return render(request, 'cwrtc/index.html', {})

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

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

提前致谢

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

这就是你如何做到的。

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

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

我认为这不是通过服务器流式传输视频的好方法。 为什么当 webrtc 直接提供 p2p 连接时你甚至想将视频帧发送到服务器。你需要一个套接字库来管理用户并连接它们。你可以将随机生成的 roo_id 传递给 django 通道以创建房间。如果你,我会建议你擅长 nodejs 去 socket.io 库,因为在带有 webrtc 的 django 频道上可用的资源和文档非常少。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM