带有自定义videoccapture的WebRTC原生(c++)无法通过main_thread_calledonvali

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

本文关键字:main calledonvali thread c++ videoccapture 自定义 WebRTC 原生      更新时间:2023-10-16

我编译了WebRTC本地代码(c++),我正在玩peerconnection服务器和客户端示例(在srctalkexamplespeerconnection下)。特别是我试图改变客户端样本流自定义序列的图像,而不是网络摄像头视频。我用了类似的http://sourcey.com/webrtc-custom-opencv-video-capture/作为起点,其中自定义VideoCapturerFactory返回自定义VideoCapturer,我可以使用它来生成自定义图像帧。每次我有一个新的图像流,我调用VideoCapturer上的SignalFrameCaptured(this, &frame)

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

#
# Fatal error in e:webrtcwebrtc checkoutsrcwebrtcmodulesvideo_codingmainsourcevideo_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行)

您可以看到,这是最近的更改