J'essaie de mettre en place un serveur web qui prendra en charge le streaming vidéo vers une balise vidéo HTML5 en utilisant node.js. Voici mon code jusqu'à présent :
var range = request.headers.range;
var total = file.length;
var parts = range.replace(/bytes=/, "").split("-");
var partialstart = parts[0];
var partialend = parts[1];
var start = parseInt(partialstart, 10);
var end = partialend ? parseInt(partialend, 10) : total-1;
var chunksize = (end-start)+1;
response.writeHead(206, { "Content-Range": "bytes " + start + "-" + end + "/" + total, "Accept-Ranges": "bytes", "Content-Length": chunksize, "Content-Type": type });
response.end(file);
Où "request" représente la requête http, le type est soit "application/ogg" soit "video/ogg" (j'ai essayé les deux) et "file" est le fichier .ogv qui a été lu depuis le système de fichiers. Voici les en-têtes de réponse :
Content-Range bytes 0-14270463/14270464
Accept-Ranges bytes
Content-Length 14270464
Connection keep-alive
Content-Type video/ogg
J'ai examiné les en-têtes de réponse et ce code semble fonctionner correctement, mais il y a quelques problèmes :
- La vidéo semble se charger très lentement pour être sur un réseau local. D'après ce que je peux dire en examinant la réponse avec firebug, le fichier semble être diffusé à environ 150 kb/sec.
- La vidéo ne passe pas du tout. Même si j'attends le chargement complet de la vidéo, la balise vidéo HTML 5 affiche un grand "x" au lieu d'une vidéo dans Firefox.
Quelqu'un a-t-il une idée de ce que je peux faire pour que le streaming vidéo fonctionne via node.js ?
Merci !
Chris