linphone android sdk 源码下载编译

news2024/12/27 12:31:08

前言

在这里插入图片描述

    前面的有写过Android 使用Linphone SDK开发SIP客户端相关的文章, 在后续的开发过程中, 为了更深入了解linphone, 便尝试下载SDK源码自行编译.

    关于linphone这里不作过多介绍, 可以参考前面的文章.

    Linphone-SDK 是一个将 Liblinphone 及其依赖项捆绑为 git 子模块的项目,目的是简化整个 Liblinphone 套件的编译和打包,包括 Mediastreamer2、Belle-sip、oRTP 等。
    它的编译生成一个 SDK,适合创建在这些组件之上运行的应用程序。非 Linphone 团队开发或维护的子模块分组在 external/ 目录中。

    当前支持的平台有 Android、iOS、Desktop(Linux、Windows、Mac OS X)和 UWP(Universal Windows Platform)。

clone 代码

GitLab linphone-sdk

git clone https://gitlab.linphone.org/BC/public/linphone-sdk.git

注意: 为什么不使用GitHub上的仓库

# ********
# **注意**
# ********
#从GitHub上克隆下来的代码, 不能正常编译, 原因是有些模块找不到, 更新/下载不来.
https://github.com/BelledonneCommunications/linphone-sdk
git clone https://github.com/BelledonneCommunications/linphone-sdk.git

源码下载[2GB]

提取码: 4x4c 

环境及信赖

系统: Ubuntu 20.04
内存: 16GB
存储: 512GB

工具包:

  • Cmake >= 3.11
  • python >= 3.6
  • pip (or pip3 if the build machine has both python2 and python3)
  • yasm
  • nasm
  • doxygen
  • Pystache (use pip install pystache or pip3 install pystache)
  • six (use pip install six or pip3 install six)

编译

克隆下来解压出来后, 依赖的库代码基本为空, 通过下面的命令, 可以检索出所需要库代码.

检索依赖项
Linphone-SDK 的 git 存储库包含 git 子模块。 它必须使用 --recursive 选项进行克隆。 更新或切换分支后,永远不要忘记检查和更新子模块:

git submodule update --init --recursive

这个过程需要较长的时间, 具体看网络条件, 若出现失败建议检查下网络原因, 另外考虑下是否外网访问的问题.
完成后, 目录文件 列表:

linphone-sdk$ ll
total 248
drwxrwxr-x 35 android android  4096 1216 15:57 ./
drwxrwxr-x 21 android android  4096 1216 09:22 ../
drwxrwxr-x  6 android android  4096 1215 20:09 bcg729/
drwxrwxr-x 10 android android  4096 1215 20:09 bcmatroska2/
drwxrwxr-x  8 android android  4096 1215 20:09 bctoolbox/
drwxrwxr-x 11 android android  4096 1215 20:09 bcunit/
drwxrwxr-x  9 android android  4096 1215 20:09 belcard/
drwxrwxr-x  9 android android  4096 1215 20:09 belle-sip/
drwxrwxr-x  9 android android  4096 1215 20:09 belr/
drwxrwxr-x  7 android android  4096 1215 20:09 bzrtp/
-rw-rw-r--  1 android android  2069 1215 19:45 CHANGELOG.md
drwxrwxr-x  8 android android  4096 1216 11:00 cmake/
drwxrwxr-x 10 android android  4096 1215 20:09 cmake-builder/
-rw-rw-r--  1 android android  5602 1215 19:45 CMakeLists.txt
drwxrwxr-x  2 android android  4096 1215 19:45 docker-files/
-rw-rw-r--  1 android android    10 1215 19:45 .envrc
drwxrwxr-x 26 android android  4096 1215 19:45 external/
-rw-rw-r--  1 android android  7121 1215 19:45 flake.lock
-rw-rw-r--  1 android android  4274 1215 19:45 flake.nix
drwxrwxr-x  9 android android  4096 1215 19:46 .git/
drwxrwxr-x  3 android android  4096 1215 19:45 .github/
-rw-rw-r--  1 android android   302 1215 19:45 .gitignore
drwxrwxr-x  9 android android  4096 1215 19:45 .gitlab-ci-files/
-rw-rw-r--  1 android android  1598 1215 19:45 .gitlab-ci-tunnel.yml
-rw-rw-r--  1 android android  3439 1215 19:45 .gitlab-ci.yml
-rw-rw-r--  1 android android  4552 1215 19:45 .gitmodules
drwxrwxr-x 17 android android  4096 1215 20:09 liblinphone/
-rw-rw-r--  1 android android 34523 1215 19:45 LICENSE.txt
drwxrwxr-x  9 android android  4096 1215 20:09 lime/
drwxrwxr-x 14 android android  4096 1215 20:09 mediastreamer2/
drwxrwxr-x  3 android android  4096 1215 20:09 msaaudio/
drwxrwxr-x  6 android android  4096 1215 20:09 msamr/
drwxrwxr-x  2 android android  4096 1215 20:09 msandroidcamera2/
drwxrwxr-x  3 android android  4096 1215 20:09 mscodec2/
drwxrwxr-x  4 android android  4096 1215 20:09 msoboe/
drwxrwxr-x  5 android android  4096 1215 20:09 msopenh264/
drwxrwxr-x  5 android android  4096 1215 20:09 mssilk/
drwxrwxr-x  3 android android  4096 1215 20:09 mswasapi/
drwxrwxr-x  4 android android  4096 1215 20:09 mswebrtc/
drwxrwxr-x  4 android android  4096 1215 20:10 mswinrtvid/
drwxrwxr-x 10 android android  4096 1215 20:10 ortp/
drwxrwxr-x  7 android android  4096 1215 20:10 postquantumcryptoengine/
-rw-rw-r--  1 android android 13876 1215 19:45 README.md
drwxrwxr-x  5 android android  4096 1215 19:45 tester/

