【问题标题】:Video Output In Tkinter From GStreamer?GStreamer在Tkinter中的视频输出?
【发布时间】:2011-02-08 20:21:16
【问题描述】:

有谁知道我将如何使用 tkinter 窗口作为来自 python 内的视频接收器/管道的输出?我找到了许多其他 GUI 系统的方法,但我不想同时使用 tkinter 和其他东西 xxx 提前谢谢x

【问题讨论】:

标签: python tkinter gstreamer


【解决方案1】:

这适用于我在 32 位的 Windows 上。我在 Linux 或 64 位 Windows 上遇到了段错误。抱歉,我不了解 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()

【讨论】:

  • 我确实在 Linux 上遇到了段错误
猜你喜欢
  • 2019-05-02
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-26
  • 2019-08-31
相关资源
最近更新 更多