2 Stimmen

Fehlendes PyGST-Plugin?

Ich verwende Python 2.6 und PyGST (die aktuellste Version für Python 2.6). Ich habe alle Plugins installiert - gute, schlechte und hässliche.

Ich habe den folgenden Code:

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()

Wenn ich jedoch dieses Modul ausführe und versuche, eine Datei zu öffnen, erhalte ich die folgende Fehlermeldung.

Fehler: Ihr GStreamer in .......... \Source\gst -plugins-base \gst\playback\gsturidecodebin.c (991): gen_source_element (): /GstPlayBin2:player/GstURIDecodeBin:uridecodebin0

Wie kann ich das korrigieren?

EDIT: Die erste Antwort funktioniert unter Ubuntu, aber nicht unter Windows. Derjenige, der das Problem für Windows löst, erhält ein Kopfgeld.

1voto

xubuntix Punkte 2315

Was Sie brauchen, ist eine vollständige Uri: Wenn Sie nur Dateien auf Ihrem lokalen Dateisystem bearbeiten und nur den Dateipfad einfügen wollen, ändern Sie die Zeile

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

zu etwas wie diesem:

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

AND: GST hat einige Routinen, um uri besser zu handhaben als nur durch Voranstellen 'file://' . Eine gute Anleitung finden Sie hier

0voto

CodeMouse92 Punkte 6668

Einige Nachforschungen haben ergeben, dass es sich offenbar um einen Fehler in einer DLL handelt. Möglicherweise müssen Änderungen am Quellcode vorgenommen und der Quellcode kompiliert werden, anstatt WinBuilds zu verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X