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


发布评论