繁体   English   中英

来自GStreamer的Tkinter视频输出?

[英]Video Output In Tkinter From GStreamer?

有谁知道如何使用tkinter窗口作为来自python内的videosink /管道的输出? 我已经找到了许多其他GUI系统的方法,但我不想要使用tkinter和其他东西在一起xxx感谢提前x

这适用于Windows 32位。 我在Linux或Windows 64位上遇到了seg故障。 对不起,我不知道Mac。

你必须使用bus.connect(“sync-message :: element”,on_sync_message)并传递一个Tk小部件ID( 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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM