Windows下编译调试WebRTC代码

作者:罗上文,微信:Loken1,公众号:FFmpeg弦外之音

在前文《Windows环境下载WebRTC代码》中,我们已经使用 gn 生成了 vs2022 的工程,读者可以直接打开这个 all.sln,界面如下:

1-1

可以看到,有非常多的工程,特别是这个 webrtc 工程,这就是 webrtc 库的工程。但是你在 vs2022 上是无法编译项目的,如果你执行 build,就会报下面这个错。

1>  Task "Exec"
1>    任务参数:Command=call ninja.exe -C E:\windows\src\out\Default\  obj/webrtc.lib
1>    call ninja.exe -C E:\windows\src\out\Default\  obj/webrtc.lib
1>    'ninja.exe' 不是内部或外部命令,也不是可运行的程序
1>    或批处理文件。
1>    E:\windows\src\out\Default\obj\webrtc.vcxproj(59,5): error MSB3073: The command "call ninja.exe -C E:\windows\src\out\Default\  obj/webrtc.lib" exited with code 1.

这是因为他 gn 生成的 vs2022 工程本身就不是给你编译的,而是方便你能在 vs2022 上面修改代码,如果你想编译,还是要使用 命令行。


我们还是参考《Windows环境下载WebRTC代码》一文,打开一个 vs2022 的命令行终端,然后设置 depot_tools 环境变量。

set path=E:\depot_tools;%path%;

然后我们就可以执行下面的命令来编译 WebRTC 的代码。

cd E:\windows\src
ninja.exe -C out/Default

ninja.exe 编译的时候,是多线程编译的,可以马上看到你的 CPU 是跑满的。

1-2

当编译完成之后,就可以看到 obj/webrtc.lib 了,这个是 webrtc 的静态库,有 700 多M大小。

1-3

虽然这个静态库很大的,但是通常他不会完全链接进去 exe 文件里面。例如 peerconnection_client.exe 里面就使用了 webrtc.lib 静态库,但是 peerconnection_client.exe 只有 50 M。

静态库就是用到的函数才会链接进去 exe


上面这样是完整编译全部项目,如果你只想编译其中一个项目,可以加上 target,如下:

#只编译 stunserver 项目
ninja.exe -C out/Default stunserver
#只编译 webrtc 静态库
ninja.exe -C out/Default obj/webrtc

下面来介绍一下如何调试 webrtc 的代码。

Google 提供了两个示例来帮我们理解 API 的用法,那就是 peerconnection_client.exepeerconnection_server.exe

peerconnection_server.exe 是一个信令服务器,负责交换 client 的 SDP,这些其实跟之前 libdatachannel 的示例都是比较类似的。

peerconnection_client.exe 是一个客户端程序,负责采集摄像头推送,播放等等。


我们直接点击 peerconnection_client.exe 即可启动这个客户端,如下:

1-4

然后我们直接用 vs2022 attach 附加到这个客户端进程上进行调试,如下:

1-5

附加到 peerconnection_client.exe 之后,我们在 Conductor::OnServerConnectionFailure 函数设置一个断点,这样我们点击 Connected 按钮的时候连接信令服务器失败就会跑进去这个断点,如下:

1-6


提示:如果加载调试符号的过程太慢,请把参考下面这样,把系统函数的符号禁止掉不加载。

TODO:后面讲一下怎么禁用 系统符号。


参考文章:


版权所属 xianwanzhiyin.net 罗上文 2023 all right reserved,powered by Gitbook该文件修订时间: 2024-01-08 01:12:46

results matching ""

    No results matching ""