开始编译:

# 设置Android SDK 路径
linphone-sdk$ export ANDROID_SDK_ROOT=/home/android/Android/Sdk
# 设置Android NDK 路径
linphone-sdk$ export PATH=$PATH:/home/android/Android/Sdk/ndk/20.0.5594570
linphone-sdk$ mkdir build
linphone-sdk$ cd build
# 参考官方
linphone-sdk/build$ cmake .. -DLINPHONESDK_PLATFORM=Android -DLINPHONESDK_ANDROID_ARCHS=arm64,x86,armv7 -DENABLE_SILK=YES -DENABLE_G729==YES
# 开始编译
linphone-sdk/build$ cmake --build . -j4

编译时间比较长, 耐心等待即可.

-DLINPHONESDK_ANDROID_ARCHS的值, 可以参考:

arm -> armeabi 已不受支持:

CMake Error at /home/android/Android/Sdk/ndk/20.0.5594570/build/cmake/android.toolchain.cmake:177 (message):
  armeabi is no longer supported.  Use armeabi-v7a.

在这里插入图片描述

linphone-sdk/cmake/Android/CopyLibs.cmake


编译完成

linphone-sdk/build$ ll linphone-sdk/bin/outputs/aar/
total 198508
drwxrwxr-x 2 android android      4096 1217 09:50 ./
drwxrwxr-x 4 android android      4096 1217 09:49 ../
-rw-rw-r-- 1 android android 167525201 1217 09:50 linphone-sdk-android-debug.aar
-rw-rw-r-- 1 android android  35736951 1217 09:49 linphone-sdk-android-release.aar

生成的linphone-sdk-android-release.aar, 便可以导入给APP开发用.

导入后, 出现找不到libc++_shared.so

Caused by: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.saike.ocs-cdHJzDKRk6PW1v0eDsFENQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.saike.ocs-cdHJzDKRk6PW1v0eDsFENQ==/lib/arm, /data/app/com.saike.ocs-cdHJzDKRk6PW1v0eDsFENQ==/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]] couldn't find "libc++_shared.so"
	at java.lang.Runtime.loadLibrary0(Runtime.java:1011)
	at java.lang.System.loadLibrary(System.java:1657)
	at org.linphone.core.FactoryImpl.<clinit>(Factory.java:727)
	at org.linphone.core.Factory.instance(Factory.java:49) 
	at com.saike.ocs.phone.SipPhone.loadSipLibs(SipPhone.java:51) 
	at com.saike.ocs.phone.PhoneManager$1.run(PhoneManager.java:60) 

在这里插入图片描述
照着改, 增加一行即可

+ 	file(COPY "${CMAKE_ANDROID_NDK}/sources/cxx-stl/llvm-libc++/libs/${_libarch}/libc++_shared.so" DESTINATION "linphone-sdk/android-${_arch}/lib/")

