当前位置: 首页 > news >正文

【网络通信 -- WebRTC】项目实战记录 -- mediasoup android 适配 webrtc m94

【网络通信 -- WebRTC】项目实战记录 -- mediasoup android 适配 webrtc m94

【1】下载并配置 depot_tools

下载 depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git编辑 ~/.bashrc 将 depot_tools 添加到路径中
vim ~/.bashrc
export PATH=$PATH:/(path to depot_tools)/depot_tools
source ~/.bashrc检查 depot_tools 是否安装配置成功
which gn
which gclient

【2】获取 WebRTC 源码

获取 Android WebRTC 代码
fetch --nohooks webrtc_android若其中发生中断则执行如下命令继续
gclient sync切换到 m94 分支并同步
cd src
git checkout -b m94 branch-heads/4606
cd ..
gclient sync --nohooks
gclient runhooks下载安装相关依赖
cd src
./build/install-build-deps.sh
./build/install-build-deps-android.sh

【3】编译 WebRTC

编译 AAR编译 libwebrtc.a 和 libwebrtc.jar
默认不会编译 webrtc 模块,在 /tools_webrtc/android/build_aar.py 文件中加入 ':webrtc',如下TARGETS = [':webrtc','sdk/android:libwebrtc','sdk/android:libjingle_peerconnection_so',
]
--------------------------------------------------开启 h264
修改 tools_webrtc/libs/generate_licenses.py 如下,添加 LICENSE'g722': ['modules/third_party/g722/LICENSE'],
'fft4g': ['common_audio/third_party/fft4g/LICENSE'],
'spl_sqrt_floor': ['common_audio/third_party/spl_sqrt_floor/LICENSE'],
+    'openh264':['third_party/openh264/src/LICENSE'],
+    'ffmpeg':['third_party/ffmpeg/LICENSE.md'],
# TODO(bugs.webrtc.org/1110): Remove this hack. This is not a lib.
--------------------------------------------------执行编译命令
./tools_webrtc/android/build_aar.py --extra-gn-args 'is_debug=false is_component_build=false is_clang=true rtc_include_tests=false rtc_use_h264=true rtc_enable_protobuf=false use_rtti=true use_custom_libcxx=false' --build-dir ./out/release-build/m94/
--------------------------------------------------编译结果输出路径
out/release-build/m94/armeabi-v7a/obj/libwebrtc.a
out/release-build/m94/armeabi-v7a/lib.java/sdk/android/libwebrtc.jar

【4】保存 Webrtc Android 相关头文件与库

