Domanda

1- Qual è la migliore da utilizzare per lo streaming video? socket e TCP o UDP perché?

2- Durante lo streaming dal vivo, audio e video sono proveniente dal server separatamente, in modo come posso fare in modo che il display video ie la riproduzione audio che sul dispositivo sono sincronizzati?

È stato utile?

Soluzione

ho scritto una chat vocale applicazione qualche tempo fa e TCP era fuori questione, UDP multicasting è davvero l'unico modo per andare se siete alla ricerca di quasi in tempo reale il flusso dei dati. Ci sono due problemi principali con lo streaming di roba su UDP però:

  1. La pacchetti scartati . Nel caso di audio, è una correzione abbastanza facile. Di solito i pacchetti scartati non farà una differenza acustico (i pacchetti vengono decompressi singolarmente). Tuttavia, quando si tratta di video, soprattutto se il video è compresso (di solito è), per capire un adeguato protocollo di trasferimento che la robustezza della rete assicura è un compito arduo per non dire altro, soprattutto se si sta facendo questo da zero. fotogrammi video sono suddivisi in vari pacchetti. Capire cosa fare quando questi pacchetti sono mancanti è dura.
  2. La sincronizzazione tra audio e video . Questo è un problema molto difficile e vi suggerisco di leggere su protocolli come RTSP (Real-Time Streaming Protocol). Questo non è un compito facile, ma ecco alcune informazioni introduttive: http: //www.cs. columbia.edu/~hgs/rtsp/ -. a volte è fatto inviando pacchetti di sincronizzazione separati (alcuni protocolli di inviarli su TCP), che raccontano il giocatore come il suono deve corrispondere con il video

Altri suggerimenti

I farebbe UDP. Comunque dipende da ciò che si desidera. UDP scenderà pacchetti piuttosto che aspettare (TCP). Il fuori commercio è se si desidera una stalla, ma a volte lento e costoso, o uno che è efficiente, ma a volte non può ottenere consegnato. La scelta è vostra, quando si tratta di come si desidera implementare e come lo si utilizza.

Oggi, anche YouTube trasmette in streaming su HTTP ... ecco un app nodejs che emana un file al client browser ... l'uso come un punto di partenza per video streaming in diretta con audio ben sincronizzati

// 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 + "/");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top