音频共享

更新时间: 2025/10/10 15:17:55

在屏幕分享或共享本地播放的音乐文件等场景中,用户常常需要将本地系统音频发送至远端。NERTC 提供了音频共享功能,帮助您在共享屏幕的同时也能播放本地背景音,或者共享本地视频文件或音乐文件的声音,为您规避播放在线音乐文件可能会遇到的版权问题。

功能介绍

通过 NERTC SDK 可以在视频通话或互动直播的过程中实现音频共享,主持人、主播或连麦者可以将本地播放的音频流分享给远端参会者或在线观众收听,从而提升视频通话体验。

音频共享适用于在线会议、在线教育以及互动直播等场景,具体场景说明如下。

  • 视频会议场景中,参会者可以在会议中将本地的音频文件、PPT 背景音等所有系统声音分享给其他与会者,让其他与会者更加沉浸式地了解讨论的内容和主题。
  • 在线课堂场景中,老师可以线上教学过程中在将课件、教学视频的背景音等所有系统声音分享给远端的学生,提升教育场景的用户体验。
  • 互动直播场景中,主播可以在直播过程中将本地播放的音乐、视频背景音等所有系统声音分享给远端的观众,避免了因需要播放在线音乐而遇到的版权问题,同时丰富了场景体验。

网易云信 NERTC SDK 通过本地安装的虚拟声卡插件采集本地系统音频,和通过麦克风采集的音频流混流,合成一路上行音频流。

注意事项

您不能同时使用音频自播放和音频共享功能。 否则会导致加入音视频通话房间后,无法听到对端用户的音频和本地共享音频的声音。

变更记录

以下为 NERTC SDK 虚拟声卡的使用变更记录,详细记录请参考 更新日志,您可以前往 网易云信 SDK 下载中心 获取最新版本 SDK。

版本 libNERTCPrivilegedTask 库下载 虚拟声卡插件下载 虚拟声卡名称
5.9.5 及以后 libNERTCPrivilegedTask_2.0.0.zip NERTCAudioPlugin.driver NERTC Audio Device
5.4.0~5.9.0 libNERTCPrivilegedTask_1.0.2.zip NeCastAudio.driver NeCastAudio
5.3.0 及以前 libNERTCPrivilegedTask.a

操作流程

mac 音频共享.png
  • 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 功能,建议选择让用户手动安装虚拟音频插件的方案。

第一步:手动集成 NERTCPrivilegedTask 库

若您为了确保应用可以正常上架 App Store 选择让用户手动安装虚拟声卡,请忽略此步骤。

NERTC SDK 需要使用 NERTCPrivilegedTask 库来获取 root 权限,从而将虚拟声卡插件 NERTCAudioPlugin.driver 安装至系统目录 /Library/Audio/Plug-Ins/HAL 。具体操作流程如下。

  1. 在上文 下载 libNERTCPrivilegedTask

  2. 导入解压后的 libNERTCPrivilegedTask.a 文件到您的 Xcode 工程项目。

  3. 选择要运行的 target,选中 Build Settings 项和 Other Linker Flags 项,单击底下的 +,添加依赖库 NERTCPrivilegedTask。

    步骤一.png

第二步:取消 App Sandbox 功能

若您为了确保应用可以正常上架 App Store 选择让用户手动安装虚拟声卡,请忽略此步骤。

您需要在 App 的 entitlements 描述文件中,删除 App Sandbox 条目,即将其 Value 值改为 NO,以获取 root 权限,否则应用可能无法在 App Store 正常上架

步骤二.png

第三步:安装虚拟声卡插件

自动安装

  1. 由于 Mac 声卡默认不支持对系统音频进行采集,在集成了 NERTCPrivilegedTask 库并取消了 App Sandbox 功能后,用户首次使用共享系统音频功能时,SDK 会自动从网络 下载虚拟声卡插件 插件并安装。您也可以选择直接将 NERTCAudioPlugin.driver 打包至 App BundleResources 目录。
  2. 调用 checkNECastAudioDriver 来检测电脑是否安装最新版本的网易云信虚拟声卡。
    • 如果未安装,电脑会弹出对话框提示是否需要安装最新版本的虚拟声卡,方便用户进行安装。
    • 如果已经安装,用户可以选择网易云信的虚拟声卡 NERTC Audio Device 共享系统音频。

