es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo obtener el tipo de error específico de Gstreamer en Python.

Me gustaría conocer el tipo de error específico de un error de GStreamer. Encontré este código de muestra:

import gi
import sys
gi.require_version('Gst', '1.0')
from gi.repository import GObject, Gst

def bus_call(bus, message, loop):
    t = message.type
    if t == Gst.MessageType.EOS:
        sys.stdout.write("End-of-stream\n")
        loop.quit()
    elif t == Gst.MessageType.WARNING:
        err, debug = message.parse_warning()
        sys.stderr.write("Warning: %s: %s\n" % (err, debug))
    elif t == Gst.MessageType.ERROR:
        err, debug = message.parse_error()
        sys.stderr.write("Error: %s: %s\n" % (err, debug))
        loop.quit()
    return True

En mi caso de uso, estoy trabajando con flujos de video RTSP. Algunos de ellos pueden estar fuera de línea, y por lo tanto el código anterior imprimiría el siguiente error:

Error: gst-resource-error-quark: Could not read from resource. (9): gstrtspsrc.c(5917): gst_rtsp_src_receive_response (): /GstPipeline:pipeline0/GstBin:source-bin-00/GstURIDecodeBin:uri-decode-bin/GstRTSPSrc:source:

Supongamos que quiero que el código llame a una función cuando se produzca este error específico. Podría hacer algo como esto:

if str(err) == "gst-resource-error-quark: Could not read from resource. (9)":
    hacer_algo()

Sin embargo, esto parece bastante feo ya que depende del mensaje de error que podría cambiar en el futuro. ¿Hay alguna manera de decir algo como esto?:

if err == ErrorReadOnSource:
    hacer_algo()
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay tipos de errores específicos en GStreamer que se pueden usar en lugar de depender de mensajes de error. Estos tipos de errores se definen como constantes simbólicas y se pueden importar desde el módulo Gst. Por ejemplo, el tipo de error para el error específico mencionado en la pregunta es Gst.ResourceError.READ.

    Entonces, el código para llamar a una función cuando ocurre este error específico se vería así:

    from gi.repository import Gst
    
    if err == Gst.ResourceError.READ:
        hacer_algo()
    

    Esta es una forma más sólida y confiable de manejar errores en comparación con depender de mensajes de error. El módulo Gst también define otros tipos de errores y enums, que se pueden encontrar en la documentación de GStreamer.

Comments are closed.