集成 SDK(纯音频)

更新时间: 2024/03/15 16:58:01

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

前提条件

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

  • Xcode 10 及以上版本。
  • iOS 9.0 及以上版本的 iOS 设备。

SDK 目录

以下文件推荐放置在 libs/ 目录下。

文件/文件夹名称 是否必选 说明
NERtcSDK.framework 音频基础库。
NERtcnn.framework 神经网络库。 只有集成音频啸叫检测插件和音频降噪插件时,才需要集成该库文件。基础音视频不需要集成该库文件。
NERtcAiDenoise.framework 音频 AI 降噪插件。
NERtcAiHowling.framework 音频啸叫检测插件。
NERtcAudio3D.framework 空间音效插件。(自 V5.4.0 版本开始提供)
NERtcReplayKit.framework 音频共享插件。

集成 NERTC SDK

方法一 CocoaPods 集成

请确保您的 Mac 已经安装 Ruby 环境。

  1. (可选)创建项目。
您可以参考此步骤创建新项目。如果您需要集成到已有的项目,请忽略该步骤。

在 XCode 里,依次选择 Create a New XCode Project > Single View App > Next 新建工程,再配置工程相关信息和合适的工程本地路径,单击 Create

image image
  1. 安装 CocoaPods。

    在终端窗口中输入如下命令:

    sudo gem install cocoapods
    

安装 CocoaPods 的详细操作说明请参见CocoaPods 官方文档

  1. 创建 Podfile 文件。

    从 Terminal 中进入您所创建项目所在路径,运行以下命令创建 Podfile 文件。

    pod init
    
  2. 您可以按需选择直接使用 Podfile 集成 NERtcSDK,或在您的项目组件的 Podspec 中引入 NERtcSDK。

编辑 Podfile 文件
//集成音频 SDK 但不使用任何插件
# platform :ios, '9.0' 
target '{YourApp}' do
    use_frameworks!

    pod 'NERtcSDKAudio', '5.4.1'
end


//集成 SDK 且使用部分插件,以音频啸叫检测插件为例
# platform :ios, '9.0' 
target '{YourApp}' do
    use_frameworks!

    pod 'NERtcSDKAudio', '~> {version}', :subspecs => ['RtcBasic', 'Nenn', 'AiHowling']
end
参数 说明
YourApp 您的 Target 名称。
version 待集成的 NERTC SDK 版本号。建议使用最新版本,请从 SDK 下载中心查看 NERTC SDK 最新版本的版本号。若要使用其他版本,请联系网易云信技术支持获取对应的版本号。

subspecs 中请填入待引入的动态库对应的值,具体说明如下表所示。

功能/插件 subspecs 的值 framework 动态库
音频 RtcBasic 必选基础库:NERtcSDK.framework
神经网络 Nenn 神经网络库:NERtcnn.framework 集成音频啸叫检测插件和音频降噪插件时,需要集成该库文件。基础音频不需要集成该库文件。
音频 AI 降噪 AiDenoise AI 降噪库:NERtcAiDenoise.framework
音频啸叫检测 AiHowling 音频啸叫检测库:NERtcAiHowling.framework
空间音效 SpatialSound 空间音效库:NERtcAudio3D.framework
音频共享 AudioShare 音频共享库:NERtcReplayKit.framework
编辑 Podspec 文件
//集成音频 SDK 但不使用任何插件
Pod::Spec.new do |{YourSpec}|
    {YourSpec}.dependency "NERtcSDKAudio/RtcBasic",  "~> {version}"
end


//集成 SDK 且使用部分插件,以音频啸叫检测插件为例
Pod::Spec.new do |{YourSpec}|
    {YourSpec}.dependency "NERtcSDKAudio/RtcBasic",  "~> {version}"
    {YourSpec}.dependency "NERtcSDKAudio/Nenn",  "~> {version}"
    {YourSpec}.dependency "NERtcSDKAudio/AiHowling",  "~> {version}"
end
参数 说明
YourSpec 您的 Target 名称。
version 待集成的 NERTC SDK 版本号。建议使用最新版本,请从 SDK 下载中心查看 NERTC SDK 最新版本的版本号。若要使用其他版本,请联系网易云信技术支持获取对应的版本号。

