继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【音视频】Android CallKit 开发指南

一只名叫tom的猫
关注TA
已关注
手记 346
粉丝 62
获赞 329

简介

CallKit 是融云音视频通话功能的 UI 界面 SDK。包含了单人、多人音视频通话的界面的各种场景和功能。您可以快速的集成 CallKit 来实现丰富的音视频通话界面,并进行自己的 UI 定制开发。同时我们开源了 CallKit,您可以根据您的需要去使用。

GitHub 项目:CallKit 开源代码

开通方式

音视频服务开通,请参考音视频开通方式说明。

使用说明

由于底层引擎技术不同,2.6.0 之后的音视频 SDK 与 2.6.0 之前的 SDK 中的实时音视频不能互通。

音视频 SDK 为商用收费功能,之前的 SDK 中的实时音视频为免费测试功能,如果您还想使用之前的实时音视频,可以使用 2.5.2 版本,2.6.0 之后的音视频服务使用说明如下:

集成说明

1、 首先请参考官网文档集成 CallKit SDK 。

2、 src/main/java/io/rong/imkit 下面是 Call 界面的源码,可以自行修改以满足自己的需求。

3、 打开 src/main/AndroidManifest.xml,下面是 Call 相关的代码。

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />

Call 用到的权限。

<activity
    android:name="io.rong.imkit.MultiVideoCallActivity"
    android:launchMode="singleTop"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="stateHidden|adjustResize">
    <intent-filter>
        <action android:name="io.rong.intent.action.voip.MULTIVIDEO" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

<activity
    android:name="io.rong.imkit.SingleCallActivity"
    android:launchMode="singleTop"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="stateHidden|adjustResize">
    <intent-filter>
        <action android:name="io.rong.intent.action.voip.SINGLEVIDEO" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    <intent-filter>
        <action android:name="io.rong.intent.action.voip.SINGLEAUDIO" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>
<activity
    android:name="io.rong.imkit.MultiAudioCallActivity"
    android:launchMode="singleTop"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="stateHidden|adjustResize">
    <intent-filter>
        <action android:name="io.rong.intent.action.voip.MULTIAUDIO" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

<activity android:name="io.rong.imkit.CallSelectMemberActivity" />

Call 功能中使用到的 activity 和 receiver 。

4、 用户使用 Call 期间融云保持 connected 状态。

5、 在群组中,启动视频通话或音频通话时,需要设置群组成员信息,通过 getMemberList 方法返回群组成员的 userId 的集合。以确保选择成员页面能正确显示所有群组成员。设置方法如下:

RongCallKit.setGroupMemberProvider(new RongCallKit.GroupMembersProvider() {    @Override

    public ArrayList<String> getMemberList(String groupId, final RongCallKit.OnGroupMembersResult result) {        //返回群组成员userId的集合

    }
});

发起通话

在私聊或讨论组的会话界面,点击输入框右侧的+号,就可以选择“语音聊天”和“视频聊天”了。

image

或者你可以根据自己的代码逻辑,在需要的地方调用下面接口发起呼叫。

/**
 * 发起单人通话。
 *
 * @param context   上下文
 * @param targetId  会话 id
 * @param mediaType 会话媒体类型
 */RongCallKit.startSingleCall(Context context, String targetId, CallMediaType mediaType);/**
 * 发起多人通话
 *
 * @param context          上下文
 * @param conversationType 会话类型
 * @param targetId         会话 id
 * @param mediaType        会话媒体类型
 * @param userIds          参与者 id 列表
 */RongCallKit.startMultiCall(Context context, Conversation.ConversationType conversationType, String targetId, CallMediaType mediaType, ArrayList<String> userIds);

CallKit 默认音频通话最大人数为 20 人,视频通话最大人数为 9 人。

收到呼入的通话

如果 App 在前台或者在后台且并没有被系统回收时,当收到呼叫,会自动弹出通话界面。如果 App 已经被回收,2.6.0 以上的版本需要集成远程推送。这样即使被回收了也能收到 Call 的推送消息,点击推送消息启动 App 会自动弹出通话界面。详细请参考远程推送集成文档

通话回调接口

IRongCallListener 是通话状态的监听类,CallKit 的 RongCallProxy.java 已经实现了该监听,并且会回调到 BaseCallActivity 中的各个方法,您可以继承 BaseCallActivity,根据需要复写其中的对应方法,即可获取对应的通话回调。

public class MyCallActivity extends BaseCallActivity {

    @Override
    public void onCallOutgoing(RongCallSession callProfile, SurfaceView localVideo) {        super.onCallOutgoing(callProfile, localVideo);        /**
         * 此处添加你的代码逻辑。
         **/
    }    @Override
    public void onCallDisconnected(RongCallSession callProfile, RongCallCommon.CallDisconnectedReason reason) {        super.onCallDisconnected(callProfile, reason);        /**
         * 此处添加你的代码逻辑。
         **/
    }    @Override
    public void onOutgoingCallRinging() {        super.onOutgoingCallRinging();        /**
         * 此处添加你的代码逻辑。
         **/
    }    @Override
    public void onIncomingCallRinging() {        super.onIncomingCallRinging();        /**
         * 此处添加你的代码逻辑。
         **/
    }    @Override
    public void onCallConnected(RongCallSession callProfile, SurfaceView localVideo) {        super.onCallConnected(callProfile, localVideo);        /**
         * 此处添加你的代码逻辑。
         **/
    }    @Override
    public void onError(RongCallCommon.CallErrorCode errorCode) {        super.onError(errorCode);        /**
         * 此处添加你的代码逻辑。
         **/
    }
}

如果上述方法不适合,您还可以通过修改 RongCallProxy.java 的代码,实现自己应用的监听。示例如下:

public class RongCallProxy implements IRongCallListener {

    private IRongCallListener mCallListener;  // 增加一个监听。

    /*设置自己应用的监听*/
    public void setAppCallListener(IRongCallListener listener) {        this.mAppCallListener = listener;
    }   /*修改对应的通话状态回调的方法,使其回调到您设置的应用自身的监听*/
    @Override
    public void onCallOutgoing(RongCallSession callSession, SurfaceView localVideo) {        if (mCallListener != null) {
          mCallListener.onCallOutgoing(callSession, localVideo);
        }        /*增加的代码,回调应用设置的监听*/
        if(mAppCallListener != null) {
          mAppCallListener.onCallOutgoing(callSession, localVideo);
        }
      }
      ... // 根据您的需要,同样的方式修改其它通话状态回调函数。
    }

修改完上述方法后,在您的应用里调用 setAppCallListener() 设置您自己的监听。

通话界面的控制

由于通话界面的需求是多种多样的,融云设计了一套通用的 UI 界面,开源供用户使用。对于普通用户来说,CallKit 应该满足需求;而对于有特殊需要的用户,可以自己来修改 CallKit 的源代码来满足需求。

需要提醒开发者的是,如果您在开发过程中,没有集成融云 SDK 中的聊天会话界面 (ConversationFragment),您还需将 RongCallModule 中的变量 mViewLoaded 在该类的 onCreate 方法中设置为 True。

原文链接:http://www.apkbus.com/blog-945455-77587.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP