Estoy intentando configurar un servidor web que admita la transmisión de video a una etiqueta de video HTML5 usando node.js. Aquí está mi código hasta ahora:Transmisión de video con HTML 5 a través de node.js
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);
Donde "petición" representa la petición HTTP, el tipo es "application/ogg" o "video/ogg" (He intentado ambos) y "archivo" es el. archivo ogv que se ha leído desde el sistema de archivos. Aquí están las cabeceras de respuesta:
Content-Range bytes 0-14270463/14270464
Accept-Ranges bytes
Content-Length 14270464
Connection keep-alive
Content-Type video/ogg
He examinado las cabeceras de respuesta y este código parece estar funcionando bien, pero hay un par de problemas:
- El vídeo se ve a cargar muy lentamente por estar en una red local. Por lo que puedo decir al examinar la respuesta usando Firebug, el archivo parece ser transmitido a aproximadamente 150 kb/seg.
- El video no se reproduce en absoluto. Incluso si espero a que se cargue todo, la etiqueta de video HTML 5 solo muestra una gran "x" en lugar de una película en Firefox.
¿Alguien tiene alguna idea de lo que puedo hacer para que la transmisión de video funcione a través de node.js?
Gracias!
Chris
Creo que el chunksize era correcta. De acuerdo con https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html: 'El valor de la primera posición de byte en una especificación de rango de bytes proporciona el desplazamiento de bytes del primer byte en un rango. El valor de último byte pos da el byte-offset del último byte en el rango; es decir, las posiciones de bytes especificadas son inclusivas. Las compensaciones de bytes comienzan en cero. – sthomps