11
votes

Streaming vidéo en utilisant c ++

Je vais créer une application en C ++ qui crée un flux de photos, puis les envoie sous forme de flux vidéo dans une autre application. Des idées sur comment puis-je commencer? Ce que je veux dire, c'est que les bibliothèques devrais-je utiliser et quel codage? Je pense à MJPEG, et UDP ou RTP en tant que protocole ... Toute aide serait grandement appréciée.


0 commentaires

3 Réponses :


7
votes

Si vos données d'entrée ne sont qu'une bande d'images aléatoires, pas de vidéo, vous n'allez pas faire "Streaming vidéo". Vous allez juste envoyer un tas d'images complètes. Pas besoin d'impliquer la technologie de codage vidéo, faites simplement la transmission la plus simple possible des images. Les codeurs vidéo s'appuient sur chaque image ayant diverses relations avec la précédente, comme cela est courant dans la vidéo réelle. Pour les intrants d'images aléatoires, ils ne seront pas en mesure de comprimer que beaucoup et que la compression monocrache (par exemple JPEG / PNG / PNG / autre) va probablement être appliquée à vos données d'entrée.

probablement plus facile à envoyer le contenu de chaque fichier, ainsi que le nom de fichier d'origine et que le client de réception recrée le fichier sur disque et utilisez les bibliothèques existantes orientées sur disque pour ouvrir et décoder l'image.

Vous devez probablement simplement utiliser TCP pour cela, rien dans vos besoins indiquant que vous devez utiliser les solutions plus compliquées et à base d'erreurs UDP / RTP.


2 commentaires

L'exception est "Motion JPEG" (MJPEG) qui n'est vraiment qu'une séquence de cadres comprimés JPEG avec une petite en-tête sur chacun. Ma caméra numérique Canon a capturé des vidéos dans ce format.


La différence entre le groupe d'images et de flux vidéo (à l'exception du type de compression) est que dans la diffusion vidéo, vous avez la synchronisation du temps.



0
votes

Utilisez la bibliothèque FFMPEG pour encoder votre flux et utiliser la pile RTP / RTSP pour les diffuser.


0 commentaires

6
votes

Pour la partie en streaming, vous pouvez utiliser Live555 . Il devrait couvrir tout ce dont vous avez besoin. Cela laisse toujours le problème de la génération d'un courant MJPEG. Je ne peux que deviner ici, FFMPEG pourrait être ce que vous recherchez (comme je le vois aussi couvre la diffusion en continu, alors vous pourrait seulement en avoir besoin de celui-ci). Je pense que MJPEG est très adapté à votre application. En ce qui concerne le TCP ou le UDP, cela dépend de la façon dont vous voulez l'utiliser. UDP a du sens. Si vous souhaitez effectuer votre multidiffusion de flux, sinon je préférerais TCP, car il est plus fiable.

J'espère que ce sont des indices utiles.


0 commentaires