Gstreamer tkinter x error失败请求

2024-05-13 09:58:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用tkinter在同一个窗口中显示不同的gstreamer管道输出。我尝试创建自己的框架来添加gstreamer管道。我想我可以把

你知道吗帧.py你知道吗

from tkinter import Frame, NW

import gi

# Needed for set_window_handle():
gi.require_version('GstVideo', '1.0')
gi.require_version('Gst', '1.0')
from gi.repository import Gst, GObject, GstVideo


class GstFrame(Frame):
    def __init__(self, gst_launch_string, x, y, width, height, master=None, cnf=dict(), **kwargs):
        super(GstFrame, self).__init__(master=master, cnf=cnf, **kwargs)

        self.place(relx=x, rely=y, anchor=NW, relwidth=width, relheight=height)

        self.frame_id = self.winfo_id()

        self.player = Gst.parse_launch(gst_launch_string)
        self.player.set_state(Gst.State.PLAYING)

        self.bus = self.player.get_bus()
        self.bus.enable_sync_message_emission()
        self.bus.connect('sync-message::element', self.set_frame_handle)

    def play(self):
        self.player.set_state(Gst.State.PLAYING)

    def set_frame_handle(self, bus, message):
        if message.get_structure().get_name() == 'prepare-window-handle':
            frame = message.src
            frame.set_property('force-aspect-ratio', True)
            frame.set_window_handle(self.frame_id)


class SensorStreamFrame(GstFrame):
    def __init__(self, stream, master=None, cnf=dict(), **kwargs):
        gstreamer_launch_string = 'tcpclientsrc host={} port={} ! gdpdepay ! '\
                                  'rtph264depay ! avdec_h264 ! videoconvert ! '\
                                  'autovideosink sync=false'.format(stream.host, stream.port)

        x = stream.x
        y = stream.y
        width = stream.width
        height = stream.height

        super(SensorStreamFrame, self).__init__(gstreamer_launch_string, x, y, width, height, master, cnf, **kwargs)

你知道吗实用程序.py 从库帧导入SensorStreamFrame

def init_players(streams, window):
    for stream in streams:
        SensorStreamFrame(stream, window)

你知道吗主.py你知道吗

from tkinter import Tk

from lib.frames import SensorStreamFrame
from lib.utils import init_configuration
import gi

gi.require_version('Gst', '1.0')
# Needed for set_window_handle():
gi.require_version('GstVideo', '1.0')
from gi.repository import Gst, GObject, GstVideo


window = Tk()
window.title('Eye-Track visualizer')
window.geometry('1280x960')

# Initialize Gstreamer
Gst.init(None)
GObject.threads_init()


init_configuration(window)

window.mainloop()

init\u配置只读取一个配置文件并计算大小和位置,最后调用init\u播放器

我有两种错误,比如

X Error of failed request:  BadDrawable (invalid Pixmap or Window parameter)
  Major opcode of failed request:  150 (XVideo)
  Minor opcode of failed request:  19 ()
  Resource id in failed request:  0x5200006
  Serial number of failed request:  384
  Current serial number in output stream:  385

以及

X Error of failed request:  BadDrawable (invalid Pixmap or Window parameter)
  Major opcode of failed request:  150 (XVideo)
  Minor opcode of failed request:  19 ()
  Resource id in failed request:  0x5200006
  Serial number of failed request:  536
  Current serial number in output stream:  537

我不知道从哪里开始调试这个,对google的大量研究也没有帮助。有人能帮我解释一下错误是怎么回事吗?你知道吗


Tags: offromimportselfstreaminitrequestdef