音频共享
更新时间: 2024/09/18 16:26:13
在屏幕分享或共享本地播放的音乐文件等场景中,用户常常需要将本地系统音频发送至远端。NERTC 提供了音频共享功能,帮助您在共享屏幕的同时也能播放本地背景音,或者共享本地视频文件或音乐文件的声音,为您规避播放在线音乐文件可能会遇到的版权问题。
功能介绍
通过 NERTC SDK 可以在视频通话或互动直播的过程中实现音频共享,主持人、主播或连麦者可以将本地播放的音频流分享给远端参会者或在线观众收听,从而提升视频通话体验。
音频共享适用于在线会议、在线教育以及互动直播等场景,具体场景说明如下。
- 视频会议场景中,参会者可以在会议中将本地的音频文件、PPT 背景音等所有系统声音分享给其他与会者,让其他与会者更加沉浸式地了解讨论的内容和主题。
- 在线课堂场景中,老师可以线上教学过程中在将课件、教学视频的背景音等所有系统声音分享给远端的学生,提升教育场景的用户体验。
- 互动直播场景中,主播可以在直播过程中将本地播放的音乐、视频背景音等所有系统声音分享给远端的观众,避免了因需要播放在线音乐而遇到的版权问题,同时丰富了场景体验。
NERTC SDK 通过本地安装的虚拟声卡插件采集本地系统音频,和通过麦克风采集的音频流混流,合成一路上行音频流。
注意事项
您不能同时使用音频自播放和音频共享功能。 否则会导致加入音视频通话房间后,无法听到对端用户的音频和本地共享音频的声音。
配置步骤
操作流程
- App Sandbox 功能被取消后,App 内获取到的用户路径会发生变化。通过 NSSearchPathForDirectoriesInDomains 等系统方法获取到的 ~/Documents、 ~/Library 等目录会从 Sandbox 目录切换成用户目录 /Users/用户名/Documents、 /Users/用户名/Library。
- 集成 NERTCPrivilegedTask 库,或为了让 SDK 自动安装虚拟声卡插件关闭 App Sandbox 功能后,App 可能会无法上架到 App Store,详情请参考 App Store Review Guidelines 。如需上架 App Store 或者使用 Sandbox 功能,建议选择让用户手动安装虚拟音频插件的方案。
步骤一 手动集成 NETCPrivilegedTask 库
若您为了确保应用可以正常上架 App Store 选择让用户手动安装虚拟声卡,请忽略此步骤。
SDK 需要使用 NERTCPrivilegedTask 库来获取 root 权限,从而将虚拟声卡插件 NeCastAudio.driver
安装至系统目录 /Library/Audio/Plug-Ins/HAL
。具体操作流程如下。
- 下载 NERTCPrivilegedTask 库。
- 如果是 V5.4.0 及之后版本,请下载libNERTCPrivilegedTask_v1.0.2.a。
- 如果是 V5.3.0 及之前版本,请下载libNERTCPrivilegedTask。
- 导入解压后的 libNERTCPrivilegedTask.a 文件到您的 Xcode 工程项目。
- 选择要运行的 target,选中 Build Settings 项和 Other Linker Flags 项,单击底下的【+】,添加依赖库 NERTCPrivilegedTask。
步骤二 取消 App Sandbox 功能
若您为了确保应用可以正常上架 App Store 选择让用户手动安装虚拟声卡,请忽略此步骤。
您需要在 App 的 entitlements 描述文件中,删除 App Sandbox 条目,即将其 Value 值改为 NO,以获取 root 权限,否则应用可能无法在 App Store 正常上架。
步骤三 安装虚拟声卡插件
自动安装:
- 由于 Mac 声卡默认不支持对系统音频进行采集,在集成了 NERTCPrivilegedTask 库并取消了 App Sandbox 功能后,用户首次使用共享系统音频功能时,SDK 会自动从网络下载虚拟声卡插件并安装。您也可以选择直接将
NeCastAudio.driver
打包至 App Bundle 的 Resources 目录。 - 调用 checkNECastAudioDriver 来检测电脑是否安装最新版本的云信虚拟声卡。
- 如果未安装,电脑会弹出对话框提示是否需要安装最新版本的虚拟声卡,方便用户进行安装。
- 如果已经安装,用户可以选择云信的虚拟声卡 NecastAudio 共享系统音频。
手动安装:
- 请将
NeCastAudio.driver
下载地址告知用户,并指导用户将下载好的NeCastAudio.driver
拷贝至系统目录/Library/Audio/Plug-Ins/HAL
。 - 用户重启系统的音频服务。
sudo kill -9 `ps ax|grep 'coreaudio[a-z]' |awk '{print $1}'`
- 若您选择自动安装虚拟声卡,集成 NERTCPrivilegedTask 库和取消 App Sandbox 功能后,在您首次调用 checkNECastAudioDriver 时,SDK 会要求您获取 root 权限,单击【好】后,系统会开始自动安装虚拟声卡插件。
-
您可以通过启动台的其他文件夹中音频 MIDI 设置应用来检查虚拟声卡插件是否安装成功。在该应用的设备列表中,有名称为 “NeCastAudio A” 的设备即表明 NERTC 的虚拟声卡插件安装成功。
-
若您不集成 NERTCPrivilegedTask 库并保留 App Sandbox 功能,NERTC SDK 不会自动安装虚拟声卡插件。但如果您设备的系统中已安装好虚拟声卡插件,共享系统音频的功能仍然可以正常使用。
步骤四 开始共享系统音频
在加入房间后,调用 enableLoopbackRecording 开启音频共享。调用此方法时,您需要设置 enable 参数为 true 开启音频共享,同时设置 device_name 为虚拟声卡的名字。您可通过 enumerateRecordDevices 获取设备声卡列表,推荐使用名称以 NeCastAudio
为前缀的云信虚拟声卡。
步骤五 设置共享音频的音量
调用 adjustLoopbackRecordingSignalVolume 设置系统音频的采集音量。调用此方法时,您需要设置 volume 参数指定采集信号量。该参数的取值范围为 0 ~ 100。
步骤六 停止共享系统音频
调用 enableLoopbackRecording 停止系统音频采集。您需要设置 enable 参数为 false 关闭音频共享,同时设置 device_name 为指定虚拟声卡的名字。
示例代码
//检测虚拟声卡是否安装
int ret = rtc_engine_->checkNECastAudioDriver();
//收到检测安装声卡的内容回调
void RtcEngineEventHandlerImpl::onCheckNECastAudioDriverResult(NERtcInstallCastAudioDriverResult result)
{
}
//开启声卡采集功能
rtc_engine_->enableLoopbackRecording(true, "NeCastAudio");
//调整共享音频音量
rtc_engine_->adjustLoopbackRecordingSignalVolume(volume);
//关闭声卡采集功能
rtc_engine_->enableLoopbackRecording(false, "NeCastAudio");
API 参考
方法 | 功能描述 |
---|---|
enableLoopbackRecording | 开启或关闭音频共享 |
adjustLoopBackRecordingSignalVolume | 调整音频共享音量 |
enumerateRecordDevices | 获取系统中所有的音频采集设备列表 |