一、集成的三方平台是容联云通讯
集成该平台的原因是公司领导去选择的,理由是开始是2000个账号以内是免费使用的。
对比其他几个平台,该平台源码相对容易抽离出来,只取音视频功能和IM发送消息(IM消息主要是向呼叫方提供自己的信息,官网的demo在音视频时只显示了一个会话ID,这不符合我的要求)。
二、源码地址
官网地址:https://www.yuntongxun.com/
官网源码:https://www.yuntongxun.com/doc/ready/demo/1_4_1_1.html
项目地址:https://github.com/XW837156540/RongyunDemo
三、准备工作
1、官网注册账号,创建应用,获取应用的appkey 和 apptoken,初始化sdk的时候需要用到。
2、根据官网开发文档的提示,下载需要的so文件和jar包,复制必要的权限,配置gradle。
四、初始化sdk ,登陆账号
根据官网提供的源码,截取出初始化登陆,音视频通话和IM聊天三个辅助类(根据自己的需求做了简化,满足了音视频通话的功能)。
初始化辅助类 SDKCoreHelper
通话辅助类 VoIPCallHelper
IM聊天辅助类 IMChattingHelper
1、由于官网本身的原因,sdk初始化必须在Application创建完成之后
2、初始化方法 SDKCoreHelper.init(context);
3、在初始化成功回调onInitialized()方法中
(1)设置IM消息提醒IMChattingHelper.getInstance().initManager();
(2)设置接收来电时默认调转的页面(默认跳转音频页面,音视频继承自同一个ECSuperActivity,在ECSuperActivity中根据来电类型跳转不同页面)
Intent intent =new Intent(getInstance().mContext, VoiceActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(getInstance().mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
ECDevice.setPendingIntent(pendingIntent);
(3)设置登陆参数
ECInitParams mInitParams = ECInitParams.createParams();
mInitParams.reset();
mInitParams.setUserid(utils.getUserNumber());//登陆手机号码
mInitParams.setAppKey(API.appKey);//官网注册的appkey
mInitParams.setToken(API.appToken);//官网注册的appToken
mInitParams.setMode(getInstance().mMode);
4、登陆方法
ECDevice.login(mInitParams);
五、通话功能
1、音频呼出
String mCurrentCallId = VoIPCallHelper.makeCall(ECVoIPCallManager.CallType.VOICE,id,name);
2、视频呼出
ECDevice.getECVoIPSetupManager().setVideoView(mRemote_video_view, mLocalvideo_view);
String mCurrentCallId =
ECDevice.getECVoIPCallManager().makeCall(ECVoIPCallManager.CallType.VIDEO,id);
呼叫功能可以根据mCurrentCallId 判断是否呼叫成功
3、接听
VoIPCallHelper.acceptCall(mCallId);
4、拒绝接听
VoIPCallHelper.rejectCall(mCallId);
5、挂断
VoIPCallHelper.releaseCall(mCallId);
6、免提(根据状态不同,切换图片)
VoIPCallHelper.setHandFree();//设置免提
boolean is = VoIPCallHelper.getHandFree();//判断是否是免提
mIvFreeHands.setImageResource(is ? R.mipmap.iv_free_hands : R.mipmap.iv_free);
7、静音
VoIPCallHelper.setMute();//设置静音
boolean isMute = VoIPCallHelper.getMute();//判断是否是静音
mIvMute.setImageResource(isMute ? R.mipmap.iv_mute_state : R.mipmap.iv_mute);
8、通话过程监听
VoIPCallHelper.setOnCallEventNotifyListener(this);
//VoIP通话状态通知
public interface OnCallEventNotifyListener {
// 正在连接服务器
// callId 通话的唯一标识
void onCallProceeding(String callId);
void onMakeCallback(ECError arg0, String arg1, String arg2);
//对方正在振铃
void onCallAlerting(String callId);
// 对方应答(通话完全建立)
void onCallAnswered(String callId);
/**
* 呼叫失败
* @param callId 通话的唯一标识(有可能为Null)
* @param reason 呼叫失败原因
*/
void onMakeCallFailed(String callId, int reason);
// VoIP通话结束
void onCallReleased(String callId);
void onVideoRatioChanged(VideoRatio videoRatio);
}