streaming - Transmisión de audio desde un servidor Node.js a la etiqueta<audio> HTML5
audio-streaming shoutcast (1)
Como puede ver, parece que una fuente de MP3 solo funciona en Safari (y posiblemente en IE9). Es posible que deba experimentar con alguna transcodificación del lado del servidor (con ffmpeg o mencoder ) a OGG Vorbis. Estoy bastante seguro de que pude hacer que Chrome se comporte correctamente cuando estaba enviando datos de Vorbis.
Sin embargo, Firefox seguía siendo un mocoso, tal vez no le guste la codificación fragmentada (todos los servidores SHOUTcast responden con una respuesta de la versión HTTP/1.0
, que aún no había definido Transfer-Encoding: chunked
todavía). Intente enviar un encabezado de Transfer-Encoding: identity
respuesta de Transfer-Encoding: identity
con el flujo de OGG para deshabilitarlo, y Firefox MIGHT funciona. No he probado esto.
¡Déjame saber como va! ¡Aclamaciones!
He estado experimentando con flujos binarios en Node.js, y para mi sorpresa, en realidad tengo una demostración de trabajo de tomar un flujo de Shoutcast usando node-radio-stream y insertarlo en un elemento HTML5 usando codificación fragmentada. ¡Pero solo funciona en safari!
Aquí está mi código de servidor:
var radio = require("radio-stream");
var http = require(''http'');
var url = "http://67.205.85.183:7714";
var stream = radio.createReadStream(url);
var clients = [];
stream.on("connect", function() {
console.error("Radio Stream connected!");
console.error(stream.headers);
});
// When a chunk of data is received on the stream, push it to all connected clients
stream.on("data", function (chunk) {
if (clients.length > 0){
for (client in clients){
clients[client].write(chunk);
};
}
});
// When a ''metadata'' event happens, usually a new song is starting.
stream.on("metadata", function(title) {
console.error(title);
});
// Listen on a web port and respond with a chunked response header.
var server = http.createServer(function(req, res){
res.writeHead(200,{
"Content-Type": "audio/mpeg",
''Transfer-Encoding'': ''chunked''
});
// Add the response to the clients array to receive streaming
clients.push(res);
console.log(''Client connected; streaming'');
});
server.listen("8000", "127.0.0.1");
console.log(''Server running at http://127.0.0.1:8000'');
Mi código de cliente es simplemente:
<audio controls src="http://localhost:8000/"></audio>
Esto funciona bien en Safari 5 en la Mac, pero parece que no hace nada en Chrome o Firefox. ¿Algunas ideas?
Posibles candidatos, incluidos los problemas de codificación, o simplemente las características de HTML5 parcialmente implementadas ...