在 WebRTC 会话中拦截视频帧以进行效果处理?

Intercept video frames in a WebRTC session for effects processing?

我有一个 C#/C++ 应用程序可以从连接到用户 PC 的摄像头捕获视频流。然后,它使用英特尔实感 SDK 进行用户细分,以自动移除用户的背景。我需要知道的是如何 将自己插入视频传输链中,这样我就可以获取每一帧,对其进行处理,然后将其发送到 WebRTC 模块。

整个期望的效果是让用户看起来像是叠加在网页上。请注意,我需要支持的唯一浏览器是 Chrome,因为我是 运行 嵌入式浏览器中的 Chromium DLL,感谢 CefSharp 项目。

我想不通的是将自己放入视频中,以便在有新视频帧可用时收到通知,修改它,然后将其传递给 Chromium 中的 WebRTC。我下载了 Chromium 源代码,但在任何地方都找不到关键字 getUserMedia。

由于您使用的是 Chromium 端口,这意味着您应该可以通过 WebKit 访问 WebGL 调用。

与其在应用程序端执行此操作,不如尝试在您的 HTML 上执行。

因为问题是 "Intercept video frames in a WebRTC session for effects processing?" 我认为这个 post 和它在 github 上的演示完全符合您的要求:

Using WebGL to apply effects to WebRTC video frames

并且由于 WebGL 着色器基本上是用 C++ (GLSL) 编写的,因此您可以轻松地创建一个 fragment/pixel 着色器来移除背景。很可能已经有一个了,值得为那个尝试google。

此外,如果您担心性能问题,那么这样做会同样快,因为着色器是在 GPU 之外工作的;即使在手机上。