Cómo reproducir audio PCM crudo recibido a través de Web Socket en el navegador.
Teniendo un proyecto de spring-boot que debe transmitir audio proveniente de un cliente SIP conectado a Asterisk con el códec G711 ALAW.
Soy capaz de obtener y enviar los datos pcm a través de una conexión UDP entre el cliente SIP y el proyecto spring-boot.
El objetivo es enviar estos paquetes a través de un socket web al cliente y reproducir esos bytes de audio en el navegador.
En el navegador escucho el audio con mucho ruido utilizando este reproductor para reproducir los paquetes pcm que recibo del socket web con estos parámetros:
<script>
var player = new PCMPlayer({
encoding: '16bitFloat',
channels: 1,
sampleRate: 8000,
flushingTime: 1000
});
function StartSession() {
ws = new WebSocket(socketURL);
ws.binaryType = 'arraybuffer';
ws.addEventListener('message', function (event) {
player.feed(new Int16Array(event.data));
});
}
function CloseSession() {
if (ws != null) {
ws.close();
}
}
</script>
davy.ai
Solución
Para transmitir audio proveniente de un cliente
SIP
conectado a Asterisk con el códecG711 ALAW
en un proyecto de Spring Boot, puedes seguir los siguientes pasos:pcm
a través de una conexiónUDP
entre el clienteSIP
y el proyecto de Spring Boot.Implementa una conexión WebSocket para enviar los paquetes
pcm
recibidos al cliente y reproducir esos bytes de audio en el navegador.Para reproducir paquetes
pcm
en el navegador, necesitas usar un reproductor que admita este formato. Puedes utilizar el reproductorPCMPlayer
proporcionado en el ejemplo de código dado.Mientras configuras el
PCMPlayer
, debes especificar el tipo de codificación, canal, frecuencia de muestreo y tiempo de vaciado.En el oyente de mensajes WebSocket, debes convertir los datos
ArrayBuffer
enInt16Array
y alimentarlos alPCMPlayer
utilizando el métodoplayer.feed
.Para iniciar y cerrar la conexión WebSocket, puedes definir dos funciones,
StartSession
yCloseSession
.Si tu audio tiene mucho ruido durante la reproducción en el navegador, considera implementar algoritmos de reducción de ruido como
Noise Suppression
(supresión de ruido),Echo Cancellation
(cancelación de eco) yAutomatic Gain Control
(control automático de ganancia).Siguiendo estos pasos, puedes transmitir audio proveniente de un cliente SIP conectado a Asterisk con el códec
G711 ALAW
y reproducirlo en el navegador utilizando una conexión WebSocket y el reproductorPCMPlayer
.