参考

linphone-sdk
集成第三so之dlopen failed: library “libc++_shared.so” not found
Fixed missing libc++_shared.so that happens sometimes

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

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

相关文章

HTC FOCUS3在PC端串流FOHEART H1数据手套(手柄)

本教程介绍使用FOHEART H1数据手套与HTC手柄驱动VR中的虚拟手运动&#xff0c;实现手部的追踪及定位。 本教程内容与之前使用腕带定位&#xff08;HTC FOCUS3在PC端串流FOHEART H1数据手套&#xff08;腕带&#xff09;&#xff09;不同&#xff0c;这次我们使用头显中自带的…

【Kuangbin简单DP】挤奶时间

4561. 挤奶时间 - AcWing题库 题意&#xff1a; 思路&#xff1a; 一开始的思路是把这么多的区间当作物品&#xff0c;然后选与不选&#xff0c;这样去搞线性DP 显然是不行的&#xff0c;因为这样答案就不知道怎么统计了 而且&#xff0c;我们是设阶段&#xff01;&#xf…

HSK汉语考试变革,您需要了解以下几点

2023年HSK考试可能有哪些变化汉语考试难度增加了还是减低了&#xff1f; 对现在的课程和教材有影响&#xff1f; 汉语老师怎么样应对&#xff1f;HSK考试变化猜想1.HSK3级考试和HSKK初级结合在一起 2.HSK4级考试和HSKK中级结合在一起 3.HSK5,6级考试和HSKK高级结合在一起HSKK考…

INTERSPEECH 2022|面向零样本声音克隆的内容相关细粒度说话人表征方法

本文由清华大学与腾讯 AI Lab、香港中文大学合作。 零样本说话人自适应&#xff08;zero-shot speaker adaptation&#xff09;&#xff0c;或称为零样本声音克隆&#xff0c;旨在根据任意一条参考语音&#xff08;reference speech&#xff09;合成训练过程中从未见过的说话人…

Leetcode:239. 滑动窗口最大值(C++)

目录 问题描述&#xff1a; 实现代码和解析&#xff1a; 暴力法&#xff08;会超时&#xff09;&#xff1a; 原理思路&#xff1a; 单调队列法&#xff1a; 原理思路&#xff1a; 单调队列&#xff1a; 模拟过程&#xff1a; 问题描述&#xff1a; 给你一个整数数组…

Python基础知识(二)

目录 顺序语句 条件语句 条件语句书写格式一及对比&#xff1a;if条件语句 条件语句书写格式二及对比&#xff1a;if...else...语句 条件语句书写格式三及对比&#xff1a;if...elif...else语句 空语句pass 条件语句的总结&#xff1a; 循环语句 while循环 与c/java/…

对于Muduo主从Reactor模式的理解

从12月20号开始看Muduo网络库&#xff0c;到28号的时候弄懂了EventLoop, Poller, Channel是怎么一回事&#xff0c;一番琢磨之后觉得还是应该发到博客上跟大家分享&#xff0c;特此记录。 对照linyacool那个webserver的实现&#xff0c;再看了一遍muduo的EventLoop, Poller ,C…

IDEA快速启动多个微服务模块 -idea如何开启Run DashBoard

文章目录 缘起 Run DashBoard面板如何开启开启 Run DashBoard 注意&#xff1a; 缘起 在idea里面如果需要启动多个项目的话&#xff0c;尤其是是比如微服务项目&#xff0c;动辄要启动五六个七八个应用&#xff0c;如果通过右上角那边启动会很不方便&#xff0c;你需要选择…

基于GIS简单处理世界土壤数据库(HWSD)的中国土壤数据集

来源&#xff1a;GIS前沿 一、 数据介绍 土壤属性表主要字段包括&#xff08;图1&#xff09;&#xff1a;详细描述请参考Harmonized World Soil Database (version 1.1).pdf文件&#xff0c;其中以T开头的土壤属性表示土壤上层的属性&#xff08;0-30cm&#xff09;&#xff…

【曲线全局逼近】

曲线全局逼近 本文是基于 这篇文章 翻译而来的&#xff0c;仅学习。 在插值中&#xff0c;插值曲线以给定的顺序通过所有给定的数据点。正如在全局插值页面中所讨论的&#xff0c;插值曲线可能会在所有数据点上摆动&#xff0c;而不是紧紧跟随数据多边形。为了克服这个问题&…

