canlı akış sesini alın 1 istemciden bir sunucuya birden çok dinleyici istemcisine gerçek zamanlı bir canlı ses akışım olması gerekir.NodeJS sunucusundan istemcilere
Şu anda istemciden gelen kaydı alıyorum ve sese socket.io üzerinden ses dosyasını sunucuya aktarıyorum. Sunucu bu verileri alır ve bu akışı dinlemek isteyen istemcilere sese (ayrıca socket.io? Aracılığıyla) akış vermelidir. Mümkün olduğu kadar gerçek zaman olmalıdır (gecikmeyi en aza indir).
Mikrofonu kaydetmek için GetUserMedia kullanıyorum (tarayıcı uyumluluğu burada önemli değil). İstemcilerin akışı dinlemek için HTML5 ses etiketi kullanmasını istiyorum. Sunucuda alınan veriler, tip ses/wav içeren bir blob içinde paketlenmiş (şu anda 700 paketlenmiş) parçalardır.
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);
}
ben müşteriye böyle aynı şekilde parçalar göndermek mümkün değilim sunucuda:
Bu
benim kod sunucusuna göndermektirsocket.on('voice', function(blob) {
socket.broadcast.emit('voice', blob);
});
Açık
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();
});
Bu gönderdiğim parçalar ilk damla çalışır ancak ke izin yok: istemci böyle bu oynayabilir ep, audio.src'ye yeni URL kaynağına geçerek bu yüzden çalışan bir çözüm değildir.
Sunucuda, dinleme istemcilerinde HTML5'in ses etiketine yerleştirebileceğim bir tür akış oluşturmam gerektiğini düşünüyorum, ancak nasıl olduğunu bilmiyorum. Toplanan bloklar gerçek zamanlı olarak bu akıma eklenmelidir.
Bunu yapmanın en iyi yolu nedir? İstemci mikrofondan sunucuya doğru yapıyorum?
Sen değişebilir
Webrtc hakkında bir şeyler duyduysanız, o zaman webrtc eşler arası olduğu için sorun eksi sunucunuz için doğal bir çözümdür. –
Biliyorum ama eşler arası olmayı istemiyorum ama bir sunucudan yayın istiyorum.Ses doensnt kayıt istemci yüzden –
Sen WebRTC'de ait MCU mimari kullanılabilir yapmak için bir sunucu gereken tüm müşterilerine yayın yapma bant genişliği enought ama burada kapsam dışında sanırım. –