Tôi đang cố gắng tạo cuộc trò chuyện thoại theo thời gian thực. một khi một khách hàng đang nắm giữ một nút và các cuộc đàm phán, tôi muốn âm thanh được gửi qua socket đến backend nodejs, sau đó tôi muốn truyền dữ liệu này đến một máy khách khác.Tôi có thể truyền trực tiếp âm thanh micrô từ máy khách đến ứng dụng khách bằng nút không?
đây là mã gửi khách hàng:
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);
}
});
Máy chủ sau đó được đệm này và chuyển nó đến các khách hàng khác (trong ví dụ này, khách hàng giống nhau)
Máy chủ Mã
socket.on('broadcast', function(buffer) {
socket.emit('broadcast', new Int16Array(buffer));
});
Và sau đó, để phát âm thanh ở phía bên kia (người nhận), mã khách hàng giống như:
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);
});
Kết quả mong đợi của tôi là âm thanh từ máy khách A sẽ được nghe trong ứng dụng khách B, tôi có thể thấy bộ đệm trên máy chủ, tôi có thể xem bộ đệm trong máy khách nhưng tôi không nghe thấy gì. Tôi biết socket.io 1.x hỗ trợ dữ liệu nhị phân nhưng tôi không thể tìm thấy ví dụ nào về trò chuyện thoại, tôi cũng đã thử sử dụng BinaryJS nhưng kết quả cũng giống nhau, ngoài ra, tôi biết rằng với WebRTC, đây là một nhiệm vụ đơn giản nhưng tôi không muốn sử dụng WebRTC, bất cứ ai có thể chỉ cho tôi một tài nguyên tốt hay cho tôi biết tôi đang thiếu gì?
Cảm ơn bạn rất nhiều vì câu trả lời thông tin này.Lý do tôi không muốn sử dụng webrtc: đầu tiên tôi phải sử dụng STUN và TURN dịch vụ để làm cho nó hoạt động trên internet và thứ hai, nói rằng bạn muốn một khách hàng để phát sóng cho 10 người dùng nó có nghĩa là 10 kết nối ngang hàng, hơn khách hàng trong cuộc trò chuyện, các kết nối ngang hàng hơn mà mỗi khách hàng cần thiết lập – udidu
vâng bạn cần các máy chủ STUN và TURN nhưng bạn sẽ tìm thấy nhiều máy chủ mà bạn có thể sử dụng hoặc lưu trữ một số máy chủ của mình (https://code.google.com/p/ rfc5766-turn-server /). Đối với các vấn đề many2many bạn có thể có một cái nhìn cho phần mềm được gọi là: MCU. MCU tốt nhất cho WebRTC (mã nguồn mở) tại thời điểm này là Licode: http://lynckia.com/licode/ tôi nghĩ (và sử dụng), nhưng bạn cũng có thể xem tại: http://www.kurento.org/và TelePresence: https://code.google.com/p/telepresence/ – Cracker0dks