кто-нибудь знает, как я буду использовать окно tkinter в качестве вывода из videoink/pipeline изнутри python? я нашел методы для многих других систем с графическим интерфейсом, но я не хочу использовать tkinter и что-то еще вместе ххх заранее спасибо х
Вывод видео в Tkinter из GStreamer?
comment
по теме: Способ воспроизведения видеофайлов в Tkinter?
- person jfs   schedule 21.02.2015
Ответы (1)
Это работает для меня на 32-битной Windows. Я получаю ошибку сегмента в Linux или 64-разрядной версии Windows. Извините, я не знаю о Маке.
Вы должны использовать bus.connect("sync-message::element", on_sync_message) и передать идентификатор виджета Tk (winfo_id), как вы можете видеть в следующем код. Контейнером может быть любой виджет Tk, но сплошная черная рамка мне больше подходит.
import sys, os
from Tkinter import *
import pygst
pygst.require("0.10")
import gst
def start():
player.set_property('video-sink', None)
player.set_property("uri", "file:///" + sys.argv[1])
player.set_state(gst.STATE_PLAYING)
def on_sync_message(bus, message):
if message.structure is None:
return
message_name = message.structure.get_name()
if message_name == "prepare-xwindow-id":
imagesink = message.src
imagesink.set_property("force-aspect-ratio", True)
imagesink.set_xwindow_id(mwin_id)
window = Tk()
window.geometry("500x400")
movie_window = Frame(window,bg='#000000')
movie_window.pack(side=BOTTOM,anchor=S,expand=YES,fill=BOTH)
mwin_id = movie_window.winfo_id()
player = gst.element_factory_make("playbin2", "player")
fakesink = gst.element_factory_make('fakesink', 'novideo')
player.set_property('video-sink', fakesink)
bus = player.get_bus()
bus.add_signal_watch()
bus.enable_sync_message_emission()
bus.connect("sync-message::element", on_sync_message)
start()
window.mainloop()
person
D K
schedule
12.06.2011
Я получаю segfault в Linux
- person ealfonso; 25.08.2013