Android metaRTC6.0 编译指南

news2024/11/18 23:43:08

概述

metaRTC新版本优化了安卓系统支持,demo将C和C++生成lib库,在lib库上提供了纯Java的webRTC推拉流demo。

demo支持软硬编解码,软编码为openh264,软解码为yangh264decoder,gpu编解码为mediacodec。

metaRTC android版本音视频的采集/编码/解码/opengl渲染/AEC等均在C++中实现,即使低配硬件也可以实现高效的webRTC推拉流和互动。

下载源码

Release metartc6.086 with 3rdparty and runtime · metartc/metaRTC · GitHubA cross-platform WebRTC SDK. Contribute to metartc/metaRTC development by creating an account on GitHub.https://github.com/metartc/metaRTC/releases/tag/6.0.086

https://gitee.com/metartc/metaRTC/releases/tag/6.0.086https://gitee.com/metartc/metaRTC/releases/tag/6.0.086

推拉流demo编译

android studio打开工程demo/metapushstream6_android和demo/metaplayer6_android

库文件放置于app/libs下libmetapush.aar/libmetaplayer.aar

build.grade配置

调用lib api代码

//推流
  if(m_push==null) m_push=new YangPush(YangPush.Camera_Front,YangPush.Encoder_cpu,YangPush.MediaServer_srs); 
//拉流
if(m_player==null) m_player=new YangPlayer(YangPlayer.Decoder_cpu,YangPlayer.MediaServer_srs);
//api参数
    public  static final int Decoder_cpu=1;
    public  static final int Decoder_gpu=0;
    public  static final int Encoder_cpu=1;
    public  static final int Encoder_gpu=0;
    public  static final int Camera_Back=1;
    public  static final int Camera_Front=0;
    public  static final int MediaServer_srs=0;
    public  static final int MediaServer_zlm=1;

lib库编译

运行脚本cmake_lib_android.sh

#cmake_lib_android.sh 脚本
cd libmetartccore6
./cmake_android.sh
cd ../libmetartc6
./cmake_android.sh
cd ../demo/libmetaApp
./cmake_android.sh

生成libmetartccore6.a/libmetartc6.a/libmetaApp.a于目录bin/lib_android

android studio打开工程demo/libmetapush_android和demo/libyangplayer_android

编译可选择ssl库

编译生成 libmetapush.aar/libmetaplayer.aar

第三方库

在metartc6.086.7z压缩文件中,已经编译的第三方库二进制文件存放目录为thirdparty/lib/android

第三方库编译

 openssl编译

export ANDROID_NDK=/ndkpath/ndk
export PATH=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
#android-arm64 android-armeabi android-x86_64
./Configure android-arm64 -D__ANDROID_API__=29
make

opus/libyuv/srtp编译

mkdir build
cd build
#ndk目录
export NDK_ROOT=/ndkpath/ndk
#arm64-v8a armeabi x86_64
cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=$NDK_ROOT/build/cmake/android.toolchain.cmake -DANDROID_NDK=$NDK_ROOT -DCMAKE_SYSTEM_NAME=Android -DANDROID_PLATFORM=android-29 -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI=arm64-v8a -DAndroid=ON -DANDROID_STL=c++_static -DCMAKE_CXX_STANDARD=11 -DANDROID_NATIVE_API_LEVEL=29 ..
make

libspeexdsp编译

cd metaspeexdsp
./cmake_android.sh

mbedtls编译

修改mbedtls/mbedtls_config.h(mbedtls3.0)和mbedtls/config.h(mbedtls2.0)参数

