探讨如何在AS上构建webrtc(3)分享WebRTC-CMakeBuild轻量化工程

news/2025/3/25 10:53:02

前言

我想很多同学想深入接触 webrtc学习的时候,好不容易下载到对应的源码之后,看见其庞大的代码仓完全不知道入手,好比想去西天取经愿意经历九九八十一难渡劫,但不懂路那是谈何去渡劫呢?那么我就在想,能不能仿照其他小型sdk-demo这样的方式,由繁从简方便学习使用呢?代码是死的人是活的,基于此目标就有了《探讨如何在AS上构建webrtc》第一第二篇文章了。

到这次第三篇文章,打算放一些成果出来分享給有需要的同学。正如在 探讨如何在AS上构建webrtc(2) 介绍,Build.gn串联了整个webrtc各个模块代码的引用关系,并初步的整理了三类gn编译函数(rtc_android_library、generate_jni、rtc_library)再经过耐心的整理,终于把webrtc的核心源代码隔离出来。

WebRTC-CMakeBuild beta版

工程gitee地址:Mr_Zzr/WebRTC-Android-CMakeBuildhttps://gitee.com/Mr_Zzr/webrtc-android-cmake.git

接下来介绍这个beta版本的轻量化工程。首先这是以Android平台为切入口,整体是一个可运行的Android Studio工程,app模块是官方demo源码+我自己编译出来的libwebrtc.aar,可单独运行。

webrtc模块就是 根据 sdk/android/Build.gn整理的源码文件,包含相关的java jni以及cc源码文件,删减了大量的单元测试文件以及性能测试文件(['_unittest.cc', '_test.cc', '_benchmark.cc', 'OWNERS'])。而且third_party部分只有 abseil-cpp,但据我了解third_party得包含以下(libevent、protobuf/protoc、libyuv、ssl、ffmpeg、openh264、openh265、dav1d、libaom_av1、aac、opus、libvpx)等一些我知道的,我不知道的第三方库,往后都需要每一项的增加支持。

工程当中内含一份简单的CMakeLists,这份CMakeLists已经include各模块根目录,但还没正式的编写好整个webrtc的编译脚本。但我们可以使用技巧来生成所有文件的符号表:运行构建app模块,Build — make project,这样AndroidStudio就会对所有当前工程的文件进行编译,这样我们就可以在app模块阅读demo代码时候,跟随调用栈跳转到webrtc模块的源码当中了。

非Android平台的同学,可以用VSCode直接打开到webrtc模块目录,也是可以利用cmake tools进行简单的make,失败也不要紧,只要能生成.o就足够用来快速定位源码调用栈了。

显然当前工程,我只能勉强的定义为beta版本。因为它还没能真正成功的构建出我想要的libwebrtc.so,但用来阅读源码、学习参考应该是够用的。希望自己能把工程推动下去,有兴趣同学欢迎fork or 推分支,或者加我个人联系方式,一起折腾一起学习webrtc一起进步。


http://www.niftyadmin.cn/n/5889985.html

相关文章

日志系统项目——准备工作了解类的设计模式如单例模式、工厂模式、代理模式

1.六大原则 1.1 单一职责原则 类的职责应该单⼀,⼀个⽅法只做⼀件事。职责划分清晰了,每次改动到最⼩单位的⽅法或 类。 使⽤建议:两个完全不⼀样的功能不应该放⼀个类中,⼀个类中应该是⼀组相关性很⾼的函 数、数据的封装 ⽤例…

【架构艺术】Go语言微服务monorepo的代码架构设计

近期因为项目架构升级原因,笔者着手调研一些go项目monorepo的代码架构设计,目标是长期把既有微服务项目重要的部分都转移到monorepo上面,让代码更容易维护,协作开发更加方便。虽然经验不多,但既然有了初步的调研&#…

Android Retrofit 请求执行模块执行原理深入源码分析(三)

一、引言 Retrofit 是 Square 公司开发的一款优秀的类型安全的 HTTP 客户端,在 Android 和 Java 开发中被广泛使用。它通过简洁的接口定义和强大的注解功能,使得开发者能够轻松地进行网络请求。请求执行模块是 Retrofit 的核心部分之一,负责…

RabbitMQ 从入门到精通

1 MQ架构设计原理 1.1 什么是消息中间件 消息中间件基于队列模型实现异步/同步传输数据 作用:可以实现支撑高并发、异步解耦、流量削峰、降低耦合度。 1.2 传统的http请求存在那些缺点 1.Http请求基于请求与响应的模型,在高并发的情况下&#xff0c…

UE5.5 Niagara初始化粒子模块

粒子生成模块列表是每个创建的粒子都会调用一次对应的模块。此阶段中的模块设置每个粒子的初始值。粒子将从上到下的顺序执行模块。 下面,将列一下粒子生成常用的模块。 Initialize Particle 初始化粒子 所有粒子必需的基础模块,用于初始化粒子的基本属…

数据结构:排序详解(使用语言:C语言)

1.排序的概念及其运用 1.1排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录…

搞定python之三----序列、字典及集合

本文是《搞定python》系列的第三篇,演示了python的序列、字典和集合的简单用法和相互之间的区别。特别是序列,初次看的话没有java来的得劲,java区分的比较细,python虽然统一成一类,但是忘掉元组,字符串和列…

Insar结合ISCE2,某一个文件进行并行-stackSentinel.py

stackSentinel.py 依次执行 run_01 到 run_15,记录各自的日志 并行执行 run_16 里的所有命令,仍然记录日志 不知道对不对,测试的时间有点长就给停了 #!/bin/bash# ✅ 适用于 WSL/Linux runfiles_path"/mnt/e/insar_order_test/Stack…