Jouer RTSP avec python-gstreamer
J'utilise gstreamer pour la lecture de flux RTSP de caméras IP (comme Axe.)
J'utilise une ligne de commande comme ceci:
gst-launch-0.10 rtspsrc location=rtsp://192.168.0.127/axis-media/media.amp latency=0 ! decodebin ! autovideosink
et il fonctionne bien.
J'ai envie de le contrôler avec une interface graphique en pygtk donc j'utilise la gstreamer bindings python.
J'ai écrit ce morceau de code:
[...]
self.player = gst.Pipeline("player")
source = gst.element_factory_make("rtspsrc", "source")
source.set_property("location", "rtsp://192.168.0.127/axis-media/media.amp")
decoder = gst.element_factory_make("decodebin", "decoder")
sink = gst.element_factory_make("autovideosink", "sink")
self.player.add(source, decoder, sink)
gst.element_link_many(source, decoder, sink)
bus = self.player.get_bus()
bus.add_signal_watch()
bus.enable_sync_message_emission()
bus.connect("message", self.on_message)
bus.connect("sync-message::element", self.on_sync_message)
[...]
Mais il ne fonctionne pas et quittez avec ce message:
gst.element_link_many(source, decoder,sink)
gst.LinkError: failed to link source with decoder
J'ai aussi essayer d'améliorer mon CLI avec ce que je utilisez uniquement h264:
gst-launch-0.10 -v rtspsrc location=rtsp://192.168.0.127/axis-media/media.amp ! rtph264depay ! ffdec_h264 ! xvimagesink
Et de l'implémenter dans mon code python comme ça:
[...]
self.player = gst.Pipeline("player")
source = gst.element_factory_make("rtspsrc", "source")
depay = gst.element_factory_make("rtph264depay", "depay")
decoder = gst.element_factory_make("ffdec_h264", "decoder")
sink = gst.element_factory_make("xvimagesink", "output")
self.player.add(source, depay, decoder, sink)
gst.element_link_many(source, depay, decoder, sink)
[...]
Mais j'ai eu le même message d'erreur 🙁
gst.LinkError: failed to link source with depay
Il ya quelque chose de mal entre ma source (rtspsrc), car il travailler avec decodebin avec un filesrc (ne fonctionnent pas, bien sûr, avec rtph264depay)
Je ne comprends pas pourquoi cela ne fonctionne pas car il travail dans l'interface de ligne.
Les experts de gstreamer qui peut m'aider ?
Merci d'avance.
Ce qui concerne,
gst_parse_launch
appel d'api. Il vous permet d'utiliser la tps-syntaxe de lancement dans votre bientôt-à-être-bien-plus court code. En nommant les éléments, vous pouvez définir les paramètres comme nécessaire, sans avoir à faire de chaîne d'interpolation.Salut, Merci pour votre réponse. J'ai déjà essayé gst_parse_launch, mais mon problème est que mon GstPipeline objet n'a plus de propriété comme emplacement. Je suppose que "nommer les éléments" (comme on dit) peut résoudre mon problème, mais je ne peux pas comprendre comment le faire 🙁
OriginalL'auteur tirlototo | 2010-11-16
Vous devez vous connecter pour publier un commentaire.
J'ai un "C" de la mise en œuvre du code que vous recherchez. Je pense qu'il devrait être assez simple pour convertir en "Python"
Makefile
Mise à JOUR
Équivalent De Code Java
OriginalL'auteur enthusiasticgeek
Cette réponse explique pourquoi vous obtenez une
gst.LinkError
: Gstreamer de python de la tps.LinkError problèmeAvec
gst.parse_launch
, vous pouvez nommer les éléments et puis les récupérer pour définir les propriétés:OriginalL'auteur adw