我在处理数据流方面完全没有经验,想将getUserMedia作为学习项目输入到opus转换器中,然后-也许太天真了-通过socket.io发送它。我的想法-也许是错误的想法-是我不断地将流分成多个部分进行转换。
[我感谢所有对通用流处理能力更好的解释,因为我说这是一个学习项目,我知道WebRTC提供了更好的解决方案。
作为编码器,我想使用https://github.com/ImagicTheCat/libopusjs。欢迎使用替代方法,但我想坚持使用基于wasm的编码器的想法。
到目前为止,我所拥有的(作为第一步,我的想法是对流进行编码,然后再次解码并输出):
if (navigator.mediaDevices) {
console.log('getUserMedia supported.');
navigator.mediaDevices.getUserMedia ({audio: true, video: true})
.then(function(stream) {
video.srcObject = stream;
video.onloadedmetadata = function(e) {
video.play();
video.muted = true;
};
var audioCtx = new AudioContext();
var source = audioCtx.createMediaStreamSource(stream);
var enc = new libopus.Encoder(1,48000,24000,20,false);
=> enc stream
var dec = new libopus.Decoder(1,48000);
=> perspectively send this enc stream via socketio
=> dec enc stream => RESULT stream
RESULT.connect(audioCtx.destination);
})
.catch(function(err) {
console.log('The following gUM error occured: ' + err);
});
} else {
console.log('getUserMedia not supported on your browser!');
}
您看过这些WASM模块吗?