# -*- coding: utf-8 -*-
# Capturador_Gstreamer.py (versión 1)
# por Flavio Danesse (fdanesse@hotmail.com)
# CeibalJAM! - Uruguayimport sys, os
import pygtk, gtk, gobject
import pygst
pygst.require("0.10")
import gst
import time
class Capturador_Gstreamer():
def __init__(self, frecuencia=2):
self.frecuencia = frecuencia
self.hora = time.strftime("%H:%M:%S") # hora de inicio, luego, hora de cada fotografía
# Declaración elemendos para pipeline de fotografía
self.pipeline = None
self.source = None
self.codec = None
self.formato = None
self.filesink = None
self.start_streaming() # levanta el stream
self.estado = True # controla el estado general del programa
def main(self):
while self.estado:
time.sleep(self.frecuencia)
self.get_fotografia()
def get_fotografia(self):
# timer para ejecutar tareas programadas
self.pipeline.set_state(gst.STATE_NULL) # anula el pipeline
self.hora = time.strftime("%H:%M:%S") # obtiene la hora
self.filesink.set_property("location", "%s.png" % (self.hora)) # Cambia nombre de archivo
self.pipeline.set_state(gst.STATE_PLAYING) # Fotografía
return True
def construir_pipeline(self):
# construye el stream de fotografia
self.pipeline = gst.Pipeline("player")
self.source = gst.element_factory_make("v4l2src", "camara") # origen
self.codec = gst.element_factory_make("ffmpegcolorspace", "codec") # formato de video
self.formato = gst.element_factory_make("pngenc", "png") # formato de imagen
self.filesink = gst.element_factory_make("filesink", "filesink") # salida
self.filesink.set_property("location", "%s.png" % (self.hora))
self.pipeline.add(self.source, self.codec, self.formato, self.filesink) # armar el pipeline
gst.element_link_many(self.source, self.codec, self.formato, self.filesink) # entubar los elementos
def start_streaming(self):
# Ejecuta el stream
self.construir_pipeline() # construye el pipeline
self.bus = self.pipeline.get_bus() # obtiene el bus de mensajes
self.bus.add_signal_watch() # escucha las señales en el bus
self.bus.connect("message", self.on_message) # conecta los mensajes al manejador de señales
def on_message(self, bus, message):
# mensajes en el bus
if message.type == gst.MESSAGE_ERROR:
err, debug = message.parse_error()
print "ERROR ON_MESSAGE: ", err, debug
def describe(self):
# Descripción general del funcionamiento de la clase Capturador_Gstreamer
descripcion = '''\t\t*** Clase Capturador_Gstreamer *** \n
Esta clase recibe un parámetro entero que indica cada cuantos segundos debe realizar una fotografía.\n
Luego, comenzara a fotografiar y guardar esas imágenes con el nombre de archivo igual a la hora de realizada la fotografía.\n
Mientras la variable estado sea True, continuará realizando esta tarea.'''
return descripcionif __name__ == "__main__":
# frecuencia es cada cuantos segundos debe fotografiar
capturador = Capturador_Gstreamer(frecuencia=2)
print capturador.describe()
capturador.main()
No hay comentarios:
Publicar un comentario