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

时间:2018-12-17 10:53:11

标签: javascript python django webrtc django-channels

我正在尝试创建用Django编写的面部检测Web应用程序。该应用程序以这种方式工作。

  1. 用户导航到网址
  2. 相机在客户端计算机上启动
  3. 然后将每个帧发送到服务器进行面部检测
  4. 经过处理的框架随后显示在网页上

我知道我不能使用opencv VideoCapture,因为它只能在服务器端使用。当我在网上阅读时,人们要求我使用javascript(尤其是webRTC)在客户端上开始直播。因此,我找到了这个 tutorial ,它说明了如何使用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>

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

DJANGO views.py

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

我使用的是Django通道,因为我想从客户端发送和接收数据可能需要使用Web套接字。而且我之所以使用python,是因为我计划向应用程序添加更多的功能,而使用python进行编码将比其他任何语言都容易。

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

预先感谢

2 个答案:

答案 0 :(得分:2)

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

这是您可以执行的操作。

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

让我知道是否需要更多帮助。

答案 1 :(得分:0)

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