#!/bin/bashcd ./src
mkdir -p ../m94/
mkdir -p ../m94/include/third_party/
cp -r       api/                        ../m94/include/
cp -r       audio/                      ../m94/include/
cp -r       base/                       ../m94/include/
cp -r       build_overrides/            ../m94/include/
cp -r       call/                       ../m94/include/
cp -r       common_audio/               ../m94/include/
cp -r       common_video/               ../m94/include/
cp -r       logging/                    ../m94/include/
cp -r       media/                      ../m94/include/
cp -r       modules/                    ../m94/include/
cp -r       p2p/                        ../m94/include/
cp -r       pc/                         ../m94/include/
cp -r       rtc_base/                   ../m94/include/
cp -r       rtc_tools/                  ../m94/include/
cp -r       sdk/                        ../m94/include/
cp -r       stats/                      ../m94/include/
cp -r       style-guide/                ../m94/include/
cp -r       system_wrappers/            ../m94/include/
cp -r       test/                       ../m94/include/
cp -r       third_party/abseil-cpp/     ../m94/include/third_party/
cp -r       tools_webrtc/               ../m94/include/
cp -r       video/                      ../m94/include/
cp .clang-format                        ../m94/include/
cp .git-blame-ignore-revs               ../m94/include/
cp .gitignore                           ../m94/include/
cp .vpython                             ../m94/include/
cp abseil-in-webrtc.md                  ../m94/include/
cp AUTHORS                              ../m94/include/
cp BUILD.gn                             ../m94/include/
cp codereview.settings                  ../m94/include/
cp CODE_OF_CONDUCT.md                   ../m94/include/
cp common_types.h                       ../m94/include/
cp DEPS                                 ../m94/include/
cp ENG_REVIEW_OWNERS                    ../m94/include/
cp LICENSE                              ../m94/include/
cp license_template.txt                 ../m94/include/
cp native-api.md                        ../m94/include/
cp OWNERS                               ../m94/include/
cp PATENTS                              ../m94/include/
cp PRESUBMIT.py                         ../m94/include/
cp presubmit_test.py                    ../m94/include/
cp presubmit_test_mocks.py              ../m94/include/
cp pylintrc                             ../m94/include/
cp README.chromium                      ../m94/include/
cp README.md                            ../m94/include/
cp style-guide.md                       ../m94/include/
cp WATCHLISTS                           ../m94/include/
cp webrtc.gni                           ../m94/include/
cp whitespace.txt                       ../m94/include/mkdir -p ../m94/lib/arm64-v8a/obj/
mkdir -p ../m94/lib/arm64-v8a/lib.java/sdk/android/
cp      out/release-build/m94/arm64-v8a/obj/libwebrtc.a       ../m94/lib/arm64-v8a/obj/
cp -r   out/release-build/m94/arm64-v8a/lib.java/sdk/android/ ../m94/lib/arm64-v8a/lib.java/sdk/android/mkdir -p ../m94/lib/armeabi-v7a/obj/
mkdir -p ../m94/lib/armeabi-v7a/lib.java/sdk/android/
cp      out/release-build/m94/armeabi-v7a/obj/libwebrtc.a       ../m94/lib/armeabi-v7a/obj/
cp -r   out/release-build/m94/armeabi-v7a/lib.java/sdk/android/ ../m94/lib/armeabi-v7a/lib.java/sdk/android/mkdir -p ../m94/lib/x86/obj/
mkdir -p ../m94/lib/x86/lib.java/sdk/android/
cp      out/release-build/m94/x86/obj/libwebrtc.a       ../m94/lib/x86/obj/
cp -r   out/release-build/m94/x86/lib.java/sdk/android/ ../m94/lib/x86/lib.java/sdk/android/mkdir -p ../m94/lib/x86_64/obj/
mkdir -p ../m94/lib/x86_64/lib.java/sdk/android/
cp      out/release-build/m94/x86_64/obj/libwebrtc.a       ../m94/lib/x86_64/obj/
cp -r   out/release-build/m94/x86_64/lib.java/sdk/android/ ../m94/lib/x86_64/lib.java/sdk/android/cp libwebrtc.aar ../m94/lib/

【5】适配 MediaSoup Android Client Lib

下载 mediasoup-client-android
git clone https://github.com/haiyangwu/mediasoup-client-android.git
将编译好的 webrtc m94 android 库的头文件与库文件拷贝到项目对应的 deps/webrtc 目录下下载 mediasoup-demo-android
git clone https://github.com/haiyangwu/mediasoup-demo-android.git
settings.gradle 中配置 mediasoup-client-android 项目路径
build.gradle(:app) 中引用 mediasoup-client-android
即可编译 mediaoup-android APK

参考致谢

本博客为博主的学习实践总结,并参考了众多博主的博文,在此表示感谢,博主若有不足之处,请批评指正。

【1】二 Ubuntu下编译WebRtc-Android

【2】webrtc Android最新源码及编译

【3】webrtc 103 android编译问题

【4】安卓 Mediasoup V3 基于webrtc 分支m84 的编译

【5】基于WebRTC m94 android版本编译 mediasoup-client-android

相关文章:

【网络通信 -- WebRTC】项目实战记录 -- mediasoup android 适配 webrtc m94

【网络通信 -- WebRTC】项目实战记录 -- mediasoup android 适配 webrtc m94 【1】下载并配置 depot_tools 下载 depot_tools git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git编辑 ~/.bashrc 将 depot_tools 添加到路径中 vim ~/.bashrc export…...

【力扣周赛】第 357 场周赛(⭐反悔贪心)

