簡體   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