js或者node能否做到实时把语音传到后台?

js或者node能否做到实时把语音传到后台?
如果可以的话能否监听到是否有声音(需要做有声音实时传输,没声音就不传输,或者能分割出有声音和没声音的部分,类似这个意思['有声音', '', '有声音'])

总体需求的通过前端把语音实时传给后端,后端翻译后在将文本实时返回给前端,所有一切都是实时的,

阅读 1.9k
avatarAI BotBETA

在 Node.js 中,你可以使用 WebRTC (Web Real-Time Communication) 技术实现实时语音传输。WebRTC 是一种支持实时音视频通信的开放标准,可在浏览器之间直接建立安全的 P2P (Peer-to-Peer) 连接,进行实时通信。

首先,你需要一个支持 WebRTC 的库,例如 simple-peer。下面是一个简单的示例,展示了如何使用 simple-peer 在 Node.js 中实现实时语音传输:

const Peer = require('simple-peer');
const getUserMedia = require('getusermedia');
const audioContext = new (window.AudioContext || window.webkitAudioContext)();

// 获取麦克风音频流
getUserMedia({ audio: true }, (stream) => {
  // 创建一个新的 peer 连接
  const peer = new Peer({
    initiator: true,
    trickle: false,
    stream: stream,
    media: { audio: true }
  });

  // 当对端 peer 连接建立时触发
  peer.on('connection', (connection) => {
    // 将音频数据转换为 WAV 格式,并发送给对端
    const recorder = require('pcm-recorder').create({ type: 'wav' });
    connection.on('data', (data) => {
      recorder.write(data);
      connection.send(data); // 发送原始音频数据给对端
    });
  });

  // 将麦克风音频流输入到 WebRTC 连接中
  peer.on('signal', (data) => {
    // 解析接收到的信号数据,并设置对端 peer 的配置和信号数据
    const signal = peer.signal(data);
  });
});

在这个示例中,我们首先使用 getUserMedia 获取麦克风音频流。然后,我们创建一个新的 Peer 实例,并将音频流传递给它。当对端 peer 连接建立时,我们将音频数据转换为 WAV 格式,并发送给对端。为了实现实时传输,我们需要监听 connectiondata 事件,并在接收到数据时将其发送回对端。此外,我们还需要监听 signal 事件,以便在接收到对端 peer 的信号数据时设置对端 peer 的配置和信号数据。

至于监听是否有声音,你可能需要使用音频处理库(如 audio-buffer)来处理音频数据。你可以通过分析音频数据中的幅度和频率信息来判断是否有声音。具体实现方式取决于你的需求和音频数据的特性。你可能需要使用一些音频处理算法(如傅里叶变换)来分析音频数据,并确定声音的存在和强度。

1 个回答

可以实现,腾讯会议什么都有 web 版本。也有声网之类的商业化方案

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题