我想用python构建一个视频播放器,但我的应用程序将有更多的按钮,而不仅仅是播放/暂停,所以我需要在窗口中插入视频。
我现在有这个代码:
import tkinter
import os
import gi
gi.require_version('Gst', '1.0')
from gi.repository import GObject, Gst
def set_frame_handle(bus, message, frame_id):
if not message.get_structure() is None:
if message.get_structure().get_name() == 'prepare-window-handle':
display_frame = message.src
display_frame.set_property('force-aspect-ratio', True)
display_frame.set_window_handle(frame_id)
root = tkinter.Tk()
w, h = root.winfo_screenwidth(), root.winfo_screenheight()
root.geometry("%dx%d+0+0" % (w, h))
Gst.init(None)
GObject.threads_init()
video = tkinter.Frame(root, bg='#000000')
video.grid(row=0, column=0, sticky="nsew")
frame_id = video.winfo_id()
player = Gst.ElementFactory.make('playbin', None)
player.set_property('video-sink', None)
player.set_property('uri', 'file://%s' % (os.path.abspath('out.mpeg')))
player.set_state(Gst.State.PLAYING)
bus = player.get_bus()
bus.add_signal_watch()
bus.enable_sync_message_emission()
bus.connect('sync-message::element', set_frame_handle, frame_id)
root.mainloop()
但是这只创建了2个窗口,其中一个是OpenGL渲染器......我需要在同一窗口内的视频播放器......
答案 0 :(得分:-1)
我建议您只创建另一个帧而不是视频播放器。在这个额外的框架中,你可以打包视频播放器,而不是别的。然后你可以根据需要创建尽可能多的窗口,只需参考这个额外的框架。这样可以更轻松地安排您想要添加的所有其他按钮和内容。