पर नोडजेएस सर्वर से लाइव स्ट्रीमिंग ऑडियो प्राप्त करें मुझे 1 क्लाइंट से एक सर्वर से एकाधिक श्रोता क्लाइंट में एक वास्तविक समय लाइव ऑडियो स्ट्रीम की आवश्यकता है।क्लाइंट
वर्तमान में मेरे पास क्लाइंट से रिकॉर्डिंग है और सर्वर पर socket.io के माध्यम से ऑडियो स्ट्रीम करें। सर्वर को यह डेटा प्राप्त होता है और इस स्ट्रीम को सुनना चाहते हैं, जो क्लाइंट को ऑडियो (socket.io? के माध्यम से भी) स्ट्रीम करना होगा। यह यथासंभव वास्तविक समय होना चाहिए (देरी को कम करें)।
मैं माइक्रोफोन रिकॉर्ड करने के लिए GetUserMedia का उपयोग कर रहा हूं (ब्राउज़र संगतता यहां महत्वपूर्ण नहीं है)। मैं चाहता हूं कि क्लाइंट स्ट्रीम सुनने के लिए एचटीएमएल 5 ऑडियो टैग का उपयोग करें। सर्वर पर प्राप्त डेटा खंडों (वर्तमान में 700 द्वारा पैक किया गया) है जो ऑडियो/वाव के साथ ब्लॉब में पैक किया जाता है।
mediaRecorder.ondataavailable = function(e) {
this.chunks.push(e.data);
if (this.chunks.length >= 700)
{
this.sendData(this.chunks);
this.chunks = [];
}
};
mediaRecorder.sendData = function(buffer) {
blob = new Blob(buffer, { 'type' : 'audio/wav' });
socket.emit('voice', blob);
}
सर्वर मैं ग्राहक के लिए इस तरह एक ही तरह से हिस्सा नहीं भेज पा रहा हूँ पर::
यह मेरा कोड सर्वर को भेजने के लिए है
socket.on('voice', function(blob) {
socket.broadcast.emit('voice', blob);
});
पर लेकिन
var audio = document.createElement('audio');
socket.on('voice', function(arrayBuffer) {
var blob = new Blob([arrayBuffer], { 'type' : 'audio/wav' });
audio.src = window.URL.createObjectURL(blob);
audio.play();
});
यह हिस्सा मैं भेज के पहले ब्लॉब लिए काम करता है आप ke करने के लिए अनुमति नहीं है: ग्राहक मैं इस तरह इस खेल सकते हैं एपी नए यूआरएल स्रोत में audio.src में बदल रहा है, इसलिए यह एक कामकाजी समाधान नहीं है।
मुझे लगता है कि मुझे सर्वर पर किसी प्रकार की स्ट्रीम बनाना है जिसे मैं सुनने वाले ग्राहकों पर एचटीएमएल 5 के ऑडियो टैग में डाल सकता हूं लेकिन मुझे नहीं पता कि कैसे। वास्तविक समय में इस धारा में भाग के साथ प्राप्त ब्लॉब्स को जोड़ा जाना चाहिए।
ऐसा करने का सबसे अच्छा तरीका क्या है? क्या मैं इसे क्लाइंट माइक्रोफोन से सर्वर पर कर रहा हूं?
यदि आपने वीब्रेट के बारे में सुना है, तो यह आपकी समस्या के लिए एक प्राकृतिक समाधान है क्योंकि वीब्रेट पीयर के साथ सहकर्मी है। –
मुझे पता है, लेकिन मैं नहीं चाहता कि यह सहकर्मी के साथ सहकर्मी हो लेकिन सर्वर से प्रसारित हो।क्लाइंट रिकॉर्डिंग करने वाले क्लाइंट ने बैंडविड्थ को सभी क्लाइंट्स को प्रसारित करने के लिए लिखा है, इसलिए मुझे –
करने के लिए सर्वर की आवश्यकता है, आप वेबआरटीसी के एमसीयू आर्किटेक्चर का उपयोग कर सकते हैं, लेकिन मुझे लगता है कि यहां दायरे से बाहर है। –