缺失PyGST插件?
我正在使用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()
但是,当我运行这个模块并尝试打开一个文件时,我遇到了以下错误。
错误:你的GStreamer安装缺少一个插件。 ..........\Source\gst-plugins-base\gst\playback\gsturidecodebin.c(991): gen_source_element (): /GstPlayBin2:player/GstURIDecodeBin:uridecodebin0
我该如何解决这个问题?
编辑:第一个答案在Ubuntu上有效,但在Windows上不行。谁能解决Windows上的这个问题,我会给予奖励。
2 个回答
1
你需要的是一个完整的uri(统一资源标识符):
如果你只是在处理本地文件系统上的文件,并且只想插入文件路径,可以把这一行
self.player.set_property("uri", filepath)
改成类似这样的:
self.player.set_property("uri", "file://"+filepath)
另外,GST(GStreamer)有一些方法可以更好地处理uri,而不仅仅是简单地在前面加上 'file://'
。
0
一些研究表明,这似乎是一个DLL文件中的错误。可能需要对源代码进行一些调整,然后重新编译源代码,而不是使用WinBuilds工具。