57 votes

Diffusion audio d'un serveur Node.js au format HTML5 <audio> étiquette

J'ai fait des expériences avec les flux binaires dans Node.js et bien à mon grand étonnement ne fait un travail de démonstration de prendre un stream Shoutcast l'aide d'un noeud-radio-stream et de le pousser dans un élément HTML5 à l'aide de fragments de codage. Mais il ne fonctionne que dans Safari!

Voici mon code serveur:

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'); 

Mon code client est tout simplement:

<audio controls src="http://localhost:8000/"></audio>

Cela fonctionne bien dans Safari 5 sur le Mac, mais ne semble pas faire quoi que ce soit Chrome ou Firefox. Des idées?

Des candidats éventuels, y compris problèmes de codage, ou seulement partiellement mises en œuvre de fonctionnalités de HTML5...

21voto

TooTallNate Points 946

Voici une (un peu dépassé) résumé de l'état actuel de HTML5 Audio et flux Icecast.

Comme vous pouvez le voir, un MP3 la source ne semble fonctionner dans Safari (et, éventuellement, IE9). Vous pourriez avoir besoin d'expérimenter avec des côté serveur de transcodage (avec ffmpeg ou mencoder) au format OGG Vorbis. Je suis sûr que j'ai été en mesure d'obtenir de Chrome à se comporter correctement lorsque j'ai été l'envoi Vorbis données.

Firefox était encore un gosse si, peut-être qu'il n'aime pas les fragments de codage (tous les serveurs SHOUTcast répondre avec un HTTP/1.0 version de réponse, ce qui n'avait pas été définis Transfer-Encoding: chunked encore). Essayez de lui envoyer un Transfer-Encoding: identity - tête de réponse avec le OGG flux de désactiver chunked, et Firefox. Je n'ai pas testé cette.

Laissez-moi savoir comment ça se passe! Cheers!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X