Lire h264 flux à partir d'une caméra IP
Actuellement, je suis en train d'utiliser opencv pour lire une vidéo à partir de mon Canon VB-H710F caméra.
Pour ce but, j'ai essayé les deux solutions différentes:
SOLUTION 1: Lire le flux rtsp adresse
VideoCapture cam ("rtsp://root:[email protected]/stream/profile1=u");
while(true)
cam >> frame;
Dans ce cas, je suis en utilisant opencv pour lire directement à partir d'un flux encodé en H264 (profile1), mais cela donne le même problème signalé ici http://answers.opencv.org/question/34012/ip-camera-h264-error-while-decoding/
Comme suggéré dans la question précédente, j'ai essayé de désactiver le support FFMPEG en installation opencv, qui a résolu le h264 des erreurs de décodage, mais soulèvent un autre problème.
Lors de l'accès au ruisseau avec opencv, pris en charge par gstreame, il y a toujours un grand retard associé.
Avec cette solution je atteindre 15 FPS mais j'ai un retard de 5 secondes, ce qui n'est pas acceptable, compte tenu que j'ai besoin d'une application en temps réel.
SOLUTION 2: Lire des images à partir d'une adresse http
while(true)
{
startTime=Système.currentTimeMillis();
URL url = new URL("h t t p://[IP]/-wvhttp-01-/image.cgi");
URLConnection con = url.openConnection();
BufferedImage image = ImageIO.read(con.getInputStream());
showImage(image);
estimatedTime=System.currentTimeMillis()-startTime;
System.out.println(estimatedTime);
Thread.sleep(5);
}
Cette stratégie simplement extrait l'image à partir de l'url de la caméra fournit. Le code est en Java, mais le résultat est le même en C++ avec la bibliothèque curl.
Cette solution évite les retards de la première solution mais il prend un peu plus de 100 ms pour saisir chaque image, ce qui signifie que je ne peux l'atteindre en moyenne les 10 FPS.
Je voudrais savoir comment je peux lire la vidéo à l'aide de c++ ou d'une autre bibliothèque développée en c++ ?
OriginalL'auteur João Neves | 2014-10-04
Vous devez vous connecter pour publier un commentaire.
J'ai lutté avec des problèmes similaires et je pense avoir résolu certains de vos problèmes à l'aide de libVLC avec OpenCV. FFMPEG semblait avoir des problèmes de pas de décodage H264 correctement, de plus, les versions plus récentes (2.4.11) semblait avoir le TCP correctif déjà là pour FFMPEG. De toute façon, j'utilise MS Visual Studio sur Windows 7 et 8.1.
De détails sont donnés ici: http://answers.opencv.org/question/65932
OriginalL'auteur JoeC
Personnellement, je vous suggère d'utiliser ffmpeg pour lire les flux rtsp de caméras IP, et ensuite utiliser openCV pour lire à partir d'décodé tampon de ffmpeg. ffmpeg a de très bonnes optimisations vers H. 264 décodage, la performance ne devrait pas être un problème critique.
Vous pouvez utiliser ffmpeg binaire pour vérifier si cela fonctionne correctement:
Si le test.mp4 peut être joué avec succès, alors il est certainement OK pour vous d'intégrer ffmpeg libs dans votre projet.
Bonne chance!
Oui, je comprends, vous avez besoin d'extraire les images et de faire le traitement sur chaque image. Le ffmpeg est un exemple de tester si le signal d'entrée est correct pour le traitement ainsi que peuvent être correctement traitées à l'aide de ffmpeg. Comme vous l'avez vérifié, vous pouvez maintenant, vous pouvez commencer à compiler ffmpeg bibliothèques, et l'utilisation de ffmpeg lib pour décoder les images manuellement à l'aide de codes, et les trames de données seront disponibles pour vous dans le décodage de pipeline. Divers ffmpeg développement manuel sont disponibles sur l'internet.
J'ai déjà essayé, mais le problème reste entier puisque je ne peux qu'accéder à des images de 2 secondes dans le passé (je pense que c'est lié à la taille de la mémoire tampon de ffmpeg). Connaissez-vous d'une certaine façon à diminuer la taille de ce tampon, tout en maintenant en temps réel de décodage? J'ai déjà cherché sur le web mais je n'étais pas en mesure de trouver une solution. Merci encore
OriginalL'auteur JasonYang
Vous pouvez traiter chaque image à l'aide de ffmpeg. vous devez créer votre propre filtre selon votre condition. https://trac.ffmpeg.org/wiki/FilteringGuide
OriginalL'auteur Ajay nandoriya