Javascript +节点-是否可以在服务器上编辑媒体流中的音频并将其发送回客户端?

问题描述

因此,我试图处理来自服务器上客户端的音频,然后将新处理的音频返回给客户端。当然,这会遇到错误,即Node不支持web-audio-api,因此我使用的是web-audio-api的Node版本以及WebRTC library

由于我是WebRTC世界的新手,所以我从these examples开始使用WebRTC库。以音频视频环回示例为起点,我利用了一些库,没有标准的API来创建音频接收器,从而使我可以直接从客户端访问样本。现在,我只是想更改音量,所以我只是在更改值,并将它们推到新的轨道,这就是文档(scroll down to Programmatic Audio)所说的做到这一点。最后,我只想返回到使用.replaceTrack方法完成的新创建的轨道(我相信该方法会重新触发重新协商)。

这是到目前为止我获得的服务器代码(客户端与上面链接中的原始示例相同):

const { RTCAudioSink,RTCAudioSource } = require("wrtc").nonstandard;

function beforeOffer(peerConnection) {
  const audioTransceiver = peerConnection.addTransceiver("audio");
  const videoTransceiver = peerConnection.addTransceiver("video");

  let { track } = audioTransceiver.receiver;

  const source = new RTCAudioSource();
  const newTrack = source.createTrack();
  const sink = new RTCAudioSink(track);

  const sampleRate = 48000;
  const samples = new Int16Array(sampleRate / 100); // 10 ms of 16-bit mono audio

  const dataObj = {
    samples,sampleRate,};

  const interval = setInterval(() => {
    // Update audioData in some way before sending.
    source.onData(dataObj);
  });

  sink.ondata = (data) => {
    // Do something with the received audio samples.
    const newArr = data.samples.map((el) => el * 0.5);
    dataObj[samples] = newArr;
  };

  return Promise.all([
    audioTransceiver.sender.replaceTrack(newTrack),videoTransceiver.sender.replaceTrack(videoTransceiver.receiver.track),]);
}

这并不奇怪,这行不通,即使dataObj包含正确处理的样本,我仍然会保持沉,然后在调用newTrack时将样本传递给source.onData。 / p>

我是否正在尝试甚至可能在服务器端进行操作?任何建议都值得欢迎,就像我说的WebRTC非常环保。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)