使用自定义VideoCapturer的WebRTC本机(C++)无法通过main_thread_.CalledOnValidThread()检查

era*_*ran 7 c++ multithreading webrtc

我编译了WebRTC本机代码(C++),我正在使用peerconnection服务器和客户端示例(下src\talk\examples\peerconnection).特别是我试图更改客户端示例以流式传输自定义图像序列而不是网络摄像头视频.我使用类似于http://sourcey.com/webrtc-custom-opencv-video-capture/的东西 作为起点,其中自定义VideoCapturerFactory返回VideoCapturer可用于生成自定义图像帧的自定义.每当我有一个新的形象流,我叫SignalFrameCaptured(this, &frame)上了VideoCapturer.

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

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

我的理解是它与启动视频流的线程和推动这些单独帧的线程之间的不一致有关.似乎前者是内部WebRTC线程,而后者当前是应用程序的主线程.

事情在发布模式下工作,因为此线程检查已禁用.

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

Ily*_*lya 4

我自己偶然发现了这个问题,希望你现在已经解决了。一般来说,您应该SignalFrameCaptured在启动线程上调用 - 请参阅 Google 代码中的示例:

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

如您所见,这是最近的更改