linphone android ui流程分析(2)

主要为分析linphone android ui流程包括
一、初始化流程;二、音视频通话的呼叫和接通逻辑;三、im消息的发送和接收;

一、
1、初始化相关的方法,有个监听账户信息变化的轮询方法
LinphoneManager.createAndStart(this);
核心会调用native的iterate的方法
2、设置配置
LinphoneManager.getLc().addProxyConfig
核心会调用native的addProxyConfig方法
3、添加账户
LinphoneManager.getLc().addAuthInfo
核心会调用native的addAuthInfo方法


linphone sdk的简单架构思想:
1、c层大部分的native方法都放类的linphoneCoreImpl类里,并且大部分都为私有方法;
另外提供公有的方法,并把native方法做重新方法,也是实现接口linphoneCore的方法
2、LinphoneManager做为对外提供的类,初始化方法为通过工厂类初始化core的实例,并提供LinphoneCore实例的方法


遗留问题: 按这种方式重写以后,始终没有进入注册sip服务器的流程 还需要跟这个问题;://todo//


二、
主叫入口较多、选择拨号盘呼叫入口
1、主页面linphoneActivity的DialerFragment,输入完号码点击拨打按钮
 LinphoneManager.getInstance().newOutgoingCall(mAddress);
2、linphoenManager的呼叫方法,最终会调c层的native方法,呼叫完后回调当前页面linphoneActivity的callState回调
处理state逻辑
呼出:startActivity(new Intent(LinphoneActivity.instance(), CallOutgoingActivity.class));
3 CallOutgoingActivity 同时又监听 callState回调,如果接听方接听或者挂断这边做相应处理
接听以后 LinphoneActivity.instance().startIncallActivity(mCall); 并finish当前页面//
同时也监听callState回调
——————————————————————————————————————————————————————————————————————
被叫:
1、linphoenServie callState回调 唤起LinphoneActivity
2、来电:startActivity(new Intent(LinphoneActivity.instance(), CallIncomingActivity.class));
answer接听逻辑:LinphoneActivity.instance().startIncallActivity(mCall);
3、同上
————————————————————————————————————————————————————————
总结流程接听和呼出流程
linphoneActivity=》CallOutgoingActivity/CallIncomingActivity(finish) =>callActivity
 
————————————————————————————————————————————————————————
其他待流程补充:
前后台切换,通知栏显示挂起,点击通知栏切回通话页面等;


三 、
发送消息:入口chatFragment的sendTextMessage
1、LinphoneChatMessage message = chatRoom.createLinphoneChatMessage(messageToSend);
 chatRoom.sendChatMessage(message);
 最终调c层native的方法native sendChatMessage


接收消息入口看回调chatfragement和chatlistfragment的 messageReceived回调

linphone的消息刷新只做的页面实时刷新,存储的操作是c层的native层。

初始化流程和登陆、通话等的native都在linphoneCOre,而im在 linphonechatRoom,那im是怎么被初始化的呢?
im主要关注几点:
1、一个是core的 iterate,轮询会可以获取sip消息;
2、linphonechatRoom的so库是什么时候加载的,应该也是linphone.so这个库;
3、关于回调需要参看c源码获取更多的信息;需要关注 iterate和回调的关系,
猜想应该是iterate是类似android 的messageQueue的处理,native层实现了不同回调的分发
代码在流程分析里有涉及到一点点
linphonecore.cc 初始化的时候核心代码 会设置回调
if (cbs != NULL) {
    _linphone_core_add_callbacks(lc, cbs, FALSE);//这个cbs就是java层的listener
} else {
    LinphoneCoreCbs *fallback_cbs = linphone_factory_create_core_cbs(linphone_factory_get());
    _linphone_core_add_callbacks(lc, fallback_cbs, FALSE);
    belle_sip_object_unref(fallback_cbs);
}
四、通话数据统计:
入口 CallActivity 的call_quality按钮进入,
LinphoneCall = LinphoneManager.getLc().getCurrentCall()
//轮询刷新显示
PayloadType payloadAudio = params.getUsedAudioCodec();//音频编解码统计数据
PayloadType payloadVideo = params.getUsedVideoCodec();//视频编解码统计数据
LinphoneCallParams params = LinphoneCall.getCurrentParams();//主要视频相关的统计数据


五、设置模块:
入口linphoneActvity的drawerlayout的条目点击事件:changeCurrentFragment(SettingFragment)
1、音视频通话设置:
音频编解码设置g729 opus speex等,回音消除设置,自适应速率设置,编解码比特率限制设置,
回音设置:LinphonePreferences.setEchoCancellation()=>  getLc().enableEchoCancellation(enable);
LinphoneManager.getLcIfManagerNotDestroyedOrNull().enablePayloadType(pt, enable);
视频编解码设置VP8?H264?,缺省发起/接听方式设置,视频分辨率和比例设置,全局弹框设置?
anrdoid22支持设置H264,
其他共通的设置接口则是 LinphonePreferences => LpConfig的native方法;
2、网络连接设置:
prefs.setWifiOnlyEnabled()=>LpConfig的native方法
nat :getLc().setNatPolicy(nat)
3、其他高级设置:订阅好友列表、debug调试,后台模式、开机启动、显名等设置
订阅:getConfig().setBool("app", "friendlist_subscription_enabled", enabled)
getConfig().setBool("app", "debug", enabled);
后台:getConfig().setBool("app", "background_mode", enabled);
通知:getConfig().setBool("app", "show_service_notification", enable);
开机启动:getConfig().setBool("app", "auto_start", autoStartEnabled);
有些保存的值用native做存取而已,使用可能还在java层使用?
开启启动逻辑public class BootReceiver extends BroadcastReceiver
仅后台模式是,作为主页面后退时如果后台模式则不关闭service;//缺省为后台模式 ;







  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值