带有自定义videoccapture的WebRTC原生(c++)无法通过main_thread_calledonvali
WebRTC native (C++) with custom VideoCapturer fails main_thread_.CalledOnValidThread() check
我编译了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行)
您可以看到,这是最近的更改
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 代码在main()中运行,但在函数中出现错误
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 函数是否可以访问传递给main()的参数
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 我的 int main() 中出现堆栈溢出错误
- C++变量名(可以将 main 声明为变量,但对于其他函数名称则不然)
- 当我尝试在 Main 中调用插入函数时,它不是取数字?
- File.cpp.o:OpenPose 标志 CMakeFiles/.. 的多重定义/main.cpp.o:首先在这里定
- 为什么类和 main() 函数中也有动态内存分配
- 在 main.cpp 的上下文中找不到目录(带有 CMake 的快板)
- 我想在 Main 中用 C++ 调用其他类中的一个类,但我做不到
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- 为什么 'main' 函数中的局部 int 变量会自动初始化?
- C++ assigment std::list:<typename>:itrator 在 main 中工作,但在方法中它不起作用
- 为什么在我的 main 函数中声明整数后我的整数数组中会出现错误?
- 为什么要从main()返回NULL?
- main() 中的 std::cout 在调试期间不会在调试控制台中打印任何内容