我对WebRTC API(尤其是RTCPeerConnection)有些麻烦。
我已成功设法在两个浏览器之间进行视频通话:我知道如何使用getUserMedia获取网络摄像头流,我知道如何联系STUN服务器并对' onicecandidate'做出反应。事件,我知道如何创建报价(和其他同行的答案)并发送sdp。
我使用WebSockets作为信令通道。
我需要做的是使用C / C ++算法处理视频流,所以我正在寻找一种在C / C ++中接收RTCPeerConnection并在C / C ++中接收的呼叫的方法。
我一直在尝试构建和测试Google的libjigle库(虽然尚未取得成功(我在Archlinux上))。但即使我成功了,也不知道如何为我自己的案例重复使用代码。
到目前为止我做了什么:
- 我了解STUN服务器如何工作,ICE候选人和SDP会话以及如何在javascript中创建/处理
- 我设法在两个浏览器之间进行点对点调用(甚至在PC和我的Android之间,这非常有效)
- 我设法使用libwebsockets创建一个简单的信令服务器,在其中我成功接收了浏览器的ICE候选者和sdp消息。
我在找什么:
- 在C / C ++中接收/解析/处理的方法浏览器发送的内容即 ICE候选人,sdp,offer
- 创建答案的方法(浏览器始终是发起人)并接收/处理网络摄像头流。
我尝试过:
- 我试图让网络摄像头在HTML5元素中播放,并定期(~33ms)在a中绘制帧,调用getImageData()并使用纯WebSocket发送(R,G,B,alpha)数组连接。但即使对于100x100像素的灰度帧(因此为10kB),我只能通过~600 kb / s的上传流实现~7fps。 这就是我想使用适用于UDP的RTCPeerConnection
的原因
我的约束:
- 我需要在C或C ++中运行本机应用程序,因为我有用C ++实现的图像/视频处理算法(我见过很多基于Node.js的服务器,但我可以&#t; t有这个:无法调用我的算法)
- 我希望能够以大约30 fps的速度运行,这样对于用户来说这是相对流畅的。
- 我无法使用Flash或Silverlight:我需要为客户端保留HTML5 / javascript
结论:
- 我失败的地方是处理ICE候选人,SDP会话和C / C ++中的联系STUN服务器的所有内容,因为与javascript不同,没有事件(' onicecandidates',' onaddstream'等等)。
提前感谢您的帮助!