文档反馈
文档反馈

自定义音频采集

NERTC SDK 支持自定义音频采集功能,即开发者可以向 NERTC SDK 提供自定义的音频输入源数据,并由 NERTC SDK 进行编码推流。

一般情况下,App 采用默认设备采集音频数据,通常是本设备的内置麦克风。但在部分场景下可能需要使用自定义的音频源,例如:

基于以上场景,NERTC SDK 支持开发者使用自定义的音频源,以实现业务场景中的相关需求。本文档将介绍如何实现自定义视频采集功能。

Android

您可以通过 NERTC SDK 的 setExternalAudioSource 接口开启自定义音频采集功能。然后使用 pushExternalAudioFrame 接口将外部音频数据帧推送给 NERTC SDK,音频数据格式通过 pushExternalAudioFrame 函数参数 NERtcAudioExternalFrame 来指定。

注意事项

实现方法

  1. 在 joinChannel 之前,调用 setExternalAudioSource 开启自定义音频采集功能,并设置外部音频采集参数。
  2. 本地用户成功加入房间之后,使用自采集模块采集音频数据。开发者需要自行管理音频数据采集和处理逻辑。
  3. 完成音频数据处理后,调用 pushExternalAudioFrame 将外部音频数据帧推送给 NERTC SDK。

示例代码

NERtcAudioExternalFrame audioFrame = new
NERtcAudioExternalFrame();
audioFrame.audioData =  sampleData;
audioFrame.numberOfChannels = 1;
audioFrame.sampleRate =  48000;
audioFrame.samplesPerChannel = 48000  * 20 / 1000;
NERtcEx.getInstance().pushExternalAudioFrame(audioFrame);

iOS

您可以通过 NERTC SDK 的 setExternalAudioSource 接口开启自定义音频采集功能,并设置外部音频采集参数。然后使用 pushExternalAudioFrame 接口将外部音频数据帧推送给 NERTC SDK。

注意事项

实现方法

  1. 在 joinChannel 之前,调用 setExternalAudioSource 开启自定义音频采集功能,并设置外部音频采集参数。

  2. 本地用户成功加入房间之后,通过 enableLocalAudio 开启音频功能,并使用自采集模块采集音频数据。

    开发者需要自行管理音频数据采集和处理逻辑。

  3. 完成音频数据处理后,调用 pushExternalAudioFrame 将外部音频数据帧推送给 NERTC SDK。

示例代码

  [NERtcEngine sharedEngine] setExternalAudioSource:YES sampleRate:48000 channels:1];

NERtcAudioFrame *frame = [[NERtcAudioFrame alloc] init];
  NERtcAudioFormat *format = [[NERtcAudioFormat alloc] init];
  frame.data = data;
  frame.format = format;

  format.bytesPerSample = 2;
  format.channels = 1;
  format.sampleRate = 48000;
  format.samplesPerChannel = format.sampleRate / (1000 / 10); //假设采样周期是10ms

  [[NERtcEngine sharedEngine] pushExternalAudioFrame:frame];

Windows&macOS

您可以通过 NERTC SDK 的 setExternalAudioSource 接口开启自定义音频采集功能,并设置外部音频采集参数。然后使用 pushExternalAudioFrame 接口将外部音频数据帧推送给 NERTC SDK。

注意事项

实现方法

  1. 在 joinChannel 之前,调用 setExternalAudioSource 开启自定义音频采集功能,并设置外部音频采集参数。

  2. 本地用户成功加入房间之后,使用自采集模块采集音频数据。

    开发者需要自行管理音频数据采集和处理逻辑。

  3. 完成音频数据处理后,调用 pushExternalAudioFrame 将外部音频数据帧推送给 NERTC SDK。

示例代码

   //使用自定义音频
    rtc_engine_->setExternalAudioSource(true, 48000, 1);

    //push 数据
    nertc::NERtcAudioFrame frame;
    frame.data = (void*)(external_audioin_pcm_data);
    frame.format.type = nertc::kNERtcAudioTypePCM16;
    frame.format.bytes_per_sample = 2;
    frame.format.samples_per_channel = 48000 * 10 / 1000;
    frame.format.sample_rate = 48000;
    frame.format.channels = 1;
    rtc_engine_->pushExternalAudioFrame(frame);

WebWeb

通过 createStream 创建音频流时,可以通过 audioSource 指定自定义的音频输入源,以此实现自定义音频采集。

示例代码

const mediaStream = await navigator.mediaDevices.getUserMedia({audio: true});
const audioSource = await mediaStream.getAudioTracks()[0];
// 处理一番audioSource
const localStream = WebRTC2.createStream({
  audio: true,
  audioSource: audioSource
});
await localStream.init();
await client.publish(localStream);
×

反馈成功

非常感谢您的反馈,我们会继续努力做得更好。