2024年3月13日发(作者:)

基于linphone实现视频通话的小结

Linphone解析

先看一下linphone的实现结构:

由上图可知,Linphone内部有明显的用户接口和内核引擎区分,这为我们基于它提供的

接口进行再次开发提供了可能。其中liblinphone是内核的核心,这个库提供了linphone功

能的所有应用。Liblinphone库是一个功能巨大的SIPVOIPVIDEO SDK. 我们可以用它提供的

功能在我们想要的应用上开发视频通话功能。

Liblinphone库的结构包括:

mediastreamer2,用于音视频流处理的多媒体SDK;oRTP,网络协议库;eXosip2,SIP

用户代理库。文档查看:

/nongnu/linphone/docs/liblinphone/

遗留问题:关于操作系统底层的硬件接口结构不清楚,如何为C语言程序提供JAVA接口,

ANDROID的NDK原理不清楚。

Linphone代码java层的大致结构是这样的:

主activity为linphoneActivity,它总领着其他的程序块。

linphoneService做linphone在后台需要做的事,因此会有许多监听器,比如监听来电。

linphoneManager是linphone操作包,它的函数能实现初始化以及各类情况的实现。

linphoneCore封装了C语言通信编码实现,环境变量初始化等功能。

DailerActivity管理打接电话。

用户点击linphone的图标后就开始了linphone软件,这时linphoneActivity开始运行,它

使linphoneService开始,并做一些linphone帐号密码的登录操作同时引导用户进行环境变

量的设置(LinphonePreferencesActivity)。

环境变量都储存在sharedPreferences中,它是整个工程共享的一个变量池。这些环境变量有

音频和视频编码设置选择,帐号密码,服务器设置,自动启动,视频设置,回音校正,网络

协议设置。

当linphoneService开始的时候它运行ndStart->linphoneManager

开始实例化,设置电话铃音以及配置信息的保存路径,依据工程的环境变量以及配置信息初

始化LinphoneCore,设置PlaybackGain,周期性地检测核对Sip数据,设置网络协议和相应

的端口,根据CPU速度以及机型计算能为用户提供的编解码方式,计算能否回音校正,传

递账户服务器信息到LInphoneCore中,得到网络连接操作对象和连接信息Info并告知

LInphoneCore。

public synchronized static final LinphoneManager createAndStart(

Context c, LinphoneServiceListener listener) {

if (instance != null)

throw new RuntimeException("Linphone Manager is already initialized");

instance = new LinphoneManager(c);

eListener = listener;

ibLinphone(c);

return instance;

} //From LinphoneManager