美文网首页
Android接入音视频通话

Android接入音视频通话

作者: 骑着蜗牛溜北二环 | 来源:发表于2018-10-31 14:29 被阅读0次

一、集成的三方平台是容联云通讯

集成该平台的原因是公司领导去选择的,理由是开始是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);

}

相关文章

网友评论

      本文标题:Android接入音视频通话

      本文链接:https://www.haomeiwen.com/subject/vvhatqtx.html