2014-10-04 91 views
0

我试图与Tkinter的,GStreamer的和python3视频播放器,我有以下代码“NoneType”对象有没有属性“set_property” Tkinter的,GStreamer的python3

import sys, os 
from tkinter import * 
from gi.repository import GObject 
from gi.repository import GLib 
from gi.repository import Gtk 
from gi.repository import Gst 
def start(): 
     player.set_property('video-sink', None) 
     player.set_property("uri", "./video.avi") 
     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.ElementFactory.make("playbin2", "player") 
fakesink = Gst.ElementFactory.make("fakesink", "fakesink") 
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) 


window.mainloop() 
start() 

,但我收到错误:

(reproductor4.py:6856): GStreamer-CRITICAL **: gst_element_factory_make: assertion `gst_is_initialized()' failed 
Traceback (most recent call last): 
    File "reproductor4.py", line 30, in <module> 
    player.set_property("video-sink", fakesink) 
AttributeError: 'NoneType' object has no attribute 'set_property' 

为什么会出现这种情况的一些想法?

回答

0

第30行是player.set_property("video-sink", fakesink)。跟踪和属性错误消息似乎声称player是无。在该行之前使用print(player)进行测试。但是,我不明白Traceback之前的额外信息。它表明gst代码中的断言失败。

0

你的问题其实是:在你的代码

(reproductor4.py:6856): GStreamer-CRITICAL **: gst_element_factory_make: assertion `gst_is_initialized()' failed 

没有被调用初始化程序:gst_init()(很可能是Gst.init()在python)。如果没有初始化,gstreamer将无法工作。

+0

非常感谢你最后我不得不初始化对象,只有追加: GObject.threads_init() Gst.init(无) – grijalvaromero 2014-10-05 04:58:10

0

的solucion是这样的台词: 最后只追加这样的行前致电: GObject.threads_init() Gst.init(无)

相关问题