Skip to content

Latest commit

 

History

History

NERtcSample-1to1-Android-Java

NERtcSample-1to1-Android-Java

功能介绍

这个开源示例项目演示了如何快速集成 网易云信 新一代(G2)音视频 SDK,实现1对1音视频通话。

  • 加入通话和离开通话;
  • 静音和解除静音;
  • 关闭视频和打开视频
  • 切换前置摄像头和后置摄像头;

环境准备

  • Android SDK API Level Level ≥ 18
  • Android Studio 3.0 或以上版本
  • App 要求 Android 4.3 或以上设备

运行示例项目

这个段落主要讲解了如何编译和运行实例程序。

创建网易云信账号并获取App Key

在编译和启动实例程序前,您需要首先获取一个可用的App Key:

  1. 若您已经与专属客户经理取得联系,可直接向他获取Appkey

  2. 若您并未与专属客户经理取得联系那么请按后续步骤获取Appkey

  3. 首先在 网易云信 注册账号

  4. 然后在「应用」一栏中创建您的项目

  5. 等待专属客户经理联系您,并向他获取Appkey

  6. 将App Key填写进 "app/src/main/res/values/app_key.xml"

<!-- 替换为你自己的AppKey -->
<string name="app_key">YOUR APP KEY</string>

集成SDK

集成方式有两种,通过Maven集成和通过SDK库文件集成

