集成SDK(音视频)

更新时间: 2024/03/15 16:57:57

本文为您介绍了 Android 端集成 SDK 的操作步骤,帮助您快速集成 SDK 并实现实时音视频通话的基本功能。

前提条件

在开始运行工程之前,请您准备以下开发环境:

  • Android SDK API 等级 19 或以上。
  • Android Studio 3.0 或以上版本。
  • Android 系统 4.4 或以上版本的移动设备。
  • Gradle 6.7.1 以及以上版本。

SDK 目录

  • 目录结构
Android
|
|-- lib                      //推荐放置在 /app/libs/ 目录
|   |
|   |-- nertc-sdk-4.x.xx.jar    
|
|-- partlib                  //推荐放置在 /app/libs/ 目录(若仅集成 NERTC SDK,可忽略此文件夹)
|   |
|   |-- nertc-sdk-part-4.x.xx.jar
|   |-- yunxin-catcher-1.0.2.jar
|   |-- yunxin-nos-1.0.3.jar
|   |-- yunxin-report-2.1.0.jar
|   |-- GrowDevice-1.7.2.4.jar
|
|-- jniLibs                  //推荐放置在 /app/src/main/jniLibs/ 目录
|   |
|   |-- armeabi-v7a           
|       |
|       |   |-- libnertc_sdk.so
|       |   |-- libgrowease.so
|       |   |-- libNERtcnn.so
|       |   |-- libNERtcBeauty.so
|       |   |-- libNERtcFaceDetect.so
|       |   |-- libNERtcPersonSegment.so
|       |   |-- libNERtcAiDenoise.so
|       |   |-- libNERtcAiHowling.so
|       |   |-- libNERtcFaceEnhance.so
|       |   |-- libNERtcSuperResolution.so
|       |   |-- libNERtcVideoDenoise.so
|       |   |-- libNERtcAudio3D.so
|   |
|   |-- arm64-v8a
|       |
|       |   |-- libnertc_sdk.so
|       |   |-- libgrowease.so
|   |
|   |-- x86
|       |
|       |   |-- libnertc_sdk.so
|       |   |-- libgrowease.so
  • 目录内容
文件/文件夹名称 是否必选 说明
lib-nertc-sdk 音视频库。
libnertc_sdk.so
partlib-nertc-sdk-part G1 兼容库。
partlib-yunxin-catcher 是(V5.3.1及之后版本:否) 崩溃捕获。 V5.3.1 及之后版本,去掉了该库文件。
partlib-yunxin-nos 是(V5.3.1及之后版本:否) 日志上报。 V5.3.1 及之后版本,去掉了该库文件。
partlib-yunxin-report 是(V5.3.1及之后版本:否)
partlib-GrowDevice 智企库。
libgrowease.so 智企库(自 V4.6.20 起提供)。
libNERtcnn.so 是(V5.3.1及之后版本:否) 神经网络库(自 V4.6.20 起提供,用于实现插件化)。
  • V4.6.20 ~V4.6.x 版本:libNERtcnn.so动态库必选。
  • V5.3.1 及之后版本,只有集成美颜、虚拟背景、音频啸叫检测、人脸增强插件时,才需要集成 libNERtcnn.so 库文件。基础音视频不需要集成该库文件。
libNERtcBeauty.so 美颜库(自 V4.6.20 起提供,用于实现插件化)。
libNERtcFaceDetect.so 人脸检测库(自 V4.6.20 起提供,用于实现插件化)。
libNERtcPersonSegment.so 背景分割库(自 V4.6.20 起提供,用于实现插件化)。
libNERtcAiDenoise.so AI 降噪库(自 V4.6.40 起提供,用于实现插件化)。
libNERtcAiHowling.so AI 啸叫检测库(自 V4.6.40 起提供,用于实现插件化)。
libNERtcFaceEnhance.so 人脸增强库(自 V5.3.0 起提供,用于实现插件化)。
libNERtcSuperResolution.so 视频超分库(自 V5.3.0 起提供,用于实现插件化)。
libNERtcVideoDenoise.so 视频降噪库(自 V5.3.0 起提供,用于实现插件化)。
libNERtcAudio3D.so 空间音效库(自 V5.4.0 版本开始提供,用于实现插件化)。

集成 SDK

Maven 集成(推荐)

  1. (可选)创建新项目。
