Frage

1- welche besser ist für Video-Streaming zu benutzen? TCP oder UDP-Sockets und warum?

2- Während Live-Streaming, Audio und Video vom Server getrennt kommen, so wie kann ich sicherstellen, dass der Video-i-Display und das Audio-I Spiel auf dem Gerät synchronisiert ist?

War es hilfreich?

Lösung

ich eine Voice-Chat-Anwendung ein schrieb vor einiger Zeit und TCP war indiskutabel, UDP Multicast ist wirklich der einzige Weg zu gehen, wenn Sie suchen in der Nähe von Echtzeit-Datenfluss. Es gibt zwei Hauptprobleme mit Streaming-Material über UDP aber:

  1. Die verworfenen Pakete . Im Fall von Audio, ist es eine ziemlich einfache Lösung. Normalerweise sind die verworfenen Pakete werden nicht einen hörbaren Unterschied machen (die Pakete dekomprimiert einzeln). Wenn jedoch mit Video zu tun, vor allem, wenn das Video komprimiert wird (es ist in der Regel), ein richtiges Übertragungsprotokoll herauszufinden, die sicherstellt, Netzwerk Robustheit eine schwierige Aufgabe ist, gelinde gesagt, vor allem wenn man dies von Grunde tun. Video-Frames werden in verschiedene Pakete aufgeteilt. Herauszufinden, was zu tun ist, wenn diese Pakete fehlen, ist hart.
  2. Die Synchronisation zwischen Audio und Video . Dies ist ein sehr schwieriges Problem, und ich schlage vor, auf Protokolle wie RTSP (Real-Time Streaming Protocol) zu lesen auf. Dies ist keine leichte Aufgabe, aber hier sind einige einführenden Informationen: http: //www.cs. columbia.edu/~hgs/rtsp/ -. manchmal ist es durch das senden getrennte Sync-Pakete (einige Protokolle senden diese über TCP) durchgeführt, die die Spielern sagen, wie der Ton mit dem Video zusammenpassen sollte

Andere Tipps

Ich würde UDP tun. Aber es hängt davon ab, was Sie wollen. UDP wird Pakete verwerfen anstatt wait (TCP). Der Trade-off ist, ob Sie ein stabiles wollen, aber manchmal langsam und teuer, oder eine, die wirksam ist, aber manchmal nicht geliefert bekommen kann. Die Wahl liegt bei Ihnen, wenn es darum geht, wie Sie wollen, es implementieren und wie Sie es verwenden.

Heute sogar Bäche youtube über HTTP ... hier ist eine NodeJS App, die eine Datei in dem Browser-Client-Streams ... Verwendung als Ausgangspunkt, um Live-Stream-Video mit Audio schön synchron

// 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 + "/");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top