手动安装

  1. 请将 NERTCAudioPlugin.driver 下载地址告知用户,并指导用户将下载好的 NERTCAudioPlugin.driver 拷贝至系统目录 /Library/Audio/Plug-Ins/HAL

  2. 用户重启系统的音频服务。

    sudo launchctl kickstart -kp system/com.apple.audio.coreaudiod &&  sudo kill -9 `ps ax|grep 'coreaudio[a-z]' |awk '{print $1}'`
    
    • 若您选择自动安装虚拟声卡,集成 NERTCPrivilegedTask 库和取消 App Sandbox 功能后,在您首次调用 checkNECastAudioDriver 时,SDK 会要求您获取 root 权限,单击 后,系统会开始自动安装虚拟声卡插件。

      步骤三.png
    • 您可以通过 启动台其他 文件夹中 音频 MIDI 设置 应用来检查虚拟声卡插件是否安装成功。在该应用的设备列表中,有名称为 NERTC Audio Device 的设备即表明 NERTC 的虚拟声卡插件安装成功。

    • 若您不集成 NERTCPrivilegedTask 库并保留 App Sandbox 功能,NERTC SDK 不会自动安装虚拟声卡插件。但如果您设备的系统中已安装好虚拟声卡插件,共享系统音频的功能仍然可以正常使用。

第四步:开始共享系统音频

在加入房间后,调用 enableLoopbackRecording 开启音频共享。调用此方法时,您需要设置 enable 参数为 true 开启音频共享,同时设置 device_name 为虚拟声卡的名字。您可通过 enumerateRecordDevices 获取设备声卡列表,推荐使用名称以 NERTC Audio Device 为前缀的网易云信虚拟声卡。

第五步:设置共享音频的音量

调用 adjustLoopbackRecordingSignalVolume 设置系统音频的采集音量。调用此方法时,您需要设置 volume 参数指定采集信号量。该参数的取值范围为 0 ~ 100。

第六步:停止共享系统音频

调用 enableLoopbackRecording 停止系统音频采集。您需要设置 enable 参数为 false 关闭音频共享,同时设置 device_name 为指定虚拟声卡的名字。

示例代码

C++#include "nertc_engine_ex.h"
#include <iostream>

// 检测虚拟声卡是否安装
int ret = rtc_engine_->checkNECastAudioDriver();
if (ret != 0) {
    std::cout << "检测虚拟声卡失败,错误码: " << ret << std::endl;
    return;
}

// 收到检测安装声卡的内容回调
void RtcEngineEventHandlerImpl::onCheckNECastAudioDriverResult(NERtcInstallCastAudioDriverResult result) {
    switch(result) {
        case kNERtcInstallCastAudioDriverSuccess:
            // 虚拟声卡已安装,可以开启音频共享
            break;
        case kNERtcInstallCastAudioDriverNotAuthorized:
            // 未获得授权
            break;
        default:
            // 其他错误情况
            break;
    }
}

// 开启声卡采集功能
rtc_engine_->enableLoopbackRecording(true, "");

// 调整共享音频音量 (0-100)
int volume = 50; // 示例音量
rtc_engine_->adjustLoopbackRecordingSignalVolume(volume);

// 关闭声卡采集功能
rtc_engine_->enableLoopbackRecording(false, "");

API 参考

方法 功能描述
enableLoopbackRecording 开启或关闭音频共享
adjustLoopbackRecordingSignalVolume 调整音频共享音量
enumerateRecordDevices 获取系统中所有的音频采集设备列表
此文档是否对你有帮助?
有帮助
去反馈
  • 功能介绍
  • 注意事项
  • 变更记录
  • 操作流程
  • 第一步:手动集成 NERTCPrivilegedTask 库
  • 第二步:取消 App Sandbox 功能
  • 第三步:安装虚拟声卡插件
  • 自动安装
  • 手动安装
  • 第四步:开始共享系统音频
  • 第五步:设置共享音频的音量
  • 第六步:停止共享系统音频
  • 示例代码
  • API 参考