集成 SDK(音视频)
更新时间: 2024/09/18 16:26:13
本文为您介绍了 iOS 端集成 SDK 的操作步骤,帮助您快速集成 SDK 并实现实时音视频通话的基本功能。
前提条件
在开始运行工程之前,请您准备以下开发环境:
- Xcode 10 及以上版本。
- iOS 9.0 及以上版本的 iOS 设备。
SDK 目录
- 目录结构
iOS
|
|-- NERtcSDK.framework //推荐放置在 libs/ 目录
|-- NMCBasicModuleFramework.framework //推荐放置在 libs/ 目录(V5.3.0 及之后版本去掉了该库文件)
|-- NERtcnn.framework //推荐放置在 libs/ 目录
|-- NERtcReplayKit.framework //推荐放置在 libs/ 目录
|-- NERtcBeauty.framework //推荐放置在 libs/ 目录
|-- NERtcFaceDetect.framework //推荐放置在 libs/ 目录
|-- NERtcPersonSegment.framework //推荐放置在 libs/ 目录
|-- NERtcAiDenoise.framework //推荐放置在 libs/ 目录
|-- NERtcAiHowling.framework //推荐放置在 libs/ 目录
|-- NERtcFaceEnhance.framework //推荐放置在 libs/ 目录
|-- NERtcSuperResolution.framework //推荐放置在 libs/ 目录
|-- NERtcVideoDenoise.framework //推荐放置在 libs/ 目录
|-- NERtcAudio3D.framework //推荐放置在 libs/ 目录
- 目录内容
文件/文件夹名称 | 是否必选 | 说明 |
---|---|---|
NERtcSDK.framework | 是 | 音视频库。 |
NMCBasicModuleFramework.framework | 是 | 基础模块库。 |
NERtcnn.framework |
|
神经网络库(自 V4.6.20 起提供,以实现插件化)。
|
NERtcReplayKit.framework | 否 | 屏幕共享(自 V4.6.20 起提供,以实现插件化)。 |
NERtcBeauty.framework | 否 | 美颜(自 V4.6.20 起提供,以实现插件化)。 |
NERtcFaceDetect.framework | 否 | 人脸检测(自 V4.6.20 起提供,以实现插件化)。 |
NERtcPersonSegment.framework | 否 | 背景分割(自 V4.6.20 起提供,以实现插件化)。 |
NERtcAiDenoise.framework | 否 | 音频 AI 降噪(自 V4.6.40 起提供,以实现插件化)。 |
NERtcAiHowling.framework | 否 | AI 啸叫检测(自 V4.6.40 起提供,以实现插件化)。 |
NERtcFaceEnhance.framework | 否 | 人脸增强(自 V5.3.0 起提供,以实现插件化)。 |
NERtcSuperResolution.framework | 否 | 视频超分(自 V5.3.0 起提供,以实现插件化)。 |
NERtcVideoDenoise.framework | 否 | 视频降噪(自 V5.3.0 起提供,以实现插件化)。 |
NERtcAudio3D.framework | 否 | 空间音效插件。(自 V5.4.0 版本开始提供) |
集成 NERTC SDK
方法一 CocoaPods 集成
请确保您的 Mac 已经安装 Ruby 环境。
- (可选)创建项目。
您可以参考此步骤创建新项目。如果您需要集成到已有的项目,请忽略该步骤。
在 XCode 里,依次选择 Create a New XCode Project > Single View App > Next 新建工程,再配置工程相关信息和合适的工程本地路径,单击 Create。
-
安装 CocoaPods。
在终端窗口中输入如下命令:
sudo gem install cocoapods
安装 CocoaPods 的详细操作说明请参见CocoaPods 官方文档
-
创建 Podfile 文件。
从 Terminal 中进入您所创建项目所在路径,运行以下命令创建
Podfile
文件。pod init
-
您可以按需选择直接使用 Podfile 集成 NERtcSDK,或在您的项目组件的 Podspec 中引入 NERtcSDK。
- 编辑 Podfile 文件。
# platform :ios, '9.0' target '{YourApp}' do use_frameworks! pod 'NERtcSDK', '~> {version}' end
参数 说明 YourApp 您的 Target 名称。 version 待集成的 NERTC SDK 版本号。建议使用最新版本,请从 SDK 下载中心查看 NERTC SDK 最新版本的版本号。若要使用其他版本,请联系网易云信技术支持获取对应的版本号。 若您对包体积大小有要求,请集成 V4.6.20 及之后版本的 NERTC SDK,实现以插件化的方式按需集成动态库,请参考以下代码实现:
//集成 SDK 但不使用任何插件 # platform :ios, '9.0' target '{YourApp}' do use_frameworks! pod 'NERtcSDK', '~> {version}', :subspecs => ['RtcBasic'] end //V4.6.20~V4.6.X版本,集成 SDK 且使用部分插件,以美颜为例 # platform :ios, '9.0' target '{YourApp}' do use_frameworks! pod 'NERtcSDK', '~> {version}', :subspecs => ['RtcBasic', 'Beauty', 'FaceDetect'] end //V5.3.0及以上版本,集成 SDK 且使用部分插件,以美颜为例 # platform :ios, '9.0' target '{YourApp}' do use_frameworks! pod 'NERtcSDK', '~> {version}', :subspecs => ['RtcBasic', 'Nenn', 'Beauty', 'FaceDetect'] end
subspecs
中请填入待引入的动态库对应的值,具体说明如下表所示。功能/插件 subspecs
的值framework
动态库音视频 RtcBasic
必选基础库: NERtcSDK.framework
NMCBasicModuleFramework.framework
:V5.3.0 及之后版本去掉了该库文件。NERtcnn.framework
:- V4.6.20 ~V4.6.X 版本:该动态库必选。
- V5.3.0 及之后版本,RtcBasic 不包含该库,只有集成美颜、虚拟背景、音频啸叫检测、人脸增强插件时,才需要集成该库文件。基础音视频不需要集成该库文件。
神经网络 Nenn
神经网络库: NERtcnn.framework
V5.3.0 及之后版本,集成美颜、虚拟背景、音频啸叫检测、人脸增强插件时,需要集成该库文件。基础音视频不需要集成该库文件。 屏幕共享 ScreenShare
屏幕共享库: NERtcReplayKit.framework
美颜 Beauty
美颜库: NERtcBeauty.framework
FaceDetect
人脸检测库: NERtcFaceDetect.framework
虚拟背景 Segment
背景分割库: NERtcPersonSegment.framework
音频 AI 降噪 AiDenoise
AI 降噪库: NERtcAiDenoise.framework
AI 啸叫检测 AiHowling
AI 啸叫检测库: NERtcAiHowling.framework
人脸增强 FaceEnhance
人脸增强库: NERtcFaceEnhance.framework
视频超分 SuperResolution
视频超分库: NERtcSuperResolution.framework
视频降噪 VideoDenoise
视频降噪库: NERtcVideoDenoise.framework
空间音效 SpatialSound
空间音效库: NERtcAudio3D.framework
- 编辑 Podspec 文件。
Pod::Spec.new do |{YourSpec}| {YourSpec}.dependency "NERtcSDK", "~> {version}" end
参数 说明 YourApp 您的 Target 名称。 version 待集成的 NERTC SDK 版本号。建议使用最新版本,请从 SDK 下载中心查看 NERTC SDK 最新版本的版本号。若要使用其他版本,请联系网易云信技术支持获取对应的版本号。 若您对包体积大小有要求,请集成 V4.6.20 及之后版本的 NERTC SDK,实现以插件化的方式按需集成动态库,请参考以下代码实现:
//集成 SDK 但不使用任何插件 Pod::Spec.new do |{YourSpec}| {YourSpec}.dependency "NERtcSDK/RtcBasic", "~> {version}" end //V4.6.20~V4.6.X版本,集成 SDK 且使用部分插件,以美颜为例 Pod::Spec.new do |{YourSpec}| {YourSpec}.dependency "NERtcSDK/RtcBasic", "~> {version}" {YourSpec}.dependency "NERtcSDK/Beauty", "~> {version}" {YourSpec}.dependency "NERtcSDK/FaceDetect", "~> {version}" end //V5.3.0 及以上版本,集成 SDK 且使用部分插件,以美颜为例 Pod::Spec.new do |{YourSpec}| {YourSpec}.dependency "NERtcSDK/RtcBasic", "~> {version}" {YourSpec}.dependency "NERtcSDK/Nenn", "~> {version}" {YourSpec}.dependency "NERtcSDK/Beauty", "~> {version}" {YourSpec}.dependency "NERtcSDK/FaceDetect", "~> {version}" end
dependency
中请填入待引入的动态库对应的值,具体说明如下表所示。功能/插件 subspecs
的值framework
动态库音视频 RtcBasic
必选基础库: NERtcSDK.framework
NMCBasicModuleFramework.framework
:V5.3.0 及之后版本去掉了该库文件。NERtcnn.framework
:- V4.6.20 ~V4.6.X 版本:该动态库必选。
- V5.3.0 及之后版本,只有集成美颜、虚拟背景、音频啸叫检测、人脸增强插件时,才需要集成该库文件。基础音视频不需要集成该库文件。
神经网络 Nenn
神经网络库: NERtcnn.framework
V5.3.0 及之后版本,集成美颜、虚拟背景、音频啸叫检测、人脸增强插件时,需要集成该库文件。基础音视频不需要集成该库文件。 屏幕共享 ScreenShare
屏幕共享库: NERtcReplayKit.framework
美颜 Beauty
美颜库: NERtcBeauty.framework
FaceDetect
人脸检测库: NERtcFaceDetect.framework
虚拟背景 Segment
背景分割库: NERtcPersonSegment.framework
音频 AI 降噪 AiDenoise
AI 降噪库: NERtcAiDenoise.framework
AI 啸叫检测 AiHowling
AI 啸叫检测库: NERtcAiHowling.framework
人脸增强 FaceEnhance
人脸增强库: NERtcFaceEnhance.framework
视频超分 SuperResolution
视频超分库: NERtcSuperResolution.framework
视频降噪 VideoDenoise
视频降噪库: NERtcVideoDenoise.framework
空间音效 SpatialSound
空间音效库: NERtcAudio3D.framework
-
执行以下命令查询本地库版本。
pod search NERtcSDK
-
若不是最新版本,可以执行以下命令更新本地库版本。
pod repo update
-
执行以下命令安装安装 SDK。
pod install
-
设置签名和添加设备权限,具体请参见设置签名并添加媒体设备权限。
方法二 手动集成
- (可选)创建项目。
您可以参考此步骤创建新项目。如果您需要集成到已有的项目,请忽略该步骤。
在 XCode 里,依次选择 Create a New XCode Project > Single View App > Next 新建工程,再配置工程相关信息和合适的工程本地路径,单击 Create。
-
前往网易云信 SDK 下载中心获取当前最新版本,或联系网易云信技术支持获取对应版本的 SDK 安装包。
-
将解压之后的
framework
后缀的文件加入到工程的libs/
目录下。-
不同版本的动态库有差异,请以实际为准,具体请参见SDK 目录。
-
若您对包体积大小有要求,请集成 V4.6.20 及之后版本的 NERTC SDK,您可以通过插件化的方式按需集成动态库,具体如下表所示。
功能/插件 framework
动态库所有能力 所有 framework
动态库音视频 必选基础库: NERtcSDK.framework
NMCBasicModuleFramework.framework
:V5.3.0 及之后版本去掉了该库文件。NERtcnn.framework
:- V4.6.20 ~V4.6.X 版本:该动态库必选。
- V5.3.0 及之后版本,只有集成美颜、虚拟背景、音频啸叫检测、人脸增强插件时,才需要集成该库文件。基础音视频不需要集成该库文件。
屏幕共享 屏幕共享库: NERtcReplayKit.framework
美颜 - 美颜库:
NERtcBeauty.framework
- 人脸检测库:
NERtcFaceDetect.framework
- 神经网络库:
NERtcnn.framework
虚拟背景 - 背景分割库:
NERtcPersonSegment.framework
- 神经网络库:
NERtcnn.framework
音频 AI 降噪 AI 降噪库: NERtcAiDenoise.framework
AI 啸叫检测 - AI 啸叫检测库:
NERtcAiHowling.framework
- 神经网络库:
NERtcnn.framework
人脸增强 - 人脸增强库:
NERtcFaceEnhance.framework
- 神经网络库:
NERtcnn.framework
视频超分 视频超分库: NERtcSuperResolution.framework
视频降噪 视频降噪库: NERtcVideoDenoise.framework
空间音效 空间音效库: NERtcAudio3D.framework
-
-
以使用 Xcode v11.5 版本为例,依次选择 TARGETS > Project Name > General > Frameworks, Libraries, and Embedded Content,单击 +,再单击 Add Other…,将上述解压得到的 SDK 文件添加进去。
将 Embed 属性设置为 Embed & Sign,以使得 SDK 动态库和应用签名保持一致。
-
设置签名和添加设备权限,具体请参见设置签名并添加媒体设备权限。
在手动导入 SDK 的情况下,由于 SDK 包含模拟器版本,会导致打包失败。所以需要在打包之前将模拟器版本剥去,具体步骤参见应用打包前剥离模拟器版本。
设置签名并添加媒体设备权限
-
设置签名。
- 在 Xcode 中,依次选择 TARGETS > Project Name,单击 Signing & Capabilities,勾选 Automatically manage signing。
- 在 Team 中选择您的开发团队。
-
若您的 App 需要在退到后台时仍然运行相关功能,请打开后台音频权限。
在 Signing & Capabilities 页面,将设置项 Background Modes 设定为 ON,并勾选 Audio,AirPlay and Picture in Picture。
打开后台音频权限之后,应用在手机后台运行时,SDK 默认在后台也可以继续处理音频流,维持通话。
-
若您的 App 需要正常使用 SDK 提供的音视频功能,请给 App 授权麦克风、摄像头和 Wi-Fi 的使用权限。
编辑
info.plist
文件,添加以下三项。- Privacy - Microphone Usage Description,并填入麦克风使用目的提示语。
- Privacy - Camera Usage Description,并填入摄像头使用目的提示语。
- Application uses Wi-Fi,设置为 YES。
后续步骤
-
应用打包前剥离模拟器版本(仅手动集成 SDK 时需要)
-
在工程里创建
nim_strip_archs.sh
脚本到指定目录,例如Supporting Files
目录。 -
在
Build Phases
中增加过程,类型为New Run Script Phase
。需要把去掉模拟器的 Run Script 脚本放在 Embed Frameworks 之后。 -
在工程里添加内容:
/bin/sh 您的脚本路径
,例如/bin/sh "${SRCROOT}/NIMDemo/Supporting Files/nim_strip_archs.sh"
。 -
将如下内容复制到脚本:
#!/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
-
常见问题
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