您可以参考此步骤创建新项目,若是需要集成到已有的项目中,请忽略该步骤。
  1. 在 Android Studio 里,在顶部菜单依次选择 File > New > New Project 新建工程,再依次选择 Phone and Tablet > Empty Activity,单击 Next
    image
  2. 创建 Android 项目成功后,Android Studio 会自动开始同步 gradle, 您需要等同步成功后再进行下一步操作。
  1. 配置项目的 Gradle 文件。

    进入项目根目录,打开 app/build.gradle 文件,在 allprojects 中加入以下代码。

    allprojects {
        repositories {
            mavenCentral()
            maven { url 'https://www.jitpack.io' }
            google()
            
        }
    }
    

    app/build.gradle 文件中设置 Java 编译版本。

    android {
            compileOptions {
            // SDK 依赖的JDK版本为Java 8
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
            }
    
        }
    
    
  2. 引入 NERTC Android SDK。

    请在项目对应模块的 build.gradle 中加入以下代码。

    javaapi 'com.netease.yunxin:nertc:x.x.x'
    

    其中,x.x.x 为待集成的 NERTC SDK 版本号。建议使用最新版本,您可以在网易云信 SDK 下载中心查看 NERTC SDK 最新版本的版本号。若要使用其他版本,请联系网易云信技术支持获取对应的版本号。

    若您对包体积大小有要求,请集成 V4.6.20 及之后版本的 NERTC SDK,实现以插件化的方式按需集成动态库,您可以参考以下代码实现:

    //集成 SDK 但不使用任何插件
    api 'com.netease.yunxin:nertc-base:x.x.x'
    
    //V4.6.20~V4.6.X版本,集成 SDK 且使用部分插件,以美颜为例
    implementation 'com.netease.yunxin:nertc-base:4.6.20'
    implementation 'com.netease.yunxin:nertc-beauty:4.6.20'
    implementation 'com.netease.yunxin:nertc-facedetect:4.6.20'
    
    //V5.3.0及以后版本,集成 SDK 且使用部分插件,以美颜为例
    implementation 'com.netease.yunxin:nertc-base:5.3.1'
    implementation 'com.netease.yunxin:nertc-nenn:5.3.1'
    implementation 'com.netease.yunxin:nertc-beauty:5.3.1'
    implementation 'com.netease.yunxin:nertc-facedetect:5.3.1'
    

    artifactId 中请填入待引入的动态库的名称,具体说明如下表所示。

    功能/插件 artifactId 的值 集成的动态库
    音视频 com.netease.yunxin:nertc-base 必选基础库( libnertc_sdk.solibgrowease.so 等)
    神经网络 com.netease.yunxin:nertc-nenn 神经网络库: libNERtcnn.so
    • V5.3.1 及之后版本,只有集成美颜、虚拟背景、音频啸叫检测、人脸增强插件时,才需要集成 libNERtcnn.so 库文件。基础音视频不需要集成该库文件。
    • V4.6.20 ~V4.6.x 版本:集成com.netease.yunxin:nertc-base时自动集成了libNERtcnn.so库,不需要单独集成。
    美颜 com.netease.yunxin:nertc-beauty 美颜库: libNERtcBeauty.so
    com.netease.yunxin:nertc-facedetect 人脸检测库: libNERtcFaceDetect.so
    虚拟背景 com.netease.yunxin:nertc-segment 背景分割库:libNERtcPersonSegment.so
    AI 降噪 com.netease.yunxin:nertc-aidenoise AI 降噪库:libNERtcAiDenoise.so
    AI 啸叫检测 com.netease.yunxin:nertc-aihowling AI 啸叫检测库:libNERtcAiHowling.so
    人脸增强 com.netease.yunxin:nertc-faceenhance 人脸增强库:libNERtcFaceEnhance.so
    视频超分 com.netease.yunxin:nertc-superresolution 视频超分库:libNERtcSuperResolution.so
    视频降噪 com.netease.yunxin:nertc-videodenoise 视频降噪库:libNERtcVideoDenoise.so
    空间音效 com.netease.yunxin:nertc-audio3d 空间音效库:libNERtcAudio3D.so
  3. (可选)如果您使用的是 V3.7.x 或 V4.5.0 版本的 NERTC Android SDK,需要额外添加 report 库依赖。

    • V3.7.x:
      javaimplementation 'com.netease.yunxin:report:2.0.3'
      
    • V4.5.0:
      javaimplementation 'com.netease.yunxin:report:2.1.0'
      

      后续集成其他版本时,建议删除该行。

  4. 指定 App 使用的 CPU 架构

    请在项目对应模块的 build.gradledefaultConfig 中加入以下代码。

    defaultConfig {
        ndk {
                abiFilters "armeabi-v7a", "arm64-v8a", "x86", 
        }
    }
    
    • 目前 NERTC Android SDK 支持 armeabi-v7a、arm64-v8a 和 x86 架构。
    • 建议根据实际情况决定要支持的架构。通常在发布 App 时只需要保留 "armeabi-v7a" 和 "arm64-v8a" 即可,可以减少 APK 包大小。

