如何将 webrtc 原生 api 添加到我的 qt 项目中?

Posted

技术标签:

【中文标题】如何将 webrtc 原生 api 添加到我的 qt 项目中?【英文标题】:How to add webrtc native apis into my qt project? 【发布时间】:2018-06-04 08:26:26 【问题描述】:

困扰了几天,真的需要一些webrtc的导出来帮帮我。

我用ninja的源代码编译成功,可以运行peerconnection例子。我将静态库(.a文件)一一添加到我的qt项目中,然后将包含路径设置为源代码目录。当我调用 createpeerconnectionfactory 时,它编译成功。但是,当我尝试新建 PeerConnectionInterface::RTCConfiguration 对象时,会发生错误:

linux/webrtc/src/api/array_view.h:156: 错误: 未定义引用rtc::FatalMessage::FatalMessage(char const*, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)' linux/webrtc/src/api/array_view.h:158: error: more undefined references tortc::FatalMessage::FatalMessage(char const*, int, std::__cxx11::basic_string, std::分配器 >*)' 跟随

我搜索了头文件,发现函数在 rtc_base/checks.h 中声明 我去阅读 BUILD.GN 并发现“检查”已构建到 librtc_base_genetic.a 中。我很确定我已将此库添加到我的 qt .pro 文件中。

我正在使用 ubuntu18,QT5.10.1,我在 5 月 19 日获得了源代码。 如果您能给我任何建议,我将不胜感激,也许这是如何发生的,或者我该如何解决这个问题。

有没有人导入过webrtc原生库并成功使用api的?我真的需要有人的帮助来克服这个艰难的开始。 万分感谢!

【问题讨论】:

欢迎来到 ***.com。请花一些时间阅读the help pages、阅读the SO tour、阅读有关how to ask good questions 的信息,并了解如何创建Minimal, Complete, and Verifiable Example。我还建议您阅读this SO question checklist,并阅读所有idownvotedbecau.se,以了解您的问题投反对票的一些原因。 这是真正的问题。从盒子里,webrtc 在用 ninja 构建他之后不起作用。现在我也有这个问题。我检查了分支 70、69、66。没有改变。 【参考方案1】:

这可能是因为std::string 的ABI 不兼容。 libstdc++ 已从旧的 COW 实现更改为另一个。链接器需要std::string__cxx11 版本,但库是用另一个编译的。

一种可能的解决方案是使用实际操作系统中的libstdc++,而不是WebRTC Native 附带的libc++。为此,请编辑 ninja 文件中的所有命令行选项以删除 -nostdlib 之类的内容并将 sysroot 设置为实际 root:

sed -i -re 's#obj/buildtools/third_party/libc[^[:space:]]*\s*##g' obj/webrtc.ninja
find . -type f -name \*.ninja -a ! -name \*libc++* -exec sed -i -re 's/\s*-nostd(inc|lib)\+\+//'  \+
find . -type f -name \*.ninja -a ! -name \*libc++* -exec sed -i -re 's/\s*\S*isystem\S*libc\+\+\S*//g'  \+
find . -type f -name \*.ninja -exec sed -i -re 's#(--sysroot=)[^[:space:]]*#\1/#'  \+
find . -type f -name \*.ninja -exec sed -i -re 's#(-L)[^[:space:]]*-sysroot#\1#g'  \+
find . -type f -name \*.ninja -exec sed -i -re 's#(rpath-link=)[^[:space:]]*-sysroot#\1#g'  \+

还有其他问题,它们会随着代码的变化而变化。构建和使用该库需要大量工作。

【讨论】:

你在 ninja 文件中改变了什么? @RN3KKNick,我添加了一些正则表达式。

以上是关于如何将 webrtc 原生 api 添加到我的 qt 项目中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将移动宽带 API 添加到我的 C# WPF 应用程序

如何将 servlet api 添加到我的 pom.xml

如何将嵌套数组添加到我的模型类

如何将 Google 地图搜索框添加到我的自定义地图?

IOS 12 WebRTC - 如何将 RTCMediaStream 传递给 wkwebview?

iOS WebRTC 杂谈之 视频采集添加美颜特效