文章目录 竞赛链接Q1:6925. 故障键盘解法1——直接模拟解法2——双端队列 Q2:6953. 判断是否能拆分数组(贪心)Q3:2812. 找出最安全路径⭐解法1——多源BFS瓶颈路模型?解法2——多源BFS 倒序枚举答案 并查…...

css重置

css 重置 CSS 重置的主要目标是确保浏览器之间的一致性,并撤消所有默认样式,创建一个空白板。 如今,主流浏览器都实现了css规范,在布局或间距方面没有太大差异。但是通过自定义 CSS 重置,也可以改善用户体验和提高开…...

tcpdump相关

Linux内核角度分析tcpdump原理(一)Linux内核角度分析tcpdump原理(二)...

MFC新建内部消息

提示:记录一下MFC新建内部消息的成功过程 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 先说一下基本情况,因为要在mapview上增加一个显示加载时间的功能。然后发现是要等加载完再显示时间,显示在主…...

linux查找目录

要在Linux中查找目录,可以使用find命令。下面是查询目录的几个示例: 1,查找当前目录下所有子目录: find . -type d 2,在指定路径下查找目录: find /path/to/directory -type d 3,查找以特定名称开头的目录: find . -t…...

机器学习:可解释学习

文章目录 可解释学习为什么需要可解释机器学习可解释还是强模型可解释学习的目标可解释机器学习Local ExplanationGlobal Explanation 可解释学习 神马汉斯,只有在有人看的时候能够答对。 为什么需要可解释机器学习 贷款,医疗需要给出理由,让…...

UE5- c++ websocket里实现调用player里的方法

# UGameInstance里直接调用 获取到引用了,就可以自然的调用。忽略 # UGameInstance里间接调用,通过代理调用 前置已经添加了websocket,具体步骤参考,链接在UWebSocketGameInstance.h里新增代理,并在链接成功后进行绑定。 #pragma…...

线性代数的学习和整理18:什么是维度,什么是秩?秩的各种定理秩的计算 (计算部分未完成)

目录 0 问题引出:什么是秩? 概念备注: 1 先厘清:什么是维数? 1.1 真实世界的维度数 1.2 向量空间的维数 1.2.1 向量空间,就是一组最大线性无关的向量组/基张成的空间 1.3 向量α的维数 1.3.1 向量的…...

Centos 6.5 升级到Centos7指导手册

一、背景 某业务系统因建设较早,使用的OS比较过时,还是centos6.5的系统,因国产化需要,需将该系统升级到BClinux 8.6,但官方显示不支持centos 6.x升级到8,需先将centos6.5升级到centos7的最新版&#xff0c…...

详解python中的映射类型---字典

概述 映射类型是“键-值”数据项的组合,每个元素是一个键值对,即元素是(key,value),元素之间是无序的。键值对(key,value)是一种二元关系,源于属性和值的映射…...

gdal求矢量图形的形心

gdal求矢量图形的形心 #include "gdal_priv.h" #include "ogrsf_frmts.h"int main() {OGRRegisterAll();OGRPolygon* square_1 new OGRPolygon();OGRLinearRing* ring_1 new OGRLinearRing();// 添加 square_1 的点ring_1->addPoint(0, 0);ring_1-&g…...

<深度学习基础> Batch Normalization

Batch Normalization批归一化 BN优点 减少了人为选择参数。在某些情况下可以取消dropout和L2正则项参数,或者采取更小的L2正则项约束参数;减少了对学习率的要求。现在我们可以使用初始很大的学习率或者选择了较小的学习率,算法也能够快速训…...

Ubuntu yolov5 环境配置

查看Ubuntu版本 $ cat /proc/version Linux version 5.4.0-150-generic (builddbos03-amd64-012) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #167~18.04.1-Ubuntu SMP Wed May 24 00:51:42 UTC 2023虚拟机磁盘扩容 因为在环境搭建过程中遇到了磁盘空间不足的问题&a…...

【自执行闭包JS逆向】某网站登录MD5加密分析

