2012-01-09 12 views
7

Me gustaría mostrar una imagen en Python usando enlaces gstreamer, pero sin usar GTK + (estoy en ARM).Mostrar imagen sin gtk

sé cómo escuchar música con pitón y gstreamer:

#!/usr/bin/python 
# Simply initiates a gstreamer pipeline without gtk 
import gst 
import gobject 
import sys 

mainloop = gobject.MainLoop() 
my_bin = gst.element_factory_make("playbin") 
my_bin.set_property("uri", "file:///home/Lumme-Badloop.ogg") 
my_bin.set_state(gst.STATE_PLAYING) 

try: 
    mainloop.run() 
except KeyboardInterrupt: 
    sys.exit(0)  

sé cómo mostrar una imagen con gstreamer en la línea de comandos:

gst-launch-0.10 filesrc location=image.jpeg ! jpegdec ! freeze ! videoscale ! ffmpegcolorspace ! autovideosink 

Lo que yo quiero es la exacta Lo mismo, pero usando Python.

Probé algunas cosas, el código se ejecuta sin errores, pero no se muestra nada en la pantalla.

pipe = gst.Pipeline("mypipe") 

source = gst.element_factory_make("filesrc", "filesource") 
demuxer = gst.element_factory_make("jpegdec", "demuxer") 
freeze = gst.element_factory_make("freeze", "freeze") 
video = gst.element_factory_make("videoscale", "scaling") 
ffm = gst.element_factory_make("ffmpegcolorspace", "muxer") 
sink = gst.element_factory_make("autovideosink", "output") 

pipe.add(source, demuxer, freeze, video, ffm, sink) 

filepath = "file:///home/image.jpeg" 
pipe.get_by_name("filesource").set_property("location", filepath) 

pipe.set_state(gst.STATE_PLAYING) 

¿Alguna idea que pueda ayudarme?

¡Gracias por adelantado!

Por cierto, también tengo trabajos de audiotest y videotest. Aquí hay un ejemplo que funciona muy bien:

# Create GStreamer pipeline 
pipeline = gst.Pipeline("mypipeline") 
# Set up our video test source 
videotestsrc = gst.element_factory_make("videotestsrc", "video") 
# Add it to the pipeline 
pipeline.add(videotestsrc) 
# Now we need somewhere to send the video 
sink = gst.element_factory_make("xvimagesink", "sink") 
# Add it to the pipeline 
pipeline.add(sink) 
# Link the video source to the sink-xv 
videotestsrc.link(sink) 

pipeline.set_state(gst.STATE_PLAYING) 
+0

¿Has probado otros receptores como 'xvimagesink' o' ximagesink'? – jcollado

+0

Yo estaba, en este mismo momento. Obtuve un ejemplo funcional con videosink. Lo puse al final de mi publicación. gracias por la ayuda – jlengrand

+0

@jlengrand: puede responder su propia pregunta y cerrar esto. Es normalmente como manejamos situaciones como esta. – Will

Respuesta

3

intento con:

ruta de archivo = "/home/image.jpeg"

La propiedad localización de filesrc toma una ruta de archivo, no un URI. Debe verificar los mensajes de error en el bus de la tubería. O ejecute su código con GST_DEBUG = *: 3 yourapp.py para ver si hay problemas/errores.

Además, se puede hacer

tubería = gst.parse_launch ("ubicación filesrc =/home/foo/imagen.jpg! Jpegdec! ....")

en vez de construir el gasoducto a sí mismo (para cosas simples, de todos modos, parse_launch es un poco limitado).

+0

Gracias por su información Tim. Intenté habilitar la depuración, pero encontré un mensaje no relevante en gstreamer. Creo que el problema proviene del hecho de que intento simplemente mostrar una imagen y la tubería espera un video. ¡Definitivamente voy a probar tus otros dos consejos y dejarte saber! – jlengrand