2012-07-03 1 views
3

Je travaille sur un projet dans lequel nous utilisons un modem radio pour transmettre des données (vidéo et télémétrie) d'un véhicule aérien sans pilote à une station au sol. Ce que nous devons faire, c'est afficher la vidéo en temps réel et être capable de savoir quelle image correspond à chaque morceau de données de télémétrie en C#.Comment afficher une vidéo avec opencv à partir de bytes?

Les données sont décapsulées en octets de télémétrie et de vidéo (mpeg4). Comme j'ai de l'expérience avec OpenCV, j'aimerais l'utiliser pour décoder, afficher et saisir des clics depuis la vidéo. Pour ce faire, j'utilise le wrapper OpenCV pour C# appelé Emgu.

Le problème est que OpenCV charge la vidéo à partir d'un périphérique ou d'un fichier et que je n'ai qu'un rappel avec quelques octets. J'ai essayé d'écrire ces octets dans un fichier et d'ouvrir ce fichier avec OpenCV, mais une fois qu'il est arrivé à la fin, je dois le rouvrir et continuer là où il s'est arrêté, ce qui génère du lag.

Quelqu'un a eu une idée de comment faire cela?

+1

La lecture d'un fichier est la même que la lecture d'une socket, vous devriez être en mesure d'attacher le flux au lecteur et il sera pratiquement capable de lire à la volée. Est-ce que je ne comprends pas quelque chose? –

+0

Je reçois les octets d'un rappel qui est appelé chaque fois que de nouveaux blocs de données arrivent. Pourrais-je simplement les mettre sur une socket et le traiter comme un fichier régulier? – dittrich

+0

Parce que vous lisez/écrivez à partir d'un flux, vous pouvez facilement traiter votre flux socket comme s'il s'agissait d'un fichier. N'oubliez pas que lorsque vous écrivez/lisez des fichiers, vous devez utiliser des flux. À l'époque où ils ont créé les protocoles réseau, ils étaient intelligents et le rendaient facile et familier. Comme je l'ai dit, prenez le flux réseau et vous pouvez écrire/lire tous les octets de celui-ci comme s'il s'agissait d'un fichier. Lisez quelques trucs sur la programmation réseau, car contrairement à un fichier, il n'y a pas de «fin de flux» jusqu'à ce que vous vous déconnectiez. Si vous voulez traiter des données à la volée, un thread récupère des données et un autre l'analyse pour que les choses soient en temps réel. –

Répondre

Questions connexes