Tengo problemas para transmitir datos de MP3 a través de WebSocket con node.js y socket.io. Todo parece funcionar, pero DecodeAudioData no juega limpio conmigo.Cómo transmitir datos MP3 a través de WebSockets con node.js y socket.io?
Este es mi servidor de juguete:
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
app.listen(8081);
function handler (req, res) {
res.writeHead(200, {
'Content-Type': 'text/html',
});
res.end('Hello, world!');
}
io.configure('development', function() {
io.set('log level', 1);
io.set('transports', [ 'websocket' ]);
});
io.sockets.on('connection', function (socket) {
console.log('connection established');
var readStream = fs.createReadStream("test.mp3",
{'flags': 'r',
'encoding': 'binary',
'mode': 0666,
'bufferSize': 64 * 1024});
readStream.on('data', function(data) {
console.log(typeof data);
console.log('sending chunk of data')
socket.send(data);
});
socket.on('disconnect', function() {
console.log('connection droped');
});
});
console.log('Server running at http://127.0.0.1:8081/');
El cliente recibe los datos como tipo cadena, pero quiero alimentar a los datos a decodeAudioData y parece que no le gusta cuerdas. La llamada a decodeAudioData da como resultado el siguiente mensaje de error:
Uncaught Error: SYNTAX_ERR: DOM Exception 12
creo decodeAudioData necesita los datos almacenados en un ArrayBuffer. ¿Hay alguna forma de convertir los datos?
Este es el código de cliente:
<script src="http://127.0.0.1:8081/socket.io/socket.io.js"></script>
<script>
var audioBuffer = null;
var context = null;
window.addEventListener('load', init, false);
function init() {
try {
context = new webkitAudioContext();
} catch(e) {
alert('Web Audio API is not supported in this browser');
}
}
function decodeHandler(buffer) {
console.log(data);
}
var socket = io.connect('http://127.0.0.1:8081');
socket.on('message', function (data) {
// HERE IS THE PROBLEM
context.decodeAudioData(data, decodeHandler, function(e) { console.log(e); });
});
</script>
¿ha encontrado una solución a este problema? – codeAnand
No he encontrado una solución usando socket.io. Ver mi propia respuesta para una solución sin socket.io. –
Socket.io 1.0 tiene soporte para binario, lo intento pero no funciona. También lo intento con websocket, pero exactamente con el mismo error. ¿Tienes un ejemplo de cómo resolver esto ?. – cmarrero01