2016-02-23 7 views
0

J'ai passé beaucoup de temps à essayer de trouver la réponse, mais j'ai échoué. J'ai une caméra IP avec un accès RTSP (h.264). Si j'ouvre le flux à partir d'OpenCV, il essaye de décoder (si je comprends bien) via ffmpeg et les cadres de curryts.Caméra IP (h.264, rstp) + GStreamer + OpenCV (Ubuntu, Jetson TK1 Bureau)

[h264 @ 0x1821f20] error while decoding MB 3 35, bytestream -14 

Comme je l'ai compris, je devrais utiliser GStreamer pour l'accélération matérielle (GPU NVIDIA avec), mais je ne peux pas trouver une véritable solution. Ce que je devrais faire?

  1. run Gstreamer de la console et d'obtenir des trames de mémoire tampon (RAM?) Via l'application OpenCV?
  2. faire quelque chose dans l'application OpenCV?
  3. Recompiler OpenCV avec gstreamer et sans ffmpeg?
+0

Quelle est votre version OpenCV? – sturkmen

+0

voir http://stackoverflow.com/a/35591041/5294258 peut-être utile – sturkmen

+0

J'utilise OpenCV pour Tegra (2.4.10) du repo – chrns

Répondre

0

Reportez-vous à l'exemple de lecture des exemples gstreamer1.0 dans http://developer.download.nvidia.com/embedded/L4T/r21_Release_v3.0/L4T_Jetson_TK1_Multimedia_User_Guide_V2.1.pdf.

gst-launch-1.0 filesrc location=<filename.mp4> ! qtdemux name=demux ! h264parse ! omxh264dec ! nveglglessink –e

au lieu d'une source de fichier que vous voulez probablement utiliser l'élément rtspsrc. Si vous êtes quelque chose comme la chance cela peut fonctionner:

gst-launch-1.0 rtspsrc location=<rtsp://url> ! decodebin ! omxh264dec ! nveglglessink –e

Il se peut que vous devez insérer manuellement ou élément rtph264depay d'autres cependant.

Si vous êtes super chanceux il peut juste travailler avec quelque chose comme ceci:

gst-launch-1.0 playbin uri=<rtsp://url> –e

+0

Bon, je vais le tester demain, mais j'ai encore des questions: a) dois-je exécuter cette commande à partir du terminal? Comment obtenir une image à partir du tampon gstreamer? b) Puis-je utiliser CUDA après (je veux dire, en utilisant 192 cœurs graphiques pour le calcul) l'utilisation du décodeur? – chrns

+0

Ceci est une commande de terminal, oui. Pour accéder au tampon, vous devrez écrire une application GStreamer. Regardez dans la documentation 'appsink' sur la façon de le faire. Pourquoi ne seriez-vous pas en mesure de faire un peu plus de calcul sur les cœurs de CUDA à ce stade? –