问题描述
我有一个简单的管道,它使用 python 信号来处理 sigint 和停止管道执行。当输入(我使用 uridecodebin 组件)是视频时,它就像一个魅力。当按下 ctrl+c 时,管道立即停止。然而,当我切换到像 RTSP 摄像机流这样的实时源时,我会在 eos 消息发送和总线调用消息处理程序中接收到的“流结束”消息之间遇到某些延迟。
我想这与 gstream 有关,可能有办法减少这种延迟并最快地停止管道。我的代码类似于以下内容:
def bus_call(bus,message,loop):
t = message.type
if t == Gst.MessageType.EOS:
logger.info("End-of-stream\n")
loop.quit()
elif t==Gst.MessageType.WARNING:
err,debug = message.parse_warning()
logger.info("Warning: %s: %s\n" % (err,debug))
elif t == Gst.MessageType.ERROR:
err,debug = message.parse_error()
logger.info("Error: %s: %s\n" % (err,debug))
loop.quit()
return True
# Set up pipeline
logger.info("GStreamer initialization")
GObject.threads_init()
Gst.init(None)
logger.info("Creating Pipeline")
pipeline = Gst.Pipeline()
# create and add elements
....
def send_signal(n,f):
logger.info("Sending signal")
pipeline.send_event(Gst.Event.new_eos())
signal.signal(
signal_type,send_signal,)
loop = GObject.MainLoop()
bus = pipeline.get_bus()
bus.add_signal_watch()
bus.connect("message",bus_call,loop)
logger.info("Starting pipeline")
pipeline.set_state(Gst.State.PLAYING)
loop.run()
它在停止前处理了大约 100 帧。我在下面附上我的日志:
...
Number of objects in frame 0 38
Number of objects in frame 0 39
Number of objects in frame 0 40
^C2021-03-18 08:15:26.912 | INFO | pipeline:send_signal:49 - Sending signal
Number of objects in frame 0 41
...
Number of objects in frame 0 143
Number of objects in frame 0 144
2021-03-18 08:15:33.331 | INFO | probe_callbacks.fps_counter:on_frame_meta:32 - Fps of stream is 15.944659997594599
Number of objects in frame 0 145
Number of objects in frame 0 146
Number of objects in frame 0 147
2021-03-18 08:15:33.523 | SUCCESS | pipeline:bus_message_handler:34 - End of Stream
2021-03-18 08:15:33.525 | INFO | pipeline:run_loop:67 - Exiting app...
有没有办法减少这个时间?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)