Handling errors with gst-rtsp-server Python bindings(使用GST-RTSP-SERVER Python绑定处理错误)
                            本文介绍了使用GST-RTSP-SERVER Python绑定处理错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
                        
                        问题描述
我有一个简单的Python程序,使用gst-rtsp-server创建一个RTSP流。它可以工作,但目前没有错误处理。如果管道有打字错误或连接到视频源时出现问题,我看不到堆栈跟踪或任何日志记录。我应该在哪里挂接代码来处理这样的问题?
我应该提一下,我完全是GObject世界的初学者。我怀疑这些库有一种标准的方法来报告错误,但我在我读到的有关如何做到这一点的文档中找不到任何东西。
如果有用,下面是我现在拥有的代码:
from threading import Thread
from time import sleep
import signal
import gi
gi.require_version("Gst", "1.0")
gi.require_version("GstRtsp", "1.0")
gi.require_version("GstRtspServer", "1.0")
from gi.repository import GLib, GObject, Gst, GstRtsp, GstRtspServer
PIPELINE = (
    "( videotestsrc ! vp8enc ! rtpvp8pay name=pay0 pt=96 )")
def main():
    GObject.threads_init()
    Gst.init(None)
    server = GstRtspServer.RTSPServer.new()
    server.props.service = "3000"
    server.attach(None)
    loop = GLib.MainLoop.new(None, False)
    def on_sigint(_sig, _frame):
        print("Got a SIGINT, closing...")
        loop.quit()
    signal.signal(signal.SIGINT, on_sigint)
    def run_main_loop():
        loop.run()
    main_loop_thread = Thread(target=run_main_loop)
    main_loop_thread.start()
    media_factory = GstRtspServer.RTSPMediaFactory.new()
    media_factory.set_launch(PIPELINE)
    media_factory.set_shared(True)
    server.get_mount_points().add_factory("/test", media_factory)
    print("Stream ready at rtsp://127.0.0.1:3000/test")
    while loop.is_running():
        sleep(0.1)
if __name__ == "__main__":
    main()
推荐答案
,因此您可以通过以下方式覆盖Gst.Bin中的do_handle_message:
import gi
gi.require_version("Gst", "1.0")
from gi.repository import Gst, GLib
Gst.init(None)
class SubclassBin(Gst.Bin):
    def do_handle_message(self, message):
        if message.type == Gst.MessageType.ERROR:
            error, message = message.parse_error()
            # TODO: Do something with the error
        # Call the base Gst.Bin do_handle_message
        super().do_handle_message(self, message)
subclass_bin = SubclassBin("mybin")
GstRtspServer.RTSPMediaFactory使用SubclassBin而不是Gst.Bin,因为据我所知,将任何Bin连接到RTSPMediaFactory的唯一方法是通过set_launch方法,该方法需要管道字符串而不是预置的bin。如果有办法将预置垃圾箱添加到RTSPMediaFactory,这将是一个完整的答案……但遗憾的是,我只能做到这一点。
                        这篇关于使用GST-RTSP-SERVER Python绑定处理错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
				 沃梦达教程
				
			本文标题为:使用GST-RTSP-SERVER Python绑定处理错误
 
				
         
 
            
        基础教程推荐
             猜你喜欢
        
	     - 修改列表中的数据帧不起作用 2022-01-01
- 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
- PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
- 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
- 在Python中从Azure BLOB存储中读取文件 2022-01-01
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
- Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
- 包装空间模型 2022-01-01
- PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
- 求两个直方图的卷积 2022-01-01
 
    	 
    	 
    	 
    	 
    	 
    	 
    	 
    	 
				 
				 
				 
				