文章目录 一、写在前面二、抓包分析三、加密函数分析 一、写在前面 最近工作比较忙,不过还是在督促自己利用有限的时间学习更新一些技术文章。互联网这个行业大家目前也都知道是非常内卷的,所有大家在工作之余养成良好的自主学习习惯是非常好的&#xff…...

Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明

Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明 目录 Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明 一、简单介绍 二、安装文件相关说明 三、界面的简单说明 四、prompt 的一些语法简单说明 1、Prompt :正向提示词 &am…...

【Linux】- 一文秒懂shell编程

shell编程 1.1 Shell 是什么1.2 Shell 脚本的执行方式1.3 编写第一个 Shell 脚本2.1 Shell 的变量2.2 shell 变量的定义2.3 设置环境变量3.1 位置参数变量3.2 预定义变量4.1 运算符4.2 条件判断5.1 流程控制5.2 case 语句5.3 for 循环5.4 while 循环5.5 read基本语法6.1函数6.2…...

CentOS下多网卡绑定多IP段时导致只有一个会通的问题解决

CentOS下多网卡绑定多IP段时导致只有一个会通的问题解决 虚拟机配置多个网络地址,结果同时只能有一个ip是通的, 原因:Linux默认开启了反向路由检查导致的,比如说外面访问eth0的网卡,而网关在eth1上,又或者从…...

关于实现 Vue 动态数据显示,比如数字 0 或 1 怎么显示为 男 或 女等等的动态显示实现方法

具体 Vue 代码演示&#xff1a; test.vue 文件演示&#xff1a; <template> <!-- 方法一 --> <div>{{ test.data 0 ? 男 : 女}}</div><!-- 方法二 --> <div>{{ test.data 0 ? 男 : }}{{ test.data 1 ? 女 : }}{{ test.d…...

mac制作ssl证书|生成自签名证书,nodejs+express在mac上搭建https+wss(websocket)服务器

注意 mac 自带 openssl 所以没必要像 windows 一样先安装 openssl&#xff0c;直接生成即可 生成 ssl/自签名 证书 生成 key # 生成rsa私钥&#xff0c;des3算法&#xff0c;server_ssl.key是秘钥文件名 1024位强度 openssl genrsa -des3 -out server_ssl.key 1024让输入两…...

Unix System V BSD POSIX 究竟是什么?

学习Linux系统,很多同学对这些单词概念很模糊、一脸懵逼! 黄老师觉得,了解了历史,才会真正明白这些单词的含义,坐稳、黄老师发车了!!! 首先介绍一下什么是Unix? UNIX(非复用信息和计算机服务,英语:Uniplexed Information and Computing Service,UnICS)取“UNI…...

数据集学习笔记(六):目标检测和图像分割标注软件介绍和使用,并转换成YOLO系列可使用的数据集格式

文章目录 一、目标检测1.1 labelImg1.2 介绍1.3 安装1.4 使用1.5 转换1.6 验证 二、图像分割2.1 labelme2.2 介绍2.3 安装2.4 使用2.5 转换2.6 验证 一、目标检测 1.1 labelImg 1.2 介绍 labelImg是一个开源的图像标注工具&#xff0c;用于创建图像标注数据集。它提供了一个…...

【高阶数据结构】红黑树 {概念及性质;红黑树的结构;红黑树的实现;红黑树插入操作详细解释;红黑树的验证}

红黑树 一、红黑树的概念 红黑树&#xff08;Red Black Tree&#xff09; 是一种自平衡二叉查找树&#xff0c;在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有…...

获取对象占用内存

添加依赖 <dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-core</artifactId><version>4.0.0</version> </dependency>添加vm启动参数 --add-opens java.base/java.langALL-UNNAMED --add-opens java.ba…...

mysql UUID 作为主键的问题

UUID 在MySQL中&#xff0c;可以使用UUID()函数来生成一个新的UUID值。该函数的返回值是一个字符串类型&#xff0c;表示一个32位的十六进制数字&#xff0c;其中包含4个连字符“-”&#xff0c;例如&#xff1a;“6ccd780c-baba-1026-9564-0040f4311e29”。 varchar(32) 32*4…...

2023高教社杯全国大学生数学建模竞赛选题建议

