7

我想将用户的网络摄像头(从浏览器)流式传输到服务器,我需要服务器能够操纵流(在该视频流上运行一些 C 算法)并向用户发送回信息。

我仔细研究了 WebRTC 和 MediaCapture,并在此处阅读了示例:https ://bitbucket.org/webrtc/codelab/overview 。

然而,这是为点对点视频聊天而设计的。据我了解,来自 getUserMedia 的 MediaStream 是通过 RTCPeerConnection (使用addStream)传输的;我想知道的是:我可以使用它,但在服务器上处理视频流吗?

在此先感谢您的帮助

4

1 回答 1

11

这是我设计的解决方案。我在这里为寻求相同信息的人发帖:-)

前端侧

我使用 WebRTC API:get webcam stream with getUserMedia, open RTCPeerConnection(以及RTCDataChannel负面信息)。流采用 DTLS 加密(强制),多媒体流使用 RTP 和 RTCP。视频采用 VP8 编码,音频采用 Opus 编码。

后端侧

在后端,这是复杂的部分。我能找到的最好的(迄今为止)替代方案是Janus Gateway。它处理了很多事情,例如 DTLS 握手、RTP / RTCP 解复用等。基本上,它在每次传输 RTP 数据包时触发一个事件。(RTP 数据包通常是 MTU 的大小,因此视频帧和 RTP 数据包之间没有1:1 的映射)。

然后我构建了一个 GStreamer(1.0 版)来解包 RTP 数据包,解码 VP8,确保视频缩放和色彩空间/格式转换以发出 BGR 矩阵(与 OpenCV 兼容)。AppSrc在管道的开头有一个组件,AppSink在结尾有一个。

剩下要做的事

我必须采取额外的措施来确保良好的可扩展性(线程、内存泄漏等),并找到一种干净有效的方式来使用我在这个程序中拥有的 C++ 库。

希望这可以帮助 !

于 2014-07-09T17:51:25.330 回答