手动集成

  1. (可选)创建新项目。
您可以参考此步骤创建新项目,若是需要集成到已有的项目中,请忽略该步骤。
  1. 在 Android Studio 里,在顶部菜单依次选择 File > New > New Project 新建工程,再依次选择 Phone and Tablet > Empty Activity,单击 Nextimage
  2. 创建 Android 项目成功后,Android Studio 会自动开始同步 gradle, 您需要等同步成功后再进行下一步操作。
  1. 前往 SDK 下载页面获取当前最新版本SDK,或联系网易云信技术支持获取对应版本的SDK。

  2. 解压后将对应的文件拷贝至项目路径中。

    文件/文件夹 项目路径
    nertc-sdk-x.x.x.jar /app/libs/
    arm64-v8a
    arm64-v7a
    x86
    /app/src/main/jniLibs/

    add_jar.png

    • 若无对应文件夹,您需要在对应路径下新建文件夹。
    • 无特殊情况,可忽略 part 文件夹。
    • 自 V4.6.20 版本起,armeabi-v7a 目录下的动态库包括美颜等可选库,请按需拷贝到对应的目录,具体请参见下表。
    功能/插件 集成的动态库
    音视频 必选基础库: libnertc_sdk.solibgrowease.sopartlib-nertc-sdk-partpartlib-yunxin-catcherpartlib-yunxin-nospartlib-yunxin-reportpartlib-GrowDevicelibgrowease.solibNERtcnn.so
    • V4.6.20 ~V4.6.x 版本:libNERtcnn.so动态库必选。
    • V5.3.1 及之后版本,只有集成美颜、虚拟背景、音频啸叫检测、人脸增强插件时,才需要集成 libNERtcnn.so 库文件。基础音视频不需要集成该库文件。
    • V5.3.1 及之后版本,去掉了 partlib-yunxin-catcherpartlib-yunxin-nospartlib-yunxin-report库文件。
    美颜 美颜库: libNERtcBeauty.so
    • 人脸检测库: libNERtcFaceDetect.so
    • 神经网络库: libNERtcnn.so
    虚拟背景
    • 背景分割库:libNERtcPersonSegment.so
    • 神经网络库: libNERtcnn.so
    AI 降噪 AI 降噪库:libNERtcAiDenoise.so
    AI 啸叫检测
    • AI 啸叫检测库:libNERtcAiHowling.so
    • 神经网络库: libNERtcnn.so
    人脸增强
    • 人脸增强库:libNERtcFaceEnhance.so
    • 神经网络库: libNERtcnn.so
    视频超分 视频超分库:libNERtcSuperResolution.so
    视频降噪 视频降噪库:libNERtcVideoDenoise.so
    空间音效 空间音效库:libNERtcAudio3D.so
  3. app/build.gradle 文件中设置 libs 路径。

    javaandroid {
          ...
        compileOptions {
            // SDK 依赖的JDK版本为Java 8
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
        ...
        
        dependencies {
            implementation fileTree(dir: "libs", include: ["*.jar"])
            ...
        }
    }
    
  4. 指定 App 使用的 CPU 架构。

    请在项目对应模块的 build.gradledefaultConfig 中加入以下代码。

    defaultConfig {
        ndk {
                abiFilters "armeabi-v7a", "arm64-v8a", "x86", 
        }
    }
    
    • 目前 NERTC Android SDK 支持 armeabi-v7a、arm64-v8a 和 x86 架构。
    • 建议根据实际情况决定要支持的架构。通常在发布 App 时只需要保留 "armeabi-v7a" 和 "arm64-v8a" 即可,可以减少 APK 包大小。
  5. 单击 File > Sync Project With Gradle Files 按钮,直到同步完成。

添加权限

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

例如:

java//网络相关
 <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"/>
//蓝牙连接权限,此权限还需在运行应用时动态申请,否则 Android 12 及以上的设备蓝牙无法正常工作
 <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
//外置存储卡写入权限
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
//蓝牙 startBluetoothSco 会用到此权限
 <uses-permission android:name="android.permission.BROADCAST_STICKY"/>
// V5.4.0及之后版本需要,更改设备的网络状态,如打开或关闭网络连接、更改网络类型等。
 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
 //获取设备信息
 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
//允许应用程序使用camera硬件资源
 <uses-feature android:name="android.hardware.camera"/>
 //自动对焦
 <uses-feature android:name="android.hardware.camera.autofocus"/>
 //如果 Android targetSdkVersion 大于等于 31,需要添加以下标签,否则虚拟背景功能无法使用
 <application>
 <uses-native-library android:name="libOpenCL.so" android:required="false"/>
 </application>
 ......//APP需要的其他设备权限

权限说明如下表所示。

必要性 获取的权限 使用目的
必要权限 访问网络权限(INTERNET) SDK 基本功能都需要在联网的情况下才可以使用
网络连接状态(ACCESS_NETWORK_STATE) 判断网络连接状态及网络是否可用
Wifi网络状态(ACCESS_WIFI_STATE和CHANGE_WIFI_STATE) 判断网络连接状态及网络是否可用
摄像头(CAMERA和camera.autofocus) 视频通话时,用于采集视频画面
麦克风(RECORD_AUDIO) 音视频通话时,用于采集声音
修改音频设置(MODIFY_AUDIO_SETTINGS) 修改音频设备配置时需要使用该权限
非必要权限 设备存储(WRITE_EXTERNAL_STORAGE) 存储 SDK 配置文件和日志文件
设备存储(READ_EXTERNAL_STORAGE) 读取 SDK 配置文件和日志文件
蓝牙(BLUETOOTH和BLUETOOTH_CONNECT) 连接蓝牙耳机和耳麦时需要该权限
  • BLUETOOTH_CONNECT权限:您需要在代码中动态申请 android.permission.BLUETOOTH_CONNECT 权限,否则 Android 12 及以上系统版本的设备会无法使用蓝牙功能,具体信息请参见 Android 官方说明
  • BLUETOOTH_CONNECT权限:SDK V4.6.56 及之后版本,若用户未赋予该权限,SDK 会通过手机麦克风采集声音。但通话时需要要离手机比较近,对方才能听清声音。
  • BLUETOOTH 权限:仅 Android 6.0 以下版本需要声明,Android 6.0 及以上版本无需声明。
WAKE_LOCK 防止通话过程中锁屏
设备信息(READ_PHONE_STATE) SDK 需要监听电话的打断,在电话呼入时,停止音频的采集,电话结束时,恢复音频采集
更改设备的网络状态(CHANGE_NETWORK_STATE) SDK 操作多网卡集成 SDK V5.4.0 及之后版本,需要该权限。

配置防代码混淆

代码混淆是指使用简短无意义的名称重命名类、方法、属性等,增加逆向工程的难度,保障 Android 程序源码的安全性。为了避免因重命名类,导致调用 NERTC SDK 异常,您需要配置防代码混淆。

proguard-rules.pro 文件中,为 NERTC SDK 添加 -keep 类的配置,防止混淆 NERTC SDK 公共类名称。

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

后续步骤

实现音视频通话

常见问题

  • 如何减小集成 SDK 后的 App 包体积?

  • 集成编译过程中出现 <uses-native-library> 标签找不到

    问题现象

    使用 Maven 下载的包进行集成 V5.3.0 及以上版本的 SDK 时,出现编译错误,提示:AAPT: error: unexpected element <uses-native-library> found in <manifest><application>

    问题解决

    Gradle 版本升级到 6.7.1 或更高版本。由于旧版 Gradle 不支持 <uses-native-library> 标签,升级到新版本后即可解决该问题。

此文档是否对你有帮助?
有帮助
去反馈
  • 前提条件
  • SDK 目录
  • 集成 SDK
  • Maven 集成(推荐)
  • 手动集成
  • 添加权限
  • 配置防代码混淆
  • 后续步骤
  • 常见问题