问题描述
因此,我试图处理来自服务器上客户端的音频,然后将新处理的音频返回给客户端。当然,这会遇到错误,即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 (将#修改为@)