javascript - 如何使用 socket.io 发送 MediaStream AUDIO 数据
问题描述
我一直无法获取从麦克风录制的音频数据并将其发送给房间中的其他客户,以便人们可以实时相互交谈。我有一种方法可以做到这一点,但它效率低下且不稳定......
setInterval(() => {
navigator.mediaDevices.getUserMedia({ audio: true })
.then(stream => {
const mediaRecorder = new MediaRecorder(stream);
mediaRecorder.start();
const audioChunks = [];
mediaRecorder.addEventListener("dataavailable", (event) => {
audioChunks.push(event.data);
});
mediaRecorder.addEventListener("stop", () => {
socket.emit('liveAudioToServer', audioChunks)
});
setTimeout(() => {
mediaRecorder.stop();
},2000);
});
}, 2000);
socket.on('active', () => {
if(navigator.getUserMedia) {
navigator.getUserMedia(
{audio: true},
function(stream) {
const audioContext3 = new AudioContext();
const audioSource3 = audioContext3.createMediaStreamSource(stream);
const analyser3 = audioContext3.createAnalyser();
audioSource3.connect(analyser3);
analyser3.fftSize = 256;
const bufferLength = analyser3.frequencyBinCount;
const dataArray = new Uint8Array(bufferLength);
function sendAudioChunks(){
analyser3.getByteFrequencyData(dataArray);
requestAnimationFrame(sendAudioChunks);
socket.emit('liveAudioToServer', dataArray)
}
sendAudioChunks();
},
function(){ console.log("Error 003.")}
);
}
解决方案
推荐阅读
- jenkins - Jenkins 共享库字段变量不是单例
- c - 通过 MacLaurin 级数的 cos(x) 图表仅获得第一个结果正确
- jsp - 无法执行 JSTL XML ForEach 语句
- spring - javamail不向office365用户电子邮件ID发送电子邮件
- macos - 无法创建 SSL 证书请求文件
- typescript - 在打字稿中将嵌套对象叶键值声明为未定义
- python-3.x - 从另一个不和谐的应用程序中回显消息
- python - 是否可以替换 Rope 来重构 VS Code 中的 python 代码?
- c++ - 无法安装需要编译的 C++ 代码的 R 包 (macOS Big Sur 11.4)
- sql - 编写查询以显示过去 1 年收到的每月总销售额