dependency 中请填入待引入的动态库对应的值,具体说明如下表所示。

功能/插件 subspecs 的值 framework 动态库
音频 RtcBasic 必选基础库:
  • NERtcSDK.framework
神经网络 Nenn 神经网络库:NERtcnn.framework 集成音频啸叫检测插件时,需要集成该库文件。基础音频不需要集成该库文件。
音频 AI 降噪 AiDenoise AI 降噪库:NERtcAiDenoise.framework
音频啸叫检测 AiHowling 音频啸叫检测库:NERtcAiHowling.framework
空间音效 SpatialSound 空间音效库:NERtcAudio3D.framework
音频共享 AudioShare 音频共享库:NERtcReplayKit.framework
  1. 执行以下命令查询本地库版本。

    pod search NERtcSDKAudio
    
  2. 若不是最新版本,可以执行以下命令更新本地库版本。

    pod repo update
    
  3. 执行以下命令安装安装 SDK。

    pod install        
    
  4. 设置签名和添加设备权限,具体请参见设置签名并添加媒体设备权限

方法二 手动集成

  1. (可选)创建项目。
您可以参考此步骤创建新项目。如果您需要集成到已有的项目,请忽略该步骤。

在 XCode 里,依次选择 Create a New XCode Project > Single View App > Next 新建工程,再配置工程相关信息和合适的工程本地路径,单击 Create

image image
  1. 前往网易云信 SDK 下载中心获取当前最新版本,或联系网易云信技术支持获取对应版本的 SDK 安装包。

  2. 将解压之后的 framework 后缀的文件加入到工程的libs/目录下。

    Xnip2023-08-08_20-18-08.jpg

    • 不同版本的动态库有差异,请以实际为准,具体请参见SDK 目录

    • 若您对包体积大小有要求,您可以通过插件化的方式按需集成动态库,具体如下表所示。

    功能/插件 framework 动态库
    所有能力 所有 framework 动态库
    音频 必选基础库:NERtcSDK.framework
    音频 AI 降噪
    • AI 降噪库:NERtcAiDenoise.framework
    • 神经网络库:NERtcnn.framework
    音频啸叫检测
    • 音频啸叫检测库:NERtcAiHowling.framework
    • 神经网络库:NERtcnn.framework
    空间音效 空间音效库:NERtcAudio3D.framework
    音频共享 音频共享库:NERtcReplayKit.framework
  3. 以使用 Xcode v11.5 版本为例,依次选择 TARGETS > Project Name > General > Frameworks, Libraries, and Embedded Content,单击 +,再单击 Add Other…,将上述解压得到的 SDK 文件添加进去。

    Embed 属性设置为 Embed & Sign,以使得 SDK 动态库和应用签名保持一致。

    Xnip2023-08-08_20-21-00.jpg

  4. 设置签名和添加设备权限,具体请参见设置签名并添加媒体设备权限

    在手动导入 SDK 的情况下,由于 SDK 包含模拟器版本,会导致打包失败。所以需要在打包之前将模拟器版本剥去,具体步骤参见应用打包前剥离模拟器版本

设置签名并添加媒体设备权限

  1. 设置签名。

    1. 在 Xcode 中,依次选择 TARGETS > Project Name,单击 Signing & Capabilities,勾选 Automatically manage signing

    Xcode_Signing.png

    1. Team 中选择您的开发团队。
  2. 若您的 App 需要在退到后台时仍然运行相关功能,请打开后台音频权限。

    Signing & Capabilities 页面,将设置项 Background Modes 设定为 ON,并勾选 Audio,AirPlay and Picture in Picture

    Xnip2022-12-02_16-33-26.jpg

    打开后台音频权限之后,应用在手机后台运行时,SDK 默认在后台也可以继续处理音频流,维持通话。

  3. 若您的 App 需要正常使用 SDK 提供的音视频功能,请给 App 授权麦克风、摄像头和 Wi-Fi 的使用权限。

    编辑 info.plist 文件,添加以下两项。

    • Privacy - Microphone Usage Description,并填入麦克风使用目的提示语。
    • Application uses Wi-Fi,设置为 YES

    Xnip2023-08-08_20-22-37.jpg

