port exosip to android

 

Port exosip to android platform isn't a difficult task because exosip doesn't rely on any special system calls that aren't available on android. It only requires osip to compile, which can also be easily ported.
As an example, I created two applications to run against exosip lib. One is a native application that can run inandroid shell, the other is an java application that interact with exosip through jni. The dependency relationship between modules is:


The diagram below depicts the organization of files. They're organized this way so that they can be compiled through android ndk build system.

exosip_root (NDK_MODULE_PATH environment variable points here) 

To comply with ndk build system's requirements, we create a directory named jni under sip_jni and sip_exe module, and place actual source file there. The Android.mk and Application.mk (optional) are placed in the jni directory as well. Keeping files this way, we can issue ndk-build command right in sip_jni or sip_exe directories to compile applications.
Note that we don't create jni directory for libosip and libexosip, their Android.mk is placed directly under libosipand libexosip directories. This is because they are dependent on by application modules. We don't need compile them directly, instead, the build system will build them automatically while building applications. In order to help build system find libosip and libexosip, we must set NDK_MODULE_PATH environment variable to the directory that directly containing  libosip and libexosip. The build system will search for them based on directory name, so their names matter.

To port exosip to android, the essential task is to create the Android.mk file, which specifies source files, c flags, ld flags, dependent libraries. We define HAVE_TIME_H and HAVE_SYS_SELECT_H to compile exosipsuccessfully. And we define ENABLE_TRACE and OSIP_MT to enable logging and multi-threading. In the last line, $ ( call import - module , libosip ) tells the build system that exosip depends on osip, and all header files exported by osip ( LOCAL_EXPORT_C_INCLUDES := $ ( LOCAL_C_INCLUDES ) )  will be included by exosipautomatically.  
import-module is a feature that isn't available in the build system in android source tree. It enables us organizing our projects in arbitrary manner. For example, we can place libosip and libexosip directories in another directory. The build system can still find them as long as NDK_MODULE_PATH is set to the directory containing them. It's much more flexible than specifying dependency relationship with relative path. 

Sample: 
The sample for this post is available at: 
http://code.google.com/p/rxwen-blog-stuff/source/browse/trunk/android/exosip_sample/ 
It shows how to:

  1. use ndk build system
  2. use stl in c++ code
  3. create a very basic exosip application
  4. call native code from java
  5. call java code from native code

References: 
ndk document 
exosip user manual

android上的sip软电话 第一:开发原代码 第二:支持视频通话候选:linphone是一个成熟的跨平台sip软电话,但是它的android版本刚刚出来,但是目前还不支持视频通话。底层使用的库是eXosip。模拟器上开源运行,能够拨打和接听电话,但是没有语音,只是状态会成为connected。sipdroid也是开源的,比较成熟,支持视频通话。模拟器上提示:not suitable data network。Imsdroid支持视频通话,底层库是doubango。模拟上提示:network not activi,也找不到在PC机上的 阅读详情

相关推荐

基于exosip 编写呼叫流程实例

1、已经编译生成号exosip相关库, 2、复制如下代码生成UAC,该实例使用的是windows控制台程序,对于sdp的解析部分需修改一下 代码如下: #include <eXosip2/eXosip.h> #include <stdio.h> #include <stdlib.h> #include <winsock2.h> int ma...

zzqgtt的专栏 1万+

通过Ubuntu16.04编译Android下的exosip动态库

通过Ubuntu16.04编译Android下的exosip动态库1、下载exosip2、编译exosip 1、下载exosip 地址: http://download.savannah.nongnu.org/releases/exosip/ 2、编译exosip 1.解压压缩文件 tar -zxvf libeXosip2-4.1.0.tar.gz 2.在文件夹libeXosip2-4.1.0下新建文件夹jni,将目录下的include、tools及src拷贝到jni文件夹中。 3.将osip生成的li

oYouHuo的专栏 757

全双工通话PortSIP目前的功能实现

为了实现智能客服,我们在研究全双工的通话系统。目前底层使用的是商用软件 PortSIP,对方可以付费定制开发需要的功能,同时也提供了较便宜的 SDK 供用户自己开发。经过三周左右的调研与测试,目前已经把我们需要的功能进行了基础的实现。但是由于本人知识水平有限,对 C# 、C 编程语言不熟悉,所以实际实现有些拙劣。本文主要讲如下内容:1. 介绍理想化系统,2. 介绍目前的实际实现,3. 实现中遇到的...

yuguo7336761的博客 4460

Android 编译 osip/eXosip

【代码】Android 编译 osip/eXosip。

u013183495的专栏 485

基于eXosip的SIP客户端

sip客户端部分代码

Cong的专栏 1万+

使用Android NDK编译Android平台的eXosip库

使用Android NDK编译Android平台的eXosip库,有静态库和动态库。

eXosip订阅问题分析

eXosip订阅问题分析 订阅报文 通知报文 刷新订阅失败报文

yjkhtddx的专栏 973

eXosip-build-android.sh

使用ndk编译eXosip安卓端库执行脚本,ndk编译需要指定configure参数及设置相关路径,

oSIP协议栈(及eXoSIP、Ortp等)使用入门(转)

