Pregunta

1- ¿Cuál es mejor utilizar para la transmisión de vídeo? socket TCP o UDP y por qué?

2- Durante la transmisión en vivo, audio y vídeo están llegando desde el servidor por separado, así que ¿cómo puedo estar seguro de que la pantalla i vídeo y la reproducción de audio en el dispositivo que están en sincronía?

¿Fue útil?

Solución

Me escribió una aplicación de chat de voz hace un tiempo y TCP estaba fuera de la cuestión, la multidifusión UDP es realmente la única manera de ir si usted está buscando casi en tiempo real el flujo de datos. Hay dos problemas principales con la transmisión de la materia a través de UDP sin embargo:

  1. los paquetes cayó. En el caso del audio, es una solución bastante fácil. Por lo general, los paquetes descartados no hará una diferencia audible (los paquetes se descomprimen de forma individual). Sin embargo, cuando se trata de vídeo, especialmente si el vídeo se comprime (por lo general es), calcular un protocolo de transferencia adecuado que asegura la robustez de la red es una tarea de enormes proporciones para decir lo menos, sobre todo si está haciendo esto desde el principio. fotogramas de vídeo se dividen en varios paquetes. Averiguar qué hacer cuando estos paquetes faltan es difícil.
  2. La sincronización entre audio y vídeo . Este es un problema muy difícil y sugiero leer sobre protocolos como RTSP (Real-Time Streaming Protocol). Esta no es una tarea fácil, pero aquí hay algo de información introductoria: http: //www.cs. columbia.edu/~hgs/rtsp/ -. a veces se hace mediante el envío de paquetes de sincronización independiente (algunos protocolos de enviar estos a través de TCP) que le dicen al jugador cómo el sonido debe coincidir con el vídeo

Otros consejos

Me haría UDP. Sin embargo, depende de lo que desea. UDP caerá paquetes en lugar de esperar (TCP). El comercio fuera es si usted quiere un establo, pero a veces lento y costoso, o uno que sea eficiente, pero a veces puede no llegan a su destino. La elección es suya cuando se trata de la forma en que desea implementar y cómo lo está utilizando.

Hoy en día, incluso YouTube transmite a través de HTTP ... aquí es una aplicación nodejs que fluye un archivo en el cliente de navegador ... uso como punto de partida para transmitir vídeo en directo con audio bien sincronizados

// usage 
// do following on server side (your laptop running nodejs)
// node this_file.js
//
// then once above is running point your browser at
//    http://localhost:8888
//
// of course your browser could be on your mobile or own custom app



var http = require('http'),
    fs = require('fs'),
    util = require('util');

var path = "/path/to/audio/or/video/file/local/to/server/cool.mp4"; // put any audio or video file here

var port = 8888;
var host = "localhost";

http.createServer(function (req, res) {

  var stat = fs.statSync(path);
  var total = stat.size;

  if (req.headers.range) {   // meaning client (browser) has moved the forward/back slider
                                         // which has sent this request back to this server logic ... cool
    var range = req.headers.range;
    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;
    console.log('RANGE: ' + start + ' - ' + end + ' = ' + chunksize);

    var file = fs.createReadStream(path, {start: start, end: end});
    res.writeHead(206, { 'Content-Range': 'bytes ' + start + '-' + end + '/' + total, 'Accept-Ranges': 'bytes', 'Content-Length': chunksize, 'Content-Type': 'video/mp4' });
    file.pipe(res);

  } else {

    console.log('ALL: ' + total);
    res.writeHead(200, { 'Content-Length': total, 'Content-Type': 'video/mp4' });
    fs.createReadStream(path).pipe(res);
  }
}).listen(port, host);

console.log("Server running at http://" + host + ":" + port + "/");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top