La capture d'h.264 flux de la caméra avec Gstreamer
Je suis en train de capturer des flux H264 à partir de installé localement Logitech C920 caméra de /dev/video0
avec Gstreamer 1.0
v4l2src
élément.
v4l2-ctl --list-formats
montre que la caméra est capable de donner de la vidéo H264 format:
# v4l2-ctl --list-formats
ioctl: VIDIOC_ENUM_FMT
...
Index : 1
Type : Video Capture
Pixel Format: 'H264' (compressed)
Name : H.264
...
Mais pipeline
# gst-launch-1.0 -vvv v4l2src device=/dev/video0 ! video/x-h264, width=800, height=448, framerate=30/1 ! fakesink
garde de me donner not-negotiated (-4)
erreur:
/GstPipeline:pipeline0/GstV4l2Src:v4l2src0.GstPad:src: caps = video/x-h264, width=(int)800, height=(int)448, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = video/x-h264, width=(int)800, height=(int)448, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstFakeSink:fakesink0.GstPad:sink: caps = video/x-h264, width=(int)800, height=(int)448, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = video/x-h264, width=(int)800, height=(int)448, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2809): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
streaming task paused, reason not-negotiated (-4)
Execution ended after 67687169 ns.
Toute aide!
OriginalL'auteur s.webbandit | 2013-04-03
Vous devez vous connecter pour publier un commentaire.
Gstreamer est obligatoire pour vos besoins? J'ai aussi beaucoup de problèmes avec le Logitech C920 en H264 mode et gstreamer. Mais j'ai réussi à utiliser VLC comme un serveur RTSP l'utilisation de la C920 avec H264:
Alors je peux me connecter avec un autre VLC à l'URI rtsp://localhost:8554/live
Si GStreamer est obligatoire pour vous, j'ai seulement réussi à l'utiliser avec un utilitaire de capture que vous pouvez trouver ici: https://github.com/csete/bonecam - répertoire de "capture"
Vous devrez le compiler, mais si vous avez quelques compétences en programmation, il devrait être très facile car il y a un seul C fichier et script à l'aide. Il suffit de passer au "hôte" en tant que paramètre au script :
Vous pouvez utiliser le bouton "capture" de l'utilitaire avec quelque chose comme ça :
Si vous n'aimez pas à spécifier le numéro du châssis pour obtenir (paramètre"-c" avec "capture"), il y a une bifurcation à cet utilitaire que vous pouvez trouver ici: https://github.com/DeLaGuardo/bonecam
Je sais qu'il existe un plugin classés comme "mauvais", appelé uvch264 pour gstreamer 0.10, qui devrait fonctionner avec la C920. Mais je ne sais pas pour gstreamer 1.0, et je ne pouvais pas le tester.
UPD:
N'oubliez pas d'ajouter
--rtsp-timeout=-1
àcvlc
ligne de commande commeSans cette option, le streaming ne dure que 60 secondes par défaut.
cvlc
fonctionne comme un charme! Je l'utilise sur Rasperry Pi.Avec la C920 être en H264 mode? Êtes-vous sûr? J'ai eu beaucoup de problèmes permettant le H264 mode de l'appareil photo avec le Raspberry Pi, en raison de problèmes USB sur le Raspberry Pi. Certains H264 images sont perdues à cause de ce problème, de sorte que la vidéo est bizarre. En fait, à cause de cela, je suis en utilisant la C920 sur un Beaglebone. De toute façon, si cela fonctionne pour vous je suppose qu'il y a une mise à jour du firmware pour résoudre ce problème.
J'ai eu USB de ce type de problème avec la perte de trames avant. J'ai installé la nouvelle Rapbian noyau comme desbribed ici (github.com/raspberrypi/linux/issues/238). Drop frame problème a disparu. Maintenant le streaming vidéo H264 est très lisse.
Merci pour l'information. Je vais refaire mes tests avec cette mise à jour.
OriginalL'auteur Vincent Hiribarren
J'ai essayé de faire la même chose et j'ai eu le même message d'erreur. Je crois que j'ai été en utilisant GStreamer 1.0.6.
Ce que j'ai trouvé, peut-être même grâce à Fergal Butler, en réponse, a la page suivante:
http://kakaroto.homelinux.net/2012/09/uvc-h264-encoding-cameras-support-in-gstreamer/
Ici Youness Alaoui décrit les uvch264_src élément qu'il a faites à apporter H264 soutien d'appareil-photo de GStreamer.
Il décrit le port de GStreamer 1.0 en attente dans son article. Donc, au cours de la dernière semaine, j'ai été à la recherche dans ce. Il s'avère que c' a maintenant été porté à GStreamer 1.0, mais seulement dans un développeur Version (Version 1.1.2).
Vous pouvez obtenir la version 1.1.2 ici:
http://gstreamer.freedesktop.org/src/
Il est appelé "uvch264src" maintenant, et c'est une partie de la gst-plugins-bad. Je pense qu'il est également présent dans la version 1.1.1, mais je n'ai pas vraiment regardé ce.
J'ai eu un peu de mal à le faire, il est installé, je pense surtout en raison de conflits avec le TPS 1.0 paquets installés sur mon PC (donc de ma faute). Mais remarque qu'il a des dépendances sur libgudev-1.0-dev et libusb-1.0-0-dev donc installer ces paquets de première, il m'a fallu un certain temps pour le travail, c'est les deux qui me manquait.
Voici un pipeline j'ai eu à travailler qui utilise uvch264:
gst-launch-1.0 uvch264src device=/dev/video0 name=src auto-start=true src.vfsrc ! video/x-raw, format=YUY2, width=160, height=90, framerate=5/1 ! xvimagesink src.vidsrc ! queue ! video/x-h264, width=800, height=448, framerate=30/1 ! h264parse ! avdec_h264 ! xvimagesink
Si vous ne souhaitez pas utiliser l'aperçu de la vidéo (à partir de la vfsrc pad) crochet de la src.vfsrc tout droit jusqu'à un fakesink. Je devrais aussi mentionner que, même si ce pipeline est de travailler pour moi, je reçois beaucoup de mises en garde sur "Got de flux de données avant de segment de l'événement". Alors, évidemment, je ne vais pas faire quelque chose de bien, mais je ne suis pas sûr de ce que.
De toute façon, après tout, de ce que vous embêter arriver 1.1.2 et uvch264src complètement installé et fonctionne, j'ai décidé de donner v4l2src un rapide aller à nouveau. Et il s'avère que v4l2src supporte le H264 correctement après tout :/. (Voir la réponse courte.)
Réponse Courte:
Donc la réponse courte à votre question est que si vous êtes heureux pour installer 1.1.2 de la source, vous serez en mesure de faire exactement ce que vous voulez dans la même manière que vous avez essayé de le faire. Vous ne devriez pas avoir besoin uvch264src. J'ai testé votre pipeline et il a bien fonctionné avec mon installation. J'ai aussi essayé cette simple pipeline, pour afficher la vidéo sur l'écran, et il a bien fonctionné pour moi aussi:
gst-launch-1.0 -e v4l2src device=/dev/video0 ! video/x-h264, width=800, height=448, framerate=30/1 ! avdec_h264 ! xvimagesink sync=false
OriginalL'auteur Adam Goodwin
Je ne crois pas v4l2src supporte le h264 pour le moment. Voir ici:
http://www.oz9aec.net/index.php/gstreamer/473-using-the-logitech-c920-webcam-with-gstreamer
et ici:
http://kakaroto.homelinux.net/2012/09/uvc-h264-encoding-cameras-support-in-gstreamer/
le h264 est désormais pris en charge par v4l2src
OriginalL'auteur Fergal Butler
Essayez d'utiliser videoconvert automatiquement pour convertir la vidéo dans un format compris par la vidéo évier
OriginalL'auteur Vadim Suboch
J'ai aussi un Logitech C920 de la caméra, et avons utilisé pipeline d'enregistrement H. 264 vidéo provenant de la caméra:
Cette demande à la caméra pour produire H. 264 de données, que j'ai ensuite mux dans un De flux de transport MPEG conteneur, et d'écrire sur le disque. Je peux lire le fichier obtenu avec succès avec Totem.
Au-dessus de la canalisation des enregistrements au format 720p. L'appareil peut également enregistrer en 1080p si vous modifiez le format demandé pour
width=1920,height=1080
.OriginalL'auteur James Henstridge