簡體   English   中英

如何將 getUsermedia 音頻流轉換為 blob 或緩沖區?

[英]how to convert getUsermedia audio stream into a blob or buffer?

我正在從 getUserMeda 獲取音頻流,然后將其轉換為 blob 或緩沖區,並在音頻即將到來時將其發送到服務器我正在使用 socket.io 將其發送到服務器如何將音頻媒體流轉換為緩沖區?

以下是我寫的代碼

navigator.getUserMedia({audio: true, video: false}, function(stream) {
webcamstream = stream;
var media = stream.getAudioTracks();
socket.emit("sendaudio", media);
},
function(e){
   console.log(e);
  }
});

當流來自 getusermedia 函數時,如何將流轉換為緩沖區並將其發送到 node.js 服務器?

根據@MuazKhan 的評論,使用 MediaRecorder(在 Firefox 中,最終將在 Chrome 中)或 RecordRTC/etc 將數據捕獲到 blob 中。 然后您可以通過以下幾種方法之一將其導出到服務器進行分發:WebSockets、WebRTC DataChannels 等。請注意,這些不能保證實時傳輸數據,而且 MediaRecorder 還沒有比特率控制。 如果傳輸延遲,數據可能會在本地積累。

如果實時(重新)傳輸很重要,強烈考慮使用 PeerConnection 代替服務器(根據@Robert 的評論),然后將其轉換為流。 (如何完成取決於服務器,但您應該對 Opus 數據進行編碼以重新打包或解碼和重新編碼。)雖然重新編碼通常不好,但在這種情況下,您最好通過 NetEq ( webrtc.org 堆棧的抖動緩沖區和 PacketLossConcealment 代碼)並獲得干凈的實時音頻流以重新編碼流,並處理丟失和抖動。

mediaRecorder = new MediaRecorder(stream);//Cria um elemento para gavar a Stream 

let chunks = [];//Cria uma matriz para receber as parte.
mediaRecorder.ondataavailable = data => 
{
chunks.push(data.data)//Vai adicionando as partes na matriz
}
mediaRecorder.onstop = () => {//Quando ativar a função parar a gravação
//Cria o BLOB com as partes acionadas na Matriz
const blob = new Blob(chunks, { type: 'audio/wav' });
}

//Voce pode ainda criar um leitor
var reader = new FileReader();
//Passa o BLOB como parametro
reader.readAsText(blob);
//Pode visualizar os dados gerados em texto
alert(reader.result);
//Pode passar o dados para uma variável
var enviar_dados = reader.result;
 //Pode passa via AJAX e ou JQUERY para o servidor, salvar no banco de dados...

 PS-> O Type pode ser 
 //const blob = new Blob(chunks, { type: 'audio/ogg; code=opus' });
 //const blob = new Blob(chunks, { type: 'application/octet-binary' });
 //const blob = new Blob(chunks, { type: 'text/plain' });
 //const blob = new Blob(chunks, { type: 'text/html' });
 .......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM