2.8.+版本 如何集成音视频功能

如何集成音视频功能,集成音视频流程
发布时间: 2016-07-17 21:20

回答:

融云实时音视频包含单人、多人语音,视频通话,属于收费功能,需要开通该功能,然后才可以集成开发。

音视频包含两部分:1.开源的 RongCallKit 2.lib 部分 RongCallClient。


1. 如果您的 APP 中已经集成了融云的会话列表,会话界面。

    a. RongCallModule您就不用做任何修改,所有的通话界面,通话流程 sdk 已经集成。

    b. 通话界面包含:SingleCallActivity(两人音视频通话),MultiAudioCallActivity(多人语音通话界面),MultiVedioCallActivity(多人视频通话界面)。

    c. 最小化悬浮窗:CallFloatBoxView

如果您的 app 启动后没有进入会话列表、会话界面,也想收到 voip 请求,需要注意在RongCallModule中:

/**
 * 此方法的目的是,防止 voip 通话界面被会话或者会话列表界面覆盖。
 * 所有要等待会话或者会话列表加载出后,再显示voip 通话界面。
 * <p>
 * 当会话列表或者会话界面加载出来后,此方法会被回调。
 * 如果开发者没有会话或者会话列表界面,只需要将下面的 mViewLoaded 在 onCreate 时设置为 true 即可。
 */
@Override
public void onViewCreated()

   

以上已经全部实现了音视频接收来电,拨出电话的整个过程,如果需要自定义,您只需要修改对应的通话界面即可。

以上部分全部开源。



2. 如果您的 app 没有会话列表,会话界面,流程如下:


2.1 融云 SDK 初始化后,通过 RongCallClient 注册来电监听,对方邀请您的通话都会通过此方法回调。此方法要设置一个全局的监听,最好在 application 中,保证应用存活的情况下不被回收。

/**
 * 设置通话来电监听
 *
 * @param listener 来电监听
 */
public static void setReceivedCallListener(final IRongReceivedCallListener listener)
public interface IRongReceivedCallListener {
    /**
     * 来电回调
     * @param callSession 通话实体
     */
    void onReceivedCall(RongCallSession callSession);

    /**
     * targetSDKVersion>=23时检查权限的回调。当targetSDKVersion<23的时候不需要实现。
     * 在这个回调里用户需要使用Android6.0新增的动态权限分配接口requestCallPermissions通知用户授权,
     * 然后在onRequestPermissionResult回调里根据用户授权或者不授权分别回调
     * RongCallClient.getInstance().onPermissionGranted()和
     * RongCallClient.getInstance().onPermissionDenied()来通知CallLib。
     * 其中audio call需要获取Manifest.permission.RECORD_AUDIO权限;
     * video call需要获取Manifest.permission.RECORD_AUDIO和Manifest.permission.CAMERA两项权限。
     * @param callSession 通话实体
     */
    void onCheckPermission(RongCallSession callSession);
}


2.2.发起通话前,注册通话状态监听。此方法只在一通电话中有效,通话结束可以被销毁,可以在 activity 中注册。

/**
 * 设置通话状态回调
 *
 * @param callListener 通话状态监听
 */
public void setVoIPCallListener(IRongCallListener callListener)


2.3.使用 RongCallKit 中的方法发起音视频通话。

发起后,通话的状态变化都是通过 2.2 所注册的监听来回调通知。

通过 RongCallKit 接口发起音视频通话,会自动跳转到对应的通话界面。

/**
 * 发起单人通话。
 *
 * @param context   上下文
 * @param targetId  会话 id
 * @param mediaType 会话媒体类型
 */
public static void startSingleCall(Context context, String targetId, CallMediaType mediaType)
/**
 * 开始多人通话。
 * 返回当前会话用户列表提供者对象,用户拿到该对象后,异步从服务器取出当前会话用户列表后,
 * 调用提供者中的 onGotUserList 方法,填充 ArrayList<String> userIds 后,就会自动发起多人通话。
 *
 * @param context          上下文
 * @param conversationType 会话类型
 * @param targetId         会话 id
 * @param mediaType        通话的媒体类型:CALL_MEDIA_TYPE_AUDIO, CALL_MEDIA_TYPE_VIDEO
 * @return 返回当前会话用户列表提供者对象
 */
public static ICallUsersProvider startMultiCall(final Context context, final Conversation.ConversationType conversationType, final String targetId, final CallMediaType mediaType)


2.3 您也可以通过 RongCallClient 中的接口发起通话,但是这些是没有界面的,无法自动做界面跳转。

/**
 * 发起一个通话
 *
 * @param conversationType 会话类型
 * @param targetId         目标会话id
 * @param userIds          邀请参与通话的用户ID列表
 * @param mediaType        发起的通话媒体类型
 * @param extra            附加信息
 * @return 呼叫id
 */
public String startCall(Conversation.ConversationType conversationType, String targetId, List<String> userIds, RongCallCommon.CallMediaType mediaType, String extra)


我对此仍有疑问!继续追问