Gerçek zamanlı sesli sohbet oluşturmaya çalışıyorum. Bir müşteri bir tuşa bastığında ve konuştuğunda, sesin soket üzerinden nodejs arka ucuna gönderilmesini istiyorum, sonra bu verileri başka bir müşteriye aktarmak istiyorum.Düğüm kullanarak istemciden istemciye mikrofon ses akışı yapabilir miyim?
socket.on('connect', function() {
var session = {
audio: true,
video: false
};
navigator.getUserMedia(session, function(stream){
var audioInput = context.createMediaStreamSource(stream);
var bufferSize = 2048;
recorder = context.createScriptProcessor(bufferSize, 1, 1);
recorder.onaudioprocess = onAudio;
audioInput.connect(recorder);
recorder.connect(context.destination);
},function(e){
});
function onAudio(e) {
if(!broadcast) return;
var mic = e.inputBuffer.getChannelData(0);
var converted = convertFloat32ToInt16(mic);
socket.emit('broadcast', converted);
}
});
sunucusu daha sonra bu tampon alır ve başka bir müşteri için akış (bu örnekte, aynı istemci)
Sunucu Kod
socket.on('broadcast', function(buffer) {
socket.emit('broadcast', new Int16Array(buffer));
});
: burada
gönderici müşteri kodu
Ve sonra, sesi diğer tarafta (alıcı) çalmak için istemci kodu şöyle:
socket.on('broadcast', function(raw) {
var buffer = convertInt16ToFloat32(raw);
var src = context.createBufferSource();
var audioBuffer = context.createBuffer(1, buffer.byteLength, context.sampleRate);
audioBuffer.getChannelData(0).set(buffer);
src.buffer = audioBuffer;
src.connect(context.destination);
src.start(0);
});
Beklenen sonuç, A istemcisinden gelen sesin B istemcisinde duyulacağı, sunucudaki arabelleği görebildiğim, arabelleği istemciye döndüğünün ancak hiçbir şey duymadığıdır.
socket.io 1.x'in ikili verileri desteklediğini biliyorum ancak sesli sohbet yapma konusunda herhangi bir örnek bulamıyorum, ayrıca BinaryJS'yi kullanmayı denedim ama sonuçlar da aynı, WebRTC ile bunu biliyorum Basit bir görev ama WebRTC'yi kullanmak istemiyorum, kimse iyi bir kaynağa işaret edebilir mi, yoksa neyi eksik olduğumu söyleyebilir mi?
Bu bilgilendirici cevap için çok teşekkür ederim.Webrtc kullanmak istemememin sebebi: önce internette çalışmasını sağlamak için STUN ve TURN servislerini kullanmam gerekiyor, ikincisi bir müşterinin 10 kullanıcı için 10 eşdeğer bağlantı yapmasını istediğini söylüyorsunuz. sohbet istemcilerinde, her bir istemci – udidu
kurmak için daha fazla eş bağlantı kurmaya ihtiyaç duyarsınız, STUN ve TURN sunucularına ihtiyaç duyarsınız, ancak kendiniz tarafından kullanabileceğiniz veya barındırabileceğiniz birçok sunucu bulacaksınız (https://code.google.com/p/ rfc5766-dönüş-sunucu /). Many2many problemi için şu adresteki bir yazılımı arayabilirsiniz: MCU. WebRTC için en iyi MCU (açık kaynak) şu anda Licode: http://lynckia.com/licode/ düşünüyorum (ve kullanım), ama ayrıca bir göz atabilirsiniz: http://www.kurento.org/ve Telepresence: https://code.google.com/p/telepresence/ – Cracker0dks