在c++服务器上处理用WebRTC (Socket.IO)捕获的视频数据

Processing video data captured with WebRTC (Socket.IO) in a C++ server

本文关键字:IO 数据 的视频 Socket 服务器 c++ 处理 WebRTC      更新时间:2023-10-16

我正在尝试找出做以下事情的最佳方法:

(A)在客户端PC上使用web浏览器(例如Chrome/Chromium)捕获视频帧。

(B)将它们发送到运行c++处理算法的服务器机器(例如基于opencv的突变松鼠检测例程)

(C)将处理结果发送回客户端PC中的浏览器以显示它们(实时的会很好,但总体延迟当然是预期的)。

到目前为止,我发现WebRTC非常适合做(A) (getUserMedia()等)和(B)。当涉及到向c++服务器发送数据时,我的问题就出现了。我一直在寻找WebRTC的基础知识(包括P2P通信的例子和Native c++ API文档),但我仍然没有关于如何开始构建我的服务器和从浏览器发送数据的线索。虽然我在Javascript方面的经验很少,但我已经在类似的场景中工作过(Javascript客户端<->带有webSockets的c++服务器),但我认为webRTC解决方案应该更容易实现。

在这种情况下使用webRTC是对的吗?我错过什么了吗?是否有我错过的教程或示例涵盖了我的场景?

从你的帖子中,我知道你需要一个WebRTC C客户端来建立C客户端和浏览器之间的RTCPeerConnection。之后,您可以处理流并使用另一个RTCPeerConnection将其返回给浏览器。

我通常不使用C/c++,但检查这个存储库:https://github.com/mozilla/webrtc-standalone,也许它会有用。

所以所有你想做的视频共享通过使用Webrtc, web sockets和c++服务器。

我们需要信令服务器(在你的例子中是c++)来建立浏览器之间的连接,建立连接后,浏览器共享视频没有服务器。

可以使用libwebsocket来建立浏览器之间的连接。

需要共享用户的浏览器、计算机的各种数据,如音视频信息、ip地址等。

您需要在每个浏览器上通过new RTCPeerConnection(configuration);创建peerConnection对象,并通过creatOffer()createAnswer()方法共享各种信息。

分享完相关信息后,浏览器之间就会建立连接,你的视频就会开始分享。

流程是什么?(给出一些总结)

在客户端,如何从c++服务器发送/获取请求。

1)在browser1browser2

创建套接字
var websocket = new WebSocket('ws://127.0.0.1:9000', 'echo');

2) 浏览器1(为浏览器2创建报价)

websocket.send("createOfferForVideo");
服务器

3)

收到请求后,服务器将响应广播给browser2。

printf("received data: %sn", (char *) in);

4) Browser 2(在收到offer后为browser1创建答案)

websocket.onmessage = function (message){
   if(messageAboutCreateOffer){
       websocket.send("createAnswerForVideo");
   }
}

这就是如何建立浏览器和视频之间的连接,开始共享。

查看更多关于的信息WEBRTC

<<p>图书馆strong> libwebsocket 与 c++ 的websockets

有用的例子有Example1Example2

web brtc的RTCPeer连接用于建立客户端与客户端之间的连接,中间不存在服务器来传输数据。对于客户端之间的这种连接,我们需要服务器进行NAT穿越(Stun和Turn服务器),但是一旦连接建立,数据可以在客户端到客户端之间双向发送,而无需存储在服务器中。

如果你想发送数据到服务器并处理它,必须使用websockets。

看看你是否真的需要使用c++来处理数据(不太可能),因为即使你可以很容易地实现它,这也会产生很大的开销,并破坏peer2peer的优势,例如,不增加服务器的负担。

在javascript中处理数据,并在客户端进行面部识别(以及更多),有许多库可以做到这一点。看看webrtc。IO模块,它们有rtc-video项目来处理数据。

可以使用插件在浏览器中使用c++(加载缓慢)。