音频数据回调

更新时间: 2024/09/18 16:26:13

从V5.5.30版本开始,NERTC SDK支持音频PCM数据回调功能,通过该功能,可以获取到本地音频流的PCM数据,采样率,通道数,以供用户自定义处理。

接口说明

该功能通过以下接口实现:

注意事项

  • 如果需要修改duration,需要先调用 disableAudioFrame() 关闭,再调用 enableAudioFrame() 开启
  • 受内部缓存影响,音频数据实际时长可能会略小于预设时长,以 audiodata.duration 为准
  • 采样率和输出设备有关,以 audiodata.sampleRate 为准
  • 在某些浏览器下,即使输出设备为单声道,也可能输出双声道数据,此时右声道为[0,0...]或者同左声道数据一致,如无特殊需要,建议只使用左声道数据
  • 目前发现 Chrome 104 以上版本获取音量会引发内存泄漏。该问题源于Chrome浏览器RTCPeerConnection与AudioWorkletNode协作时引发,目前无法回避。如有长时间通话需求,应避免使用该方法
  • Safari浏览器使用该功能时,需要在15版本及以上

示例代码

// 创建本端 stream 实例
rtc.localStream = NERTC.createStream({
    uid: uid,                      // 本端的uid
    audio: true,                   // 是否从麦克风采集音频
    microphoneId: microphoneId,    // 麦克风设备 deviceId,通过 getMicrophones() 获取
    video: true,                   // 是否从摄像头采集视频
    cameraId: cameraId             // 摄像头设备 deviceId,通过 getCameras() 获取
});

rtc.localStream.init().then(async ()=>{
    //音视频初始化完成
    let div = document.getElementById('local-container')
    //开始播放本地视频流
    await rtc.localStream.play(div)

    //注册音频回调
    rtc.localStream.on('audio-data', (frame) => {
      console.warn('audio data: ', frame)
      audioDataBuffer = frame
    })
    //开启回调
    rtc.localStream.enableAudioFrame()
});

//关闭回调
rtc.localStream.disableAudioFrame()

此文档是否对你有帮助?
有帮助
去反馈
  • 接口说明
  • 注意事项
  • 示例代码