2012-01-09 23 views
7

Chciałbym wyświetlić obraz w Pythonie przy użyciu powiązań gstreamer, ale bez używania GTK + (jestem na ARM).Wyświetl obraz bez gtk

wiem, jak słuchać muzyki z Python i 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)  

wiem jak wyświetlić obraz z GStreamer w wierszu poleceń:

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

Co miałbym jest dokładna to samo, ale używając Pythona.

Próbowałem niektórych rzeczy, kod działa bez błędów, ale nic nie pokazuje się na ekranie.

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) 

Czy masz pomysł, który mógłby mi pomóc?

Dzięki z góry!

Nawiasem mówiąc, mam również audiotest i videotest działa. Oto przykład, który działa prawidłowo:

# 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

Czy wypróbowałeś inne pochłaniacze, takie jak 'xvimagesink' lub' ximagesink'? – jcollado

+0

Byłem, w tej chwili. Mam działający przykład z videoink. Umieściłem to na końcu mojego postu. dzięki za pomoc – jlengrand

+0

@jlengrand: Możesz odpowiedzieć na własne pytanie i zamknąć to. Zwykle radzimy sobie z takimi sytuacjami. – Will

Odpowiedz

3

Spróbuj z:

filePath = "/home/image.jpeg"

Obiekt lokalizacja filesrc przyjmuje ścieżkę do pliku, a nie URI. Powinieneś sprawdzić komunikaty o błędach na magistrali potoku. Lub uruchom swój kod za pomocą GST_DEBUG = *: 3 yourapp.py, aby sprawdzić, czy występują problemy/błędy.

Ponadto, można zrobić

rurociągu = gst.parse_launch ("location filesrc =/home/foo/image.jpg! Jpegdec! ....")

zamiast budować rurociąg samemu (dla prostych rzeczy, w każdym razie, parse_launch jest nieco ograniczona).

+0

Dzięki za informacje Tim. Próbowałem włączyć funkcję debugowania, ale znalazłem nieodpowiedni komunikat w gstreamer. Myślę, że problem wynika z faktu, że próbuję po prostu wyświetlić jeden obraz, a rura czeka na wideo. Na pewno spróbuję twoich dwóch innych wskazówek i dam znać! – jlengrand