Skip to main content
 首页 » 编程设计

python之缺少 PyGST 插件

2025年05月04日11qlqwjy

我正在运行 python 2.6 和 PyGST(最新可用于 Python 2.6)。我已经安装了所有插件 - 好的、坏的和丑陋的。

我有以下代码:

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 问题的人将获得赏金。

请您参考如下方法:

您需要的是完整的 uri: 如果您只处理本地文件系统上的文件并且只想插入文件路径,请更改行

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

像这样:

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

并且:GST 有一些例程可以更好地处理 uri 而不是刚刚添加的 'file://'。 A good tutorial is here