音频数据回调
更新时间: 2024/09/18 16:26:13
从V5.5.30版本开始,NERTC SDK支持音频PCM数据回调功能,通过该功能,可以获取到本地音频流的PCM数据,采样率,通道数,以供用户自定义处理。
接口说明
该功能通过以下接口实现:
-
enableAudioFrame(duration?: number) 开启回调
其中,duration表示预设的音频数据时长,单位为毫秒,最小100ms,最大10000ms, 默认1000ms
-
关闭回调
-
on(event: 'audio-data', callback: (audiodata: AudioFrame) => void)
在本地Stream对象中注册'audio-data'事件,以获取音频数据,AudioFrame格式:
- data: Array
音频数据,PCM格式,length为1时为单声道,长度为2时为双声道 - sampleRate: number 采样率
- duration: number 实际音频时长,单位ms
- data: Array
注意事项
- 如果需要修改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()
此文档是否对你有帮助?