IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web & réseau Delphi Discussion :

[Indy] Client-serveur pour recevoir des flux videos


Sujet :

Web & réseau Delphi

  1. #1
    Membre actif Avatar de Nicodemus
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 242
    Points : 212
    Points
    212
    Par défaut [Indy] Client-serveur pour recevoir des flux videos
    Bonjour,

    Dans le cadre d'un projet universitaire, nous devons réaliser un logiciel de télédetection. Pour l'instant, l'affichage, la gestion, l'enregistrement de webcam fonctionne.
    Se pose maintenant le problème des webcams distantes. L'idée serait de réaliser un modèle client-serveur TCP en se servant des composants Indy. Jusque là, pas de problèmes pour envoyer des données du client au serveur..etc...

    Mais, comment faire pour envoyer le flux vidéos ?

    Merci pour vos réponses.

  2. #2
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Pour faire simple, tu peux, dans un thread, faire une boucle qui :
    1. Récupère la frame courante de la vidéo
    2. L'envoie par WriteStream
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Membre actif Avatar de Nicodemus
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 242
    Points : 212
    Points
    212
    Par défaut
    Merci pour cette réponse. Qui est une bonne réponse

    J'ai réalisé un simple client-serveur avec Indy et j'arrive à envoyer une capture sur le net à mon serveur qui l'affiche.
    Pour l'instant, j'enregistre une capture sous bmp et l'envoi, donc ça met du temps lol. Je pense mettre en place une petite compression jpeg pour pouvoir atteindre au moins un rafraichissement de l'image toute les secondes.

    Maintenant, reste à gérer plusieurs connections et voir comment le serveur pourrait gérer tout ça en même temps. Obligé d'utiliser les threads, mais j'ai quand même peur que ça soit beaucoup trop couteux en ressources.
    Par exemple : le serveur reçoit une capture jpeg de 20ko par seconde et par client connecté.... ça va vite saturé.

    Si quelqu'un a une idée à me proposer.
    Bon je vais mettre en place la compression jpeg pour voir ce que ça donne et vous remercie pour vos futures réponses

  4. #4
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    Voici quelques pistes pour aider à la conception de ton architecture logicielle.

    Serveur vidéo (sur le poste où est branché la webcam, qui doit servir les images à plusieurs ordinateurs distants)
    Un TIdTcpServer (ou mieux un TIdHttpServer) de négociation : gérer les connexions extérieures pour créer un flux sortant, et cesser d'émettre.
    Un couple TIdThreadComponent (ou un thread à toi) + TIdTcpClient pour faire le flux sortant (prendre la dernière image dispo et l'envoyer)
    Une structure s'occuppant de la capture (que tu as déjà faite), mettant à disposition la derniere image, et prévenant tous les threads de la disponiblilité de cette derniere (évènement déclenchant l'envoi par les threads). Pour cela regarde du côté de l'unité SyncObjs et particulièrement TEvent. Tu trouveras un tutorial parfait à ce sujet sur DVP .

    Client video (sur un poste distant voulant voir la webcam)
    Un TIdTcpClient (ou mieux un TIdHttp) pour négocier : se connecter au serveur vidéo et obtenir un flux, et quitter.
    Un TIdTcpServer pour recevoir le flux vidéo

    Voili c'est un domaine qui m'amuse assez. J'espere que cela t'aidera. À toi de développer.

    Amuse-toi bien !
    « La simplicité est la sophistication suprême » (Léonard de Vinci)

  5. #5
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    Ah oui aussi, je confirme donc ton très bon choix d'utiliser Indy, mais si ce n'est pas déjà fait, tu peux télécharger la derniere version : Indy 10 (http://www.indyproject.org/Sockets/D...les/Indy10.iwp).

    Cela t'évitera de changer ton code lorsque tu voudras upgrader plus tard ; car la façon de procéder avec Indy 10 est sensiblement différente de la version précédente, mais c'est une fois de plus un suberbre travail qui a été fait, cette version étant encore plus propre (utilisation généralisée de IOHandlers, ...).
    « La simplicité est la sophistication suprême » (Léonard de Vinci)

  6. #6
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    Il y a encore plus simple, c'est defaire du streaming vidéos à partiur de ta webcam, en utilisant par exemple le TAsfWriter de la suite DSPack, je l'aidéjà implementé et il est très bien, juste un petit décalage de 2s (la compression) mais l'image finale est tres fluide.
    ----------------------------------------------------
    Avant de poster, pensez à utiliser les différents outils à votre disposition:
    Google, la FAQ et le moteur de recherche.

  7. #7
    Membre actif Avatar de Nicodemus
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 242
    Points : 212
    Points
    212
    Par défaut
    Merci beaucoup pour vos réponses.

    Je vais détailler un peu plus l'architecture souhaitée.
    En fait : le serveur est le programme principal qu'on a à développer : il permet la vidéo surveillance et la télédetection de plusieurs webcams distantes (ou pas). Tandis que le client sera une simple routine qui tournera sur les pc où sont branchés les webcam.

    Donc pour l'instant, j'ai crée un simple serveur qui reçoit une connection et affiche l'image reçue. Le client quant à lui, dispose d'un timer (réglé sur 1sec pour l'instant) qui déclenche une capture de la webcam en Bmp, la compresse en jpg et l'envoi au serveur.
    Ce n'est donc pas vraiment un flux vidéo que j'envoie mais une image toutes les secondes. Mais... je dois arriver à envoyer un flux vidéo d'apres le sujet.

    Evidemment pour que le serveur puisse afficher plusieurs cams ( le prof dit que 5 pour la démonstration ça sera déjà bien), je dois utiliser les threads. Le message de DMO m'eclaire déjà bien plus à ce sujet (merci ).

    Apres pour le flux vidéo, je cale. Je devrais peut être voir du côté du DSPack (à l'installation j'ai eu un problème l'autre fois avec DX).

    Voilà où j'en suis. Merci encore pour votre aide.

  8. #8
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    Je n'ai jamais fait de streaming video. Je n'ai jamais eu l'occasion d'utiliser DSPack.

    La solution proposée par lil_jam63 semble être la meilleure du point de vue efficacité, puisque le but n'est pas de réinventer la roue (le streaming). Ce serait celle à suivre absoluement dans un contexte industriel.

    Ceci dit puisque ça semble être un travail dans le contexte de l'école, et que je ne connais pas ni ne souhaite d'ailleurs connaitre le sujet exact du travail à faire, je te suggère de commencer à réfléchir/développer une solution la moins hors sujet possible, pour revenir nous poser ultérieurement une ou des question(s) bien précise(s) sur les points qui te bloquent (car là je ne comprends pas bien si tu nous tient juste au courant dans ton dernier message de ton avancement ou si tu nous poses une autre question).

    Bonne continuation en tous cas !
    « La simplicité est la sophistication suprême » (Léonard de Vinci)

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/10/2013, 17h05
  2. Cryptage SSL pour recevoir des mail
    Par maximedrouet dans le forum Web & réseau
    Réponses: 8
    Dernier message: 10/04/2009, 14h28
  3. Quel logiciel pour faire des montages video ?
    Par Louis Griffont dans le forum Vidéo
    Réponses: 9
    Dernier message: 13/04/2007, 18h42
  4. Réponses: 3
    Dernier message: 09/02/2007, 16h01
  5. Indy client & serveur erreurs
    Par uriotcea dans le forum C++Builder
    Réponses: 4
    Dernier message: 13/08/2006, 02h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo