美文网首页
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