去掉#define MBEDTLS_SSL_DTLS_SRTP注释使其生效
#cmake_android.sh
NDK_ROOT=/ndkpath/ndk
rm -rf build
mkdir build
cd build
#arm64-v8a armeabi x86_64
ARCH=x86_64
API=25
cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=$NDK_ROOT/build/cmake/android.toolchain.cmake -DANDROID_NDK=$NDK_ROOT -DCMAKE_SYSTEM_NAME=Android -DANDROID_PLATFORM=android-${API} -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI=${ARCH} -DAndroid=ON -DANDROID_STL=c++_static -DCMAKE_CXX_STANDARD=11 -DANDROID_NATIVE_API_LEVEL=${API} ..
make

支持mbedtls的srtp编译

cmake文件CMakeLists.txt中修改为ON或者编译加参数使其支持mbedtls

set(MBEDTLS_INCLUDE_DIRS "/metartcpath/thirdparty/user_include/mbedtls3/")
set(Yang_3RD_DIR "/metartcpath/thirdparty/lib/android/arm64-v8a")
set(MBEDTLS_LIBRARY ${Yang_3RD_DIR}/libmbedtls.a)
set(MBEDX509_LIBRARY ${Yang_3RD_DIR}/libmbedx509.a)
set(MBEDCRYPTO_LIBRARY ${Yang_3RD_DIR}/libmbedcrypto.a)

运行cmake_android.sh脚本编译

NDK_ROOT=/ndkpath/ndk
rm -rf build
mkdir build
cd build
#arm64-v8a armeabi x86_64
ARCH=arm64-v8a
API=25
/usr/bin/cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=$NDK_ROOT/build/cmake/android.toolchain.cmake -DANDROID_NDK=$NDK_ROOT -DCMAKE_SYSTEM_NAME=Android -DANDROID_PLATFORM=android-${API} -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI=${ARCH} -DAndroid=ON -DANDROID_STL=c++_static -DCMAKE_CXX_STANDARD=11 -DANDROID_NATIVE_API_LEVEL=${API} ..
make

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/135497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全长扩增子医学版新增内容来啦(一)

随着全长扩增子报告内容的扩充,医学版报告单的呼声越来越高,今天就给大家介绍一下凌恩生物针对医学客户,变更/新增了哪些报告内容~ 首先我们来看一下变更的内容吧! CCA/RDA分析、PICRUSt2功能预测、随机森林-biomarker鉴定、随机…

多线程之Thread类常见方法及线程的状态

Thread类常见方法: 创建、启动线程、终止线程、线程等待、获取线程实例、线程休眠 1.关于如何创建线程,在专栏的上一篇文章已经谈到了有5中创建线程的方式。 2.启动线程(t.start):调用 start 方法, 才在操作系统的底…