后续步骤

  • 实现音视频通话

  • 应用打包前剥离模拟器版本(仅手动集成 SDK 时需要)

    1. 在工程里创建 nim_strip_archs.sh 脚本到指定目录,例如 Supporting Files 目录。

    2. Build Phases 中增加过程,类型为 New Run Script Phase。需要把去掉模拟器的 Run Script 脚本放在 Embed Frameworks 之后。

    3. 在工程里添加内容: /bin/sh 您的脚本路径,例如 /bin/sh "${SRCROOT}/NIMDemo/Supporting Files/nim_strip_archs.sh"

    4. 将如下内容复制到脚本:

      #!/bin/sh
      
      # Strip invalid architectures
      
      strip_invalid_archs() {
      binary="$1"
      echo "current binary ${binary}"
      # Get architectures for current file
      archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)"
      stripped=""
      for arch in $archs; do
      if ! [[ "${ARCHS}" == *"$arch"* ]]; then
      if [ -f "$binary" ]; then
      # Strip non-valid architectures in-place
      lipo -remove "$arch" -output "$binary" "$binary" || exit 1
      stripped="$stripped $arch"
      fi
      fi
      done
      if [[ "$stripped" ]]; then
      echo "Stripped $binary of architectures:$stripped"
      fi
      }
      
      APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
      
      # This script loops through the frameworks embedded in the application and
      # removes unused architectures.
      find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
      do
      FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
      FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
      echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
      
      strip_invalid_archs "$FRAMEWORK_EXECUTABLE_PATH"
      done
      

常见问题

  1. 如何减小集成 SDK 后的 App 包体积?
2. 如何用 Cocoapods 同时集成 RTC 与播放器?

RTC 与播放器有共用的基础库,同时集成时,原则为使用 RTC 附带的基础库。

  • 若播放器为 3.1.6 及之后版本

    支持用 Cocoapods 同时集成 RTC 与播放器。

    • 方式1: 通过 podfile 集成的示例代码:

      target 'App' do
      use_frameworks!
      
      pod 'NERtcSDK', 'x.x.x'
      pod 'NELivePlayer', '3.1.6', :subspecs => ['LivePlayer']
      end
      
    • 方式2: 通过 podspec 集成的示例代码:

      Pod::Spec.new do |s|
          s.dependency "NELivePlayer/LivePlayer", "3.1.6"
      end
      
  • 若播放器为 3.1.6 之前的版本

    不支持用 Cocoapods 同时集成 RTC 与播放器,建议用 Cocoapods 集成 RTC,手动引入播放器并删除其附带的基础库。

3. pod集成提示 `The 'Pods-Yaame' target has frameworks with conflicting names: nmcbasicmoduleframework.framework`

问题原因

RTC V5.3.0 之前版本,NERtcSDK 基础库包含 NMCBasicModuleFramework.framework。如果集成播放器 SDK(NELivePlayer),默认也会包含 NMCBasicModuleFramework.framework。通过 pod 引入的话就会报错冲突。

问题解决

修改播放器 SDK(NELivePlayer) 的引入方式,只引入 LivePlayer 排除掉 NMCBasicModuleFramework.framework 库。示例代码如下:

  • 方式1: 通过 podfile 集成的示例代码:

    target 'App' do
    use_frameworks!
    
    pod 'NERtcSDK', 'x.x.x'
    pod 'NELivePlayer', '3.1.6', :subspecs => ['LivePlayer']
    end
    
  • 方式2: 通过 podspec 集成的示例代码:

    Pod::Spec.new do |s|
        s.dependency "NELivePlayer/LivePlayer", "3.1.6"
    end
    
此文档是否对你有帮助?
有帮助
去反馈
  • 前提条件
  • SDK 目录
  • 集成 NERTC SDK
  • 方法一 CocoaPods 集成
  • 方法二 手动集成
  • 设置签名并添加媒体设备权限
  • 后续步骤
  • 常见问题