我试图用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的大量研究也没有帮助。有人能帮我解释一下错误是怎么回事吗?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