具有自定义 VideoCapturer 的 WebRTC 本机 (C++) 未通过 main_thread_.CalledOnValidThread() 检查

WebRTC native (C++) with custom VideoCapturer fails main_thread_.CalledOnValidThread() check

我编译了 WebRTC 本机代码 (C++),并且正在玩对等连接服务器和客户端示例(在 src\talk\examples\peerconnection 下)。特别是我正在尝试更改客户端示例以流式传输自定义图像序列而不是网络摄像头视频。我用了类似的东西 http://sourcey.com/webrtc-custom-opencv-video-capture/ 作为起点,我可以使用自定义 VideoCapturerFactory returns 和自定义 VideoCapturer 来生成自定义图像帧。每次我有新图像要流式传输时,我都会在 VideoCapturer 上调用 SignalFrameCaptured(this, &frame)

我的问题是,在调试模式下,我遇到了这个崩溃:

#
# Fatal error in e:\webrtc\webrtc checkout\src\webrtc\modules\video_coding\main\source\video_sender.cc, line 90
# Check failed: main_thread_.CalledOnValidThread()
#

我的理解是,这与启动视频流的线程与推送这些单独帧的线程之间的不一致有关。看起来好像前者是内部WebRTC线程,而后者目前是应用程序的主线程。

发布模式下一切正常,因为此线程检查已禁用。

知道如何正确解决这个问题吗?谢谢

我自己偶然发现的,我希望你现在已经解决了。通常,您应该在启动线程上调用 SignalFrameCaptured——参见 Google 代码中的示例:

https://chromium.googlesource.com/external/webrtc/+/edd8fefa9b31f903eefe1e9fcabb09a5d6fc1ad1/talk/app/webrtc/objc/avfoundationvideocapturer.mm#419(第 419 行)

如您所见,这是一个recent change