Question

1- Lequel est préférable d'utiliser pour le streaming vidéo? socket TCP ou UDP et pourquoi?

2 lors de la diffusion en direct, audio et vidéo sont en provenance du serveur séparément, alors comment puis-je faire en sorte que l'affichage i vidéo et le jeu I audio sur l'appareil sont synchronisés?

Était-ce utile?

La solution

J'ai écrit une application chat vocal tout à l'heure et TCP était hors de question, UDP est vraiment multicasting la seule façon d'aller si vous cherchez des données quasi temps réel de flux. Il y a deux principaux problèmes avec le streaming des choses sur UDP si:

  1. Les paquets perdus . Dans le cas de l'audio, il est une solution assez facile. Habituellement, les paquets perdus ne seront pas entraîner une différence audible (les paquets sont décompressées individuellement). Toutefois, lorsque le traitement de la vidéo, en particulier si la vidéo est compressé (il est généralement), déterminer un protocole de transfert approprié qui assure la robustesse du réseau est une tâche ardue pour le moins, surtout si vous faites cela à partir de zéro. cadres vidéo sont divisés en plusieurs paquets. Comprendre ce qu'il faut faire lorsque ces paquets sont manquants est difficile.
  2. La synchronisation entre l'audio et la vidéo . Ceci est un problème très difficile et je vous suggère de lire sur des protocoles tels que RTSP (Real-Time Streaming Protocol). Ce n'est pas une tâche facile, mais voici quelques informations d'introduction: http: //www.cs. columbia.edu/~hgs/rtsp/ -. parfois, il est fait en envoyant des paquets de synchronisation séparés (certains protocoles envoient ceux-ci sur TCP) qui indiquent au joueur comment le son doit correspondre avec la vidéo

Autres conseils

Je ne UDP. Cependant, il dépend de ce que vous voulez. UDP baissera paquets plutôt que d'attendre (TCP). Le compromis est de savoir si vous voulez un stable, mais parfois lent et coûteux, ou qui est efficace, mais parfois ne peut pas se livrer. Le choix est le vôtre en ce qui concerne la façon dont vous voulez la mettre en œuvre et comment vous l'utilisez.

Aujourd'hui, même youtube flux sur HTTP ... voici une application nodejs qui ruisselle un fichier au client du navigateur ... utiliser comme point de départ de flux vidéo en temps réel avec bien en synchronisation audio

// 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 + "/");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top