oSIP协议栈(及eXoSIP、Ortp等)使用入门(转)   转自http://mbstudio.spaces.live.com/blog/cns!C898C3C40396DC11!955.entry   一直没空仔细研究下oSIP,最近看到其版本已经到了3.x版本,看到网上的许多帮助说明手册都过于陈旧,且很多文档内容有点误人子弟的嫌疑~~   Linux下oSIP的编

wanghaobo920的专栏 3727

exosip2协议栈原理分析以及总结

linphone项目中sip协议层exosip协议分析

exosip2-5.0.0及手冊

网上下载的exosip协议代码及使用手册说明。voip电话开发的sip协议。

eXosip2研究笔记

1.全局变量eXosip的初始化全局变量eXosip是eXosip2库工作的核心,它通过osip成员变量与osip库中的osip对应起来,整个协议栈的实现,都是在eXosip的基础上运行的。首先我们看看eXosip_t结构体。  struct eXosip_t  {    struct eXtl_protocol *eXtl;    char transport[10];    char *user_agent; /*消息中会添加这个头域,类似于打广告! */    eXosip_call_t *j_cal

O(∩_∩)O~~ Ёvery Dāy 5184

支持iLBC的Android 版SIP Phone的源代码

Android 版本SIP phone的源代码,基于osip/exosip/ortp/iLBC/mediastreamer2(mailto: dotphoenix@qq.com)

eXosip入门学习(一):注册流程

本文章借鉴:基于GBT28181:SIP协议组件开发-----------第五篇SIP注册流程eXosip2实现(二) - 程序人生qq1269122125 - 博客园 (cnblogs.com)

路虽远,行则将至 2329

WRF实战:自定义Vtable解析ECMWF海温数据的关键步骤与技巧

本文详细介绍了在WRF模型中自定义Vtable以解析ECMWF海温数据的关键步骤与技巧。通过解剖GRIB文件、编写自定义Vtable条目以及配置METGRID.TBL,解决了ECMWF数据与WRF模型对接的难题,为海洋气象和台风模拟研究提供了高精度数据输入方案。

weixin_29279101的博客 338

一种基于改进YOLOv8并与ORB-SLAM3融合的动态环境密集点云同步定位与建图(SLAM)方法

文章提出了一种基于改进 YOLOv8 与 ORB-SLAM3 融合的动态环境稠密点云 SLAM 方法,通过引入GSConv 卷积模块和VoVGSCSP 特征融合模块优化 YOLOv8 的轻量性,结合实时目标检测与语义分割技术去除动态特征点,显著提升了动态场景下的位姿估计精度。

2401_87345388的博客 1942

exosip编译

编译流程如下: 1.到官网下载4.0的版本,并解压 2.编写编译脚本,如下 #!/bin/sh export NDK_ROOT=/home/x/env/android-ndk-r15c export PREBUILT=$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 export PLATF

w180600的博客 1001

104报文解析工具

可选择包含报文的文本文件或日志文件进行解析,可选择按条数范围或时间范围,输出结果可以在报文解析显示区,也可以输出到文件。可以对文本内容的报文文件进行高级分析,包括遥信遥测等通讯数据的具体信息,通讯帧的统计,通讯次数的统计,各种错误的分析,报文的定位功能,传输的文件具体内容等。输入完成后点击工具栏的解析报文按钮或使用右键菜单的解析就可以对报文进行解析。在报文输入区输入待解析报文并解析后,解析结果就显示在报文解析显示区和报文定位展示区及报文定位条目区。当有多条报文解析后,可以通过报文列表树具体定位某条报文。

XZHOUMIN的博客 5952

Flutter 三方库 gesturesshare 从 0 到 1:鸿蒙隔空传送分享插件的开发、升级与发布实战

本文详述了 Flutter for OpenHarmony 三方库 gesturesshare 从零开发到发布全过程:基于 HarmonyOS 隔空传送能力,实现跨设备图片与 App Linking 一键分享。涵盖双端代码设计、API 26 升级、真机验证及 Pub 发布流程,提供 Dart/ArkTS 对照与踩坑复盘。项目填补 Flutter 生态空白,推动鸿蒙多设备交互能力普及,助力开发者快速接入系统级功能。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 26

基于python的奥运会历史数据分析【120年】

数据分析实战案例

xff123456_的博客 3339

分子模拟入门教程 | 低调使用 建议收藏

该方法只需要原子的核电荷和少数模拟的环境参数作为输入,所有的性质都是通过求解薛定谔方程得到的,不需要使用任何经验参数。经典的原子水平的分子模拟已经成为提高我们对材料科学和生命系统中分子过程理解的最流行的方法之一。全原子模拟是一种非常强大的以原子分辨率呈现信息的方法,因为在原子模拟中,一个粒子代表一个特定的原子。随着计算机硬件和模拟技术的快速发展,分子模拟不仅可以解决基本的、常规的化学问题,还可以应用于各种复杂体系。然而,由于问题的复杂性以及严重依赖于现象的现实情况,最好是逐案确定合适的模拟方法。

pysonger的博客 786
上一篇: CSipSimple拨打电话机制分析
下一篇: imsdroid 学习(初认识)
whatsyourname
博客等级 码龄23年 13粉丝 326原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值