包装类的使用

文章目录一、单元测试方法的使用步骤二、包装类的使用基本数据类型、包装类、String类型之间的相互转化基本数据类型——>包装类注意包装类——>基本数据类型自动装箱与自动拆箱&#xff08;jdk5.0后&#xff09;基本数据类型、包装类——>String类型String类型——&g…

史上最全 Appium 自动化测试从基础到框架实战精华学习笔记(一)

1080402 31.8 KB 对测试人来说&#xff0c;Appium 是非常重要的一个开源跨平台自动化测试工具&#xff0c;它允许测试人员在不同的平台&#xff08;iOS、Android 等&#xff09;使用同一套 API 来写自动化测试脚本&#xff0c;这样可大幅提升代码复用率和工作效率。 本文汇总了…

郭盛华:警惕家庭智能扬声器中潜在的窃听风险

一名安全研究人员因识别Google Home智能扬声器中的安全问题而获得了107500美元的漏洞赏金&#xff0c;这些问题可能被用来安装后门并将其变成窃听设备。 国际知名网络黑客安全专家、东方联盟创始人郭盛华在一篇技术文章中透露&#xff1a;这些漏洞“允许无线附近的攻击者在设备…

服务的雪崩以及解决方案

文章目录一、什么是服务的雪崩二、服务雪崩形成的原因三、雪崩解决方案3.1 设置超时时间3.2 线程隔离&#xff08;舱壁模式&#xff09;3.3 熔断器&#xff08;断路器&#xff09;3.4 限流四、总结一、什么是服务的雪崩 服务的雪崩效应是一种因服务提供者不可用导致服务调用者…

从源码角度带你清楚分析Spring 的Lazy-init 延迟加载机制原理

lazy-init 延迟加载应用 ApplicationContext 容器的默认值行为是在启动服务器时将所有Singleton Bean 提前进行实例,提前实例化意味着作为初始化过程的一部分,ApplicationContext 实例会创建并配置所有的singleton Bean. 例如: <bean id"testBean" class"c…

张力控制PID增益(Kp)自适应算法详解(含SCL和梯形图完整源代码)

有关收放卷张力控制的详细内容,请参看下面的文章链接,这里不再赘述。 变频器简单张力控制(线缆收放卷应用)_RXXW_Dor的博客-CSDN博客张力控制的开闭环算法,可以查看专栏的其它文章,链接地址如下:PLC张力控制(开环闭环算法分析)_RXXW_Dor的博客-CSDN博客。https://blo…

ThinkPHP3.2.3_SQLi

文章目录ThinkPHP3.2.3_SQLi0x00 测试代码0x02 paylaod0x03 调用分析0x04 漏洞成因0x05 总结ThinkPHP3.2.3_SQLi 刚好有朋友在测一个目标是tp3.2.3框架的站遇到了一些问题 顺手跟一下流程复现一下吧。 0x00 测试代码 <?php namespace Home\Controller; use Think\Contr…

启岁新程|跨越2022,2023一起追光而行!

和气渐入东风&#xff0c;岁杪将迎春临&#xff0c; 时间的车轮即将驶离2022开往2023&#xff0c; 回首来时路&#xff0c;我们收获满满&#xff0c; 展望新征程&#xff0c;我们斗志昂扬...... 2022注定是不平凡的一年&#xff0c; 在这一年里&#xff0c; 我们与行业同行…

深度学习:07 CNN经典模型总结(LeNet-5、AlexNet、VGG、GoogLeNet、ResNet)

目录 CNN经典网络模型 LeNet-5 AlexNet VGG GoogLeNet (Inception) ResNet 如何选择网络 CNN经典网络模型 以下介绍了LeNet-5、AlexNet、VGG、GoogLeNet、ResNet等&#xff0c;它们通常用于图像的数据处理&#xff0c;那么卷积神经网络是否应用于自然语言分类任务呢&am…

.net可视化表单设计工具

在很多软件系统中&#xff0c;表单开发都是很重要的一个部分。在表单开发中&#xff0c;往往会遇到重复开发的问题&#xff0c;例如在页面搭建系统中&#xff0c;除了组件本身的逻辑&#xff0c;配置组件数据的表单通常也需要开发人员重复手动开发。这就导致开发人员不仅要维护…