文档反馈
文档反馈

云信一对一视频通话(Android)

本文主要展示如何集成云信的 NIM SDK 以及 NERTC SDK,快速实现一对一视频通话功能。您可以直接基于我们的 Demo 修改适配,也可以使用我们提供的 NERtcVideoCall 组件,实现自定义 UI。

功能介绍

环境准备

  1. 创建应用并获取 App Key
  2. 在控制台中为指定应用开通信令和音视频通话 2.0 产品。

    详细操作请参考开通服务

  3. 下载场景Demo,并将 config.cpp 中的 appkey 更换为自己的 AppKey。

    为了安全起见,建议将 AppKey 放在 cpp 文件中。

  4. 替换 config.cpp 中的 baseURL 为自己的业务 baseURL,实现验证码等登陆功能。

运行示例项目

注意:Demo 中 RTCSDK 中的 token 传空,所以需要在运行示例项目前,请联系商务经理开通非安全模式。

功能实现

源码 Demo 的 nertcvideocalldemo 模块主要包含:

您可以在 NERtcVideoCall.java 中查看适用于一对一视频通话的接口。

NERtcVideoCall 组件结构:

NERtcVideoCall 组件结构

修改 Demo 源代码:

Demo 跑通之后,可以修改 nertcvideocalldemo/ui 文件夹下的 Activity,复用联系人搜索页以及视频通话页

文件/文件夹 功能
NERTCSelectCallUserActivity 联系人搜索页
NERTCVideoCallActivity 视频通话页

基于 NERtcVideoCall 实现自定义 UI:

仅需拷贝 nertcvideocalldemo/model 文件夹到自己的工程,创建自定义 UI 界面,即可实现视频通话功能。具体步骤如下:

步骤1 集成SDK

  1. 使用 Android Studio 创建工程。

  2. 通过 Gradle 集成信令 SDK:具体可参考云信信令 SDK 集成

       dependencies {
       compile fileTree(dir: 'libs', include: '*.jar')
       // 添加依赖。注意,版本号必须一致。
       // 基础功能 (必需)
       compile 'com.netease.nimlib:basesdk:6.5.0'
       // 信令服务需要
       compile 'com.netease.nimlib:avsignalling:6.5.0'
       }
  3. 集成SDK:

    api 'com.netease.yunxin:nertc:3.6.0'
  4. 防止代码混淆,在 proguard-rules.pro 文件中,为 nertc sdk 添加 -keep 类的配置,这样可以防止混淆 nertc sdk 公共类名称:

    -keep class com.netease.lava.** {*;}
    -keep class com.netease.yunxin.** {*;}

步骤2 添加权限

  1. 打开 app/src/main/AndroidManifest.xml 文件,添加必要的设备权限。例如:

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.BROADCAST_STICKY"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-feature android:name="android.hardware.camera"/>
    <uses-feature android:name="android.hardware.camera.autofocus"/>
  2. 单击 Sync Project With Gradle Files , 重新同步 Android 项目文件。

步骤3 初始化 NERtcVideoCall 组件并登录:

  public static NERTCVideoCall sharedInstance(Context context) {
        return NERTCVideoCallImpl.sharedInstance(context);
    }

步骤4 发起呼叫

public abstract void call(String userId, ChannelType type);

步骤5 接听呼叫

public abstract void accept(InviteParamBuilder invitedParam);

NERtcVideoCall API

NERtcVideoCall 组件的 API 接口列表如下:

接口名 接口描述
setupAppKey 初始化,所有功能需要先初始化
call 开始呼叫
cancel 取消呼叫
accept 接受呼叫
reject 拒绝呼叫
hangup 挂断
setupLocalView 设置自己画面
setupRemoteView 设置其他用户画面
enableCamera 开启/关闭摄像头
setMicMute 开启/关闭麦克风
switchCamera 切换摄像头
addDelegate 添加代理,接收回调

NERtcVideoCall 组件的回调接口(NERTCCallingDelegate)列表如下:

接口名 接口描述
onInvitedByUser 收到对方邀请
onUserEnter 对方接受呼叫
onRejectByUserId 对方拒绝邀请
onCancelByUserId 对方取消邀请
onUserBusy 对方忙线
timeOut 邀请超时
onCameraAvailable 开启/关闭相机
onAudioAvailable 开启/关闭麦克风
onUserHangup 对方挂断
×

反馈成功

非常感谢您的反馈,我们会继续努力做得更好。