ArcGIS基础实验操作100例--实验39编辑公共边与顶点

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验39 编辑公共边与顶点 目录 一、实验背景 二、实验数据 三、实验步骤 (1&…

《操作系统-真象还原》14. 文件系统

文章目录文件系统概念inode目录项与目录通过文件名查找文件的流程超级块与文件系统布局文件控制块 —— FCB创建文件系统创建相关结构创建文件系统挂载分区文件描述符文件描述符和文件表文件描述符文件表文件描述符与 inode 关联关系文件描述符的实现文件操作相关的基础函数ino…

单例模式

单例模式 1. 单例模式介绍 单例模式可以说是整个设计中最简单的模式之一,而且这种方式即使在没有看设计模式相关资料也会常用在编码开发中。 因为在编程开发中经常会遇到这样一种场景,那就是需要保证一个类只有一个实例哪怕多线程同时访问,…

C#语言实例源码系列-实现IC卡的读写

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中…

机器学习:通俗理解马尔科夫随机场(MRF)及其应用(附例题)

目录0 写在前面1 无向概率图2 马尔科夫随机场3 马尔科夫独立性4 例题分析0 写在前面 机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理;“广”在分析多个机器学习模型:决策树、支持…

Git使用,在github中创建仓库

一.本地生成密钥: ssh-keygen //生成密钥 cat id_rsa.pub # 查看公钥 查看公钥,并将公钥添加到github的服务器上 二.创建文件,并且将文件上传到GitHub 设置全局用户信息: git config --global user.name dwerrwgit config…

LabVIEW NI数字万用表与开关握手扫描速率

LabVIEW NI数字万用表与开关握手扫描速率 在决定需要哪些设备来满足系统要求时,对扫描速率数据进行基准测试非常有用。数字万用表(DMM)和开关系统也是如此,因为扫描速率取决于数字万用表、开关和它们之间的触发器的速度。本文包含…

高并发系统设计 -- 抢红包设计

抢红包的业务分析 可以明显的看到打开了红包不一定可以抢到。这样做的好处是: 符合现实生活逻辑,有仪式感防止误领,发现不对劲可以马上退出流程拆的长一些,平摊高并发下的压力 预拆包:我在发红包的时候,就…

ansible的静态清单配置文件

清单文件 定义主机清单文件 清单中定义ansible将要管理的一批主机,这些主机也可以分配到组中,以进行集中管理。组中也可以包含子组,一台主机也可以是多个组中的成员。清单还可以设置应用到它所定义的主机和组的变量。 编写主机清单文件 主机…

归置归置,我的 2022

J3code杂文(程序人生 # 年终总结) 记得 2021 年我没有进行年终总结,也就没有发出过相关的内容出来。总结原因就是一个,躺平了,自毕业换工作之后,就一直在适应工作环境与生活环境中默默的度过了 2021 年。 …

你真的懂树吗?二叉树、AVL平衡二叉树、伸展树、B-树和B+树原理和实现代码详解...

树(Tree)是一种相当灵活的数据结构(上一节已经详细讲解了基本的数据结构:线性表、栈和队列),你可能接触过二叉树,但是树的使用并不限于此,从简单的使用二叉树进行数据排序&#xff0…

(深度学习快速入门)第三章第一节:多层感知器简介

文章目录一:引入二:定义三:反向传播算法四:构建多层感知器完成波士顿房价预测一:引入 前文所讲到的波士顿房价预测案例中,涉及到的仅仅是一个非常简单的神经网络,它只含有输入层和输出层 但观…

vue3 antd项目实战——Form表单的重置与清空【resetFields重置表单未生效(手写重置函数)】

vue3 antd项目实战——resetFields重置表单无效【手写重置函数重置表单数据】关于form表单的文章合集场景复现原因分析解决方案(手写清空函数)关于form表单的文章合集 文章内容文章链接Form表单提交和校验https://blog.csdn.net/XSL_HR/article/details/128495087?spm1001.20…

面向对象定义一个hero类

问题定义一个hero类,属性有power,name,分别代表体力值和英雄的名字,体力值默认为100;方法有:1.行走的方法如果体力值为0,则输出不能行走,此英雌已死亡的信息;2.吃的方法&…

双非二本、已获HCIA认证的大二学生与C站相遇的2022

目录 前言 2022年1月、2月——迷茫 2022年3月~6月——调整规划 ​2022年7月——在CSDN发布第一篇博客 2022年8月——步入正轨,获得2022谷歌开发者大会入场名额 2022年9月~10月——开学季,收获季 2022年11月——第一次接触项目并去公司学习实践&…

01通信/协议一些简要概念

通信的目的 将一个设备的数据传送到另一个设备,扩展硬件系统。 通信协议 制定通信的规则,通信双方按照协议规则进行数据收发。 每一种通讯协议都有硬件与软件上的要求。 常见的协议 USART TX、RX 全双工 异步 单端 点对点 I2C SCL、SDA 半双…

百度大规模知识图谱构建及技术应用实践

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2022年11月份热门报告盘点罗振宇2023年跨年演讲PPT原稿2023年,如何科学制定年度规划?《底层逻辑》高清配图‍基于深度学习的个性化推荐系统实时化改造与…

【Node.js实战】一文带你开发博客项目之登录(对接完毕,cookie、session、redis各司其职)

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,也会涉及到服务端 📃个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀未…