在 10 分钟内完成 ** 编译、构建和调试** WebRTC 库的分步指南,用于 Linux 操作系统。
自 2018 年 1 月以来,我一直在使用 WebRtc 及其相关技术。我有动力以最简单的方式计划一系列关于 WebRtc 研究的博客,以便新候选人可以轻松地直接了解 WebRtc。当我开始使用 WebRtc 时,对于C/C++
包含单个平台上的许多字段的如此庞大的堆栈来说,事情并不容易理解。据说;
WebRtc 是来自不同研发领域(如数字信号处理、应用科学、网络和 VoIP)的任何类型的开发人员和工程师的游乐场。
作者:Muhammad Usman Bashir
今天,我将通过以下步骤展示一个非常简单且具有解释性的 Linux 操作系统 WebRtc 调试环境示例;
- Linux Box/OS 的 WebRtc 编译
- 测试 WebRtc 默认示例
- 使用 Clion 创建一个简单的 WebRtc 示例
示例 WebRtc 项目:适用于 Linux 的简单 WebRtc Cpp 程序
先决条件:
本教程假设您在基于 UNIX 的系统上,我在 Ubuntu 上并测试了 *18.04 LTS* 和 *20.04 LTS* 版本。
注意:我推荐在 Ubuntu 18.04 LTS 上进行 WebRtc Linux 开发
Linux Box/OS 的 WebRtc 编译:
我做了简单直接的 WebRtc 编译步骤。
严格建议:不要打开多个终端选项卡/Windows 来安装与 WebRTC 先决条件相关的任何依赖项。在一个且只有一个终端的选项卡/窗口中完成与 WebRTC 相关的所有任务。
首先,确保已经安装了以下内容,如果没有,请使用这些命令来执行此操作:
- sudo add-apt-repository ppa:openjdk-r/ppa
- sudo apt-get install openjdk-8-jdk
- sudo apt-get install pkg-config
- sudo apt-get update或简单的内联命令;sudo add-apt-repository ppa:openjdk-r/ppa && sudo apt-get install openjdk-8-jdk && sudo apt-get install pkg-config && sudo apt-get update
一些附加库;
- sudo apt 更新
- sudo apt install libboost-all-dev
- sudo apt-get install -y nlohmann-json-dev
- sudo apt install libwebsocketpp-dev
让我们开始为 Linux OS 编译 WebRtc 以建立一个开发环境。下面的步骤一一开始。根据*机器规格*和*互联网速度*,每个步骤都需要自己的时间,因此请确保每个步骤都不间断地完成。
1- git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
2- export PATH=”$PATH:${HOME}/depot_tools”
3- mkdir webrtc_linux
3.1- cd webrtc_linux
4- fetch — nohooks webrtc_linux
5- gclient sync
6- cd src/
7- ./build/install-build-deps.sh
8- git branch -r
9- git checkout origin/master
# 检查你是否在 origin/master 分支
10- git分支# 要使用默认值(调试构建)生成项目文件,请运行(位于结帐的 src/ 目录中):11- gn gen out/Debug — args='is_debug=false is_component_build=false is_clang=false rtc_include_tests=false rtc_use_h264=true rtc_enable_protobuf=false use_rtti=true use_custom_libcxx=falsetreat_warnings_as_errors=false use_ozone=true'# 当你生成了 Ninja 项目文件(参见上一节),编译(位于src/中)使用:12- ninja -C 输出/调试
事实证明,您最终将libwebrtc.a
在/webrtc_linux/src/out/Debug/obj/
目录中进行编译和构建。现在你可以在你的项目中使用这个 WebRtc 静态库来开发和调试 WebRtc Native C++ Stack;
测试 WebRtc 默认示例:
一旦你成功编译了 Linux 的 WebRtc 库,那么最初你可以测试 WebRtc 生成的小程序来验证你的编译过程是否100%
准确;
只需转到此目录:/webrtc_linux/src/out/Debug/
在这里您将看到一个测试程序列表,用于观察 WebRtc 原生堆栈的基本和简单实现;
- 绿色文件是 WebRtc 测试程序
要运行任何程序,只需对任何程序使用以下命令;确保您在此目录中:/webrtc_linux/src/out/Debug/
终端选项卡-A
- ./peerconnection_server
终端选项卡-B
- ./peerconnection_client # Peer-A
终端选项卡-C
- ./peerconnection_client # Peer-B
Tab-A 上的结果:
通过使用相同的技术,您也可以测试其他已编译的程序。在这一点上,我们非常有信心我们的 WebRtc 编译的库是 100% 准确的。
使用 Clion 创建一个简单的 WebRtc 示例:
现在,我们将基于 **CMake** 构建一个简单的 CPP 程序。您可以使用自己选择的 IDE,但在本教程中,我使用 CLion IDE 进行 CPP 开发和调试。
创建一个简单的基于 CPP 的项目或简单地从 Github 克隆该项目的示例;Linux的简单WebRtc Cpp程序
程序 CMakeLists.txt 文件:
这是CMakeLists.txt
我们程序的文件:https://medium.com/media/67643c43c8862fe52620223e0da9bbaeCMakeLists.txt 文件
现在,我们必须实现main.cpp
包含 WebRtc 程序基本逻辑的文件;这是参考文件;https://medium.com/media/19502abec9f33d4257714c4b43a50971main.cpp 文件
此示例程序中使用的其他文件的引用可在此 Github 存储库中找到;适用于 Linux 的简单 WebRtc Cpp 程序。
现在,当您简单地构建项目时,它将成功编译。程序在调试模式下的结果输出如下;
程序在控制台模式下的结果输出如下;
当你运行这个程序时,你会想出下面的命令列表来生成 SDPs 和 ICE Candidates
*** 欢迎使用 WebRtc 调试开发环境 ***
> 请按照以下命令使用此程序 <
1. sdp1 -> 为 Peer-A 生成 SDP
2. sdp2 -> 为 Peer-B 生成 SDP
3. ice1 - > 为 Peer-A
4.ice2 生成 Ice 候选者 -> 为 Peer-B
5. 生成 Ice 候选者。-> 终止 RTC 线程会话。
控制台的结果输出:
当你输入sdp1
命令时,结果会是这样的;
:140071081162560:Main thread has initiated...
> sdp1
:140071081162560:create_offer_sdp
:140071046182656:PeerConnectionObserver::
RenegotiationNeeded > :140071046182656:CreateSessionDescriptionObserver::OnSuccess
:140071046182656:PeerConnectionObserver::SignalingChange(1)
Offer sdp:begin
v=0
o= - 1381929178758113972 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE data
a=msid-semantic: WMS
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice -ufrag:Zw7U
a=ice-pwd:fhNYQwc7IWGYYUR2Mrbsi9Qa
a=ice-options:trickle
a=指纹:sha-256 10:0B:68:35:3F:20:65:48:0D:67:7E:DF:3F:2A:4F:ED:A1:CE:79:CF:D8:B1 :AE:D0:57:59:BB:C6:4A:DD:91:8C
a=setup:actpass
a=mid:data
a=sctp-port:5000
a=max-message-size:262144
Offer sdp:end
:140071046182656:SetSessionDescriptionObserver::OnSuccess
:140071046182656:PeerConnectionObserver::IceGatheringChange(1)
:140071046182656:PeerConnectionObserver::IceCandidate
:140071046182656:PeerConnectionObserver::IceCandidate
:140071046182656:PeerConnectionObserver::IceCandidate
:140071046182656:PeerConnectionObserver::IceGatheringChange(2)
当您输入ice1
命令时,输出将是这样的;
> ice1
[
{
"candidate": "candidate:1021689336 1 udp 2122260223 192.168.1.160 44302 typ host generation 0 ufrag Zw7U network-id 3 network-cost 50",
"sdp_mid": "data",
"sdp_mline_index": 0
},
{
“候选人”:“候选人:1919303944 1 tcp 1518280447 192.168.1.160 53703 类型主机tcptype被动生成0 ufrag Zw7U网络ID 3网络成本50”,
“sdp_mid”:“数据”,
“sdp_mline_index”:0
},
{
“候选人”:“候选人:3182279500 1 udp 1686052607 110.93.193.154 44302 typ srflx raddr 192.168.1.160 rport 44302 generation 0 ufrag Zw7U network-id 3 network-cost 50”,
“sdp_mid”:“数据”,
“sdp_mline_index”:0
}
]
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。