# HTEffect_Netease_VideoCall_Android
**Repository Path**: htai-open/HTEffect_Netease_VideoCall_Android
## Basic Information
- **Project Name**: HTEffect_Netease_VideoCall_Android
- **Description**: No description available
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: https://www.texeljoy.com
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-09-23
- **Last Updated**: 2024-10-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 美颜SDK, Android, 人像人体特效, ar
## README
简体中文 | [English](README_EN.md)
# **HTEffect集成Android教程**
## **说明**
- 本文介绍如何快速配置HTEffect模块
## **操作步骤**
### **1. 下载源码**
依次执行以下命令
- git clone **当前仓库地址**
- cd **工程目录**
- git submodule init && git submodule update
### **2. 配置工程**
下载完成后,打开工程
- 将 AndroidManifest.xml 中的 **label** 和 build.gradle 中的 **applicationId** 分别替换为您的**应用名**和**包名**
- 在项目的Application中将 **YOUR_APP_ID** 替换成您的**AppId**
- 将htui模块中的**assets**替换为您的**assets**
- 编译,运行,日志搜索**init-status**可以查看相关日志
- 具体执行步骤可以全局搜索 **//todo --- HTEffect** 进行查看
# 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. 首先在 [网易云信](https://id.163yun.com/register?h=media&t=media&clueFrom=nim&from=bdjjnim0035&referrer=https://app.yunxin.163.com/?clueFrom=nim&from=bdjjnim0035) 注册账号
4. 然后在「应用」一栏中创建您的项目
5. 等待专属客户经理联系您,并向他获取Appkey
6. 将App Key填写进 "app/src/main/res/values/app_key.xml"
```xml
YOUR APP KEY
```
### 集成SDK
集成方式有两种,通过Maven集成和通过SDK库文件集成
#### 通过Maven集成(**强烈推荐**)
在项目对应的模块的 `app/build.gradle` 文件的依赖属性中加入通过 Maven 自动集成 SDK 的地址:
```gradle
implementation 'com.netease.yunxin:nertc:' + versionName
```
#### 通过SDK库文件集成
Android [视频通话 SDK](https://dev.yunxin.163.com/docs/product/音视频通话G2/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 代码行中。

**注意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 的运行事件,如: 加入或离开频道,新用户加入频道等。
```java
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 需要在应用程序的服务器端生成,具体生成办法,详见 [密钥说明](https://dev.yunxin.163.com/docs/product/音视频通话G2/服务端API文档?pos=toc-2-15)。
- 传入能标识频道的频道名称。输入相同频道名称的用户会进入同一个频道。
- 频道内每个用户的 UID 必须是唯一的。
> 如果已在频道中,用户必须调用 `leaveChannel` 方法退出当前频道,才能进入下一个频道。
```java
NERtcEx.getInstance().joinChannel(null, roomID, userID);
```
### 发布和订阅音视频流
在发布和订阅音视频流前,请确保你已完成环境准备、安装包获取等步骤,并成功加入频道。
#### 打开视频模式
调用 `enableLocalVideo` 方法打开视频模式,调用 `enableLocalAudio` 方法打开音频模式。您也可以根据需要关闭默认,在加入房间后自行调用该方法进行打开。
- 如果在通话过程前和过程中都可以通过以下接口实现音视频的开关。
```java
NERtc.getInstance().enableLocalAudio(boolean enable);
NERtc.getInstance().enableLocalVideo(boolean enable);
```
#### 设置本地视频视图
本地视频视图,是指用户在本地设备上看到的本地视频流的视图。
在加入频道前,调用 `setupLocalVideoCanvas` 方法使应用程序绑定本地视频流的显示视窗,并设置本地看到的本地视频视图。`setupLocalVideoCanvas` 参数默认为 `NERtcVideoView`,`NERtcVideoView` 可以通过:
- 将 setZOrderMediaOverlay 设置为 true,用以覆盖父视图;
- 通过 setScalingType 设置 View 的缩放模式;
调用 `setupLocalVideoCanvas` 将新画布 对象传递给引擎,该引擎绑定本地视频流的视频窗口(视图) 并配置视频的显示设置;
```java
localUserVv.setZOrderMediaOverlay(true);
localUserVv.setScalingType(NERtcConstants.VideoScalingType.SCALE_ASPECT_FIT);
NERtcEx.getInstance().setupLocalVideoCanvas(localUserVv);
```
#### 订阅远端视频
订阅视频是指在通话中根据用户需要,选择是否查看远端某个用户的视频
在收到远端用户视频发布回调 `onUserVideoStart(long uid,int maxProfile)` 后,可以根据回调中的uid以及maxProfile选择合适的分辨率进行视频订阅 `subscribeRemoteVideoStream` 分辨率档位可参看 [视频档位](https://dev.yunxin.163.com/docs/product/音视频通话G2/SDK开发集成/Android开发集成/视频管理)
```java
NERtcEx.getInstance().subscribeRemoteVideoStream(uid, NERtcRemoteVideoStreamType.kNERtcRemoteVideoStreamTypeHigh, true);
```
#### 设置远端视频视图
远端视频视图,是指用户在本地设备上看到的远端视频流的视图。
调用 `setupRemoteVideoCanvas` 方法设置本地看到的远端用户的视频视图。
用户需要在该方法中指定想要看到的远端视图的用户 **UID**。 UID可以在收到其他用户发布视频的回调事件 `onUserVideoStart` 中获取。
```java
remoteUserVv.setScalingType(NERtcConstants.VideoScalingType.SCALE_ASPECT_FIT);
NERtcEx.getInstance().setupRemoteVideoCanvas(remoteUserVv, uid);
```
### 离开频道
通话或直播结束时,你可以调用 `leaveChannel` 方法离开频道,结束或退出通话或直播。
不论当前是否还在直播中,调用该方法会把直播相关的所有资源释放掉。`leaveChannel` 并不会直接让用户离开频道。调用该方法后 SDK 会触发 `onLeaveChannel` 回调。
```java
NERtcEx.getInstance().leaveChannel();
```
**如果在调用** `leaveChannel` **方法后立即使用** `release`**,则退出频道会被打断,SDK 也不会触发** `onLeaveChannel` **回调。**