如下为C君的2023高教社杯全国大学生数学建模竞赛&#xff08;国赛&#xff09;选题建议&#xff0c; 提示&#xff1a;DS C君认为的难度&#xff1a;C<B<A&#xff0c;开放度&#xff1a;B<A<C 。 D、E题推荐选E题&#xff0c;后续会直接更新E论文和思路&#xf…...

分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测

分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测 目录 分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测分类效果基本介绍模型描述预测过程程序设计参考资料分类效果 基本介绍 MATLAB实现GRNN广义回归神经网络多特...

低功耗窗帘电机解决方案成功应用并通过 Matter 1.1 认证

Nordic Semiconductor官方宣布与HooRii Tech&#xff08;和众科技&#xff09;携手合作&#xff0c;基于 Nordic nRF52840 芯片平台打造的 HRN71模组&#xff0c;成功赋能低功耗窗帘电机品牌发布Matter产品。低功耗窗帘电机获得 Matter 1.1 认证意味着它具有与其他 Matter 认证…...

如何修复老照片?老照片修复翻新的方法

老旧照片&#xff0c;尤其是黑白照片&#xff0c;往往因为年代久远、保存方式不当等原因而出现褪色、污损、划痕等问题&#xff0c;会比较难以修复&#xff0c;就算是技术精湛的专业修复师&#xff0c;也是需要投入极大时间精力的&#xff0c;效果也是不可预料的。 修复老照片…...

MySQL:区分大小写

查看MySQL版本 show variables; 1、查看 MySQL 当前的区分大小写设置&#xff1a; SHOW VARIABLES LIKE lower_case_table_names; 或者 show Variables like %table_names 2、更改大小写敏感设置&#xff1a; 在 MySQL 5.7 中&#xff0c;更改大小写敏感设置要求修改配置文件 …...

为什么建行网站打不开/谷歌seo是什么

为什么80%的码农都做不了架构师&#xff1f;>>> 1. Menu(左侧菜单生成标签) 1.1. 参数 属性名类型描述是否必须默认值stylestring菜单样式否nullparentFunstring一级菜单是nullchildFunstring二级菜单是null1.2. 用法 <t:menu parentFun"${parentFun}&quo…...

政务公开网站建设重点/怎么样免费做网站

为了快速管理数据库&#xff0c;我们一般都会选择一款顺手的数据库管理工具。Navicat、DataGrip虽然很好用&#xff0c;但都是收费的。今天给大家推荐一款免费、功能强大的数据库管理工具DBeaver&#xff0c;希望对大家有所帮助&#xff01; SpringBoot实战电商项目mall&#x…...

flash代码做网站教程/上海公关公司

计算机编程术语&#xff1a; 参考网址&#xff1a;https://blog.csdn.net/linear_luo/article/details/52318820 application 应用程式 应用、应用程序 application framework 应用程式框架、应用框架 应用程序框架 architecture 架构、系统架构 体系结构 argument 引数&am…...

两学一做网站安徽省/百度学术论文查重免费

软件的本质&#xff1a;产品和产品交付载体。 软件与硬件的不同&#xff1a; 1&#xff09;软件是设计开发&#xff0c;而非生产制造。 2&#xff09;软件不会磨损&#xff0c;但会退化。退化的原因是变更&#xff0c;不断的变更可能会引入新的错误&#xff0c;使得失效律越来越…...

企业注册资金变更流程/陕西整站关键词自然排名优化

今天早上来公司后&#xff0c;测试人员告诉我 退款失败了。上周五还好好的&#xff0c;怎么这周三就出问题了&#xff0c;赶快让测试发来订单号&#xff0c;查询数据库&#xff0c;查询日志&#xff0c;发现还是以前的问题&#xff1a; search hit TOP, continuing at BOTTOMat…...

突然宣布杭州疫情严重/seo权重查询

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼今天遇到的字符串处理的问题&#xff0c;记录一下方便使用str1 input(请输入一个字符&#xff1a;)#初始化字符、数字、空格、特殊字符的计数lowercase 0uppercase 0number 0space 0other 0for strs in str1:#如果在字符串中…...