Estoy tratando de enviar audio a través de sockets web al servidor de nodo donde quiero almacenarlo en el sistema de archivos local. Puedo agregar los datos recibidos en un archivo, pero no se puede reproducir.
La mayoría de las soluciones que encontré son para el lado del cliente que usan AudioContext.decodeAudiodata()
.
cliente
localAudioStreamRecorder = getMediaStreamRecording( localAudioStream, 'audio/webm;codecs=opus', (data: ArrayBuffer) => { handleSendRecordingChunk(socket, { ...getIdentityPayload({ sessionId, userId, role }), data, streamType: 'audio', }) } )
servidor
const audioStreamPass = fs.createWriteStream(audioFilePath, { flags: 'a' }); const newData = async (socket, eventData, cb) => { const { sessionId } = eventData.body; if (eventData.body.streamType === 'audio') { // Need help here audioStreamPass.write(Buffer.from(new Uint8Array(eventData.body.data))); } };
Solo quiero saber cómo puedo decodificar estos datos en algo que se pueda reproducir. Gracias.
Prueba esto en el servidor :
const { Readable } = require('stream'); const audioStreamPass = fs.createWriteStream(audioFilePath, { flags: 'a' }); const newData = async (socket, eventData, cb) => { const { sessionId } = eventData.body; if (eventData.body.streamType === 'audio') { // Create the readable stream from buffer const readableStream = Readable.from(buffer); //Pipe the stream to the writeable readableStream.pipe(audioStreamPass) };