通过Maven集成(强烈推荐

在项目对应的模块的 app/build.gradle 文件的依赖属性中加入通过 Maven 自动集成 SDK 的地址:

implementation 'com.netease.yunxin:nertc:' + versionName

通过SDK库文件集成

Android 视频通话 SDK

下载的文件包括 libs 文件和 sample 文件,其中 libs 文件包括:

文件/文件夹名称 文件类型
nertc-sdk-x.x.x.jar Java JAR 文件
arm64-v8a 文件夹
armeabi-v7a 文件夹
x86 文件夹
添加 SDK
  1. 设置 libs 存放路径。使用 Android Studio 打开你想要运行的项目,选择 app/src/build.gradle 文件,将预设的 libs 路径添加到 fileTree 代码行中。

    img

注意SDK依赖的JDK版本为Java 8

  1. 添加 libs 文件包。根据步骤 1 中预设的路径添加 libs 文件包。
  2. 同步项目文件。点击 Sync Project With Gradle Files 按钮,直到同步完成。

功能实现

初始化

导入以下 NERTC API 包:

  • com.netease.lava.nertc.sdk.NERtcConstants
  • com.netease.lava.nertc.sdk.NERtcCallback
  • com.netease.lava.nertc.sdk.NERtcEx
  • com.netease.lava.nertc.sdk.NERtcParameters
  • com.netease.lava.nertc.sdk.video.NERtcVideoView
  • com.netease.lava.nertc.sdk.video.NERtcRemoteVideoStreamType

进入频道之前,调用 init 进行初始化。在该方法中:

  • 填入后台应用注册的 AppKey。只有 AppKey 相同的应用程序才能进入同一个频道进行互通。
  • 指定一个事件回调。SDK 通过指定的事件通知应用程序 SDK 的运行事件,如: 加入或离开频道,新用户加入频道等。
import com.netease.lava.nertc.sdk.NERtcCallback;
import com.netease.lava.nertc.sdk.NERtcConstants;
import com.netease.lava.nertc.sdk.NERtcEx;
import com.netease.lava.nertc.sdk.NERtcParameters;
import com.netease.lava.nertc.sdk.video.NERtcRemoteVideoStreamType;
import com.netease.lava.nertc.sdk.video.NERtcVideoView;

...

private void setupNERtc() {
    NERtcParameters parameters = new NERtcParameters();
    parameters.set(NERtcParameters.KEY_AUTO_SUBSCRIBE_AUDIO, false);
    NERtcEx.getInstance().setParameters(parameters); //先设置参数,后初始化

    try {
        NERtcEx.getInstance().init(getApplicationContext(), getString(R.string.app_key), this, null);
        setAudioEnable(true);
        setVideoEnable(true);
    } catch (Exception e) {
        Toast.makeText(this, "SDK初始化失败", Toast.LENGTH_LONG).show();
        finish();
    }
}

加入频道

在加入频道前,请确保你已完成环境准备、安装包获取等步骤。

加入通信频道

调用 joinChannel 方法加入频道。在该方法中:

在该方法中:

  • 传入能标识用户角色和权限的 Token。如果安全要求不高,也可以将值设为 null。Token 需要在应用程序的服务器端生成,具体生成办法,详见 密钥说明
  • 传入能标识频道的频道名称。输入相同频道名称的用户会进入同一个频道。
  • 频道内每个用户的 UID 必须是唯一的。

如果已在频道中,用户必须调用 leaveChannel 方法退出当前频道,才能进入下一个频道。

NERtcEx.getInstance().joinChannel(null, roomID, userID);

发布和订阅音视频流

在发布和订阅音视频流前,请确保你已完成环境准备、安装包获取等步骤,并成功加入频道。

打开视频模式

调用 enableLocalVideo 方法打开视频模式,调用 enableLocalAudio 方法打开音频模式。您也可以根据需要关闭默认,在加入房间后自行调用该方法进行打开。

  • 如果在通话过程前和过程中都可以通过以下接口实现音视频的开关。
NERtc.getInstance().enableLocalAudio(boolean enable);
NERtc.getInstance().enableLocalVideo(boolean enable);

设置本地视频视图

本地视频视图,是指用户在本地设备上看到的本地视频流的视图。

在加入频道前,调用 setupLocalVideoCanvas 方法使应用程序绑定本地视频流的显示视窗,并设置本地看到的本地视频视图。setupLocalVideoCanvas 参数默认为 NERtcVideoViewNERtcVideoView 可以通过:

  • 将 setZOrderMediaOverlay 设置为 true,用以覆盖父视图;
  • 通过 setScalingType 设置 View 的缩放模式;

调用 setupLocalVideoCanvas 将新画布 对象传递给引擎,该引擎绑定本地视频流的视频窗口(视图) 并配置视频的显示设置;

localUserVv.setZOrderMediaOverlay(true);
localUserVv.setScalingType(NERtcConstants.VideoScalingType.SCALE_ASPECT_FIT);
NERtcEx.getInstance().setupLocalVideoCanvas(localUserVv);

订阅远端视频

订阅视频是指在通话中根据用户需要,选择是否查看远端某个用户的视频

在收到远端用户视频发布回调 onUserVideoStart(long uid,int maxProfile) 后,可以根据回调中的uid以及maxProfile选择合适的分辨率进行视频订阅 subscribeRemoteVideoStream 分辨率档位可参看 视频档位

NERtcEx.getInstance().subscribeRemoteVideoStream(uid, NERtcRemoteVideoStreamType.kNERtcRemoteVideoStreamTypeHigh, true);

设置远端视频视图

远端视频视图,是指用户在本地设备上看到的远端视频流的视图。

调用 setupRemoteVideoCanvas 方法设置本地看到的远端用户的视频视图。

用户需要在该方法中指定想要看到的远端视图的用户 UID。 UID可以在收到其他用户发布视频的回调事件 onUserVideoStart 中获取。

remoteUserVv.setScalingType(NERtcConstants.VideoScalingType.SCALE_ASPECT_FIT);
NERtcEx.getInstance().setupRemoteVideoCanvas(remoteUserVv, uid);

离开频道

通话或直播结束时,你可以调用 leaveChannel 方法离开频道,结束或退出通话或直播。

不论当前是否还在直播中,调用该方法会把直播相关的所有资源释放掉。leaveChannel 并不会直接让用户离开频道。调用该方法后 SDK 会触发 onLeaveChannel 回调。

NERtcEx.getInstance().leaveChannel();

如果在调用 leaveChannel 方法后立即使用 release,则退出频道会被打断,SDK 也不会触发 onLeaveChannel 回调。