2011-08-07 140 views
2

我正在運行python 2.6和PyGST(最新可用於Python 2.6)。我已經安裝了所有的插件 - 好,壞,醜。缺少PyGST插件?

我有以下代碼:

import sys, os 
import pygtk, gtk, gobject 
import pygst 
pygst.require("0.10") 
import gst 

class GTK_Main: 
    def __init__(self): 
     window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
     window.set_title("Audio-Player") 
     window.set_default_size(300, -1) 
     window.connect("destroy", gtk.main_quit, "WM destroy") 
     vbox = gtk.VBox() 
     window.add(vbox) 
     self.entry = gtk.Entry() 
     vbox.pack_start(self.entry, False, True) 
     self.button = gtk.Button("Start") 
     self.button.connect("clicked", self.start_stop) 
     vbox.add(self.button) 
     window.show_all() 

     self.player = gst.element_factory_make("playbin2", "player") 
     fakesink = gst.element_factory_make("fakesink", "fakesink") 
     self.player.set_property("video_sink", fakesink) 
     bus = self.player.get_bus() 
     bus.add_signal_watch() 
     bus.connect("message", self.on_message) 

    def start_stop(self, w): 
     if self.button.get_label() == "Start": 
      filepath = self.entry.get_text() 
      if os.path.isfile(filepath): 
       self.button.set_label("Stop") 
       self.player.set_property("uri", filepath) 
       self.player.set_state(gst.STATE_PLAYING) 
      else: 
       self.player.set_state(gst.STATE_NULL) 
       self.button.set_label("Start") 

    def on_message(self, bus, message): 
     t = message.type 
     if t == gst.MESSAGE_EOS: 
      self.player.set_state(gst.STATE_NULL) 
      self.button.set_label("Start") 
     elif t == gst.MESSAGE_ERROR: 
      self.player.set_state(gst.STATE_NULL) 
      err, debug = message.parse_error() 
      print "Error: %s" % err, debug 
      self.button.set_label("Start") 

GTK_Main() 
gtk.gdk.threads_init() 
gtk.main() 

然而,當我運行這個模塊,並試圖打開一個文件,我得到了下面的錯誤。

Error: Your GStreamer installation is missing a plug-in. ..........\Source\gst-plugins-base\gst\playback\gsturidecodebin.c(991): gen_source_element(): /GstPlayBin2:player/GstURIDecodeBin:uridecodebin0

如何糾正呢?

編輯:第一個答案適用於Ubuntu,但它不適用於Windows。賞金將授予解決Windows問題的人。

回答

0

一些研究表明,這顯然是DLL中的錯誤。調整可能需要對源代碼進行編譯,而不是使用WinBuild。

1

你需要的是一個完整的URI: 如果你只處理在本地文件系統中的文件,並且只希望插入的文件路徑,改線

self.player.set_property("uri", filepath) 

到這樣的事情:

self.player.set_property("uri", "file://"+filepath) 

AND:GST有一些例程可以更好地處理uri,前提是'file://'A good tutorial is here

+0

我改變了行,並且錯誤信息改變了。路徑:C:\ Users \ user \ Downloads \ Overcome.mp3。錯誤:無法打開閱讀資源。 gst-plugins-base \ ext \ gio \ gstgiosrc.c(324):gst_gio_src_get_stream():/ GstPlayBin2:player/GstURIDecodeBin:uridecodebin0/GstGioSrc:source : 無法打開位置文件:/// C:/ GTKTutorial/file:/ C:/Users/user/Downloads/Overcome.mp3用於閱讀:打開文件時出錯:無效參數 – CodeMouse92

+0

您的意思是您輸入了路徑:' C:\ Users \ user \ Downloads \ Overcome.mp3',並且錯誤消息顯示文件位於:file:/// C:/ GTKTutorial/file:/ C:/Users/user/Downloads/Overcome.mp3存在?路徑的第一部分從哪裏來? – xubuntix

+0

我不知道......我嘗試了兩種方法,問題仍然存在。 – CodeMouse92