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()
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í:
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.