Отсутствует плагин PyGST? - PullRequest
2 голосов
/ 07 августа 2011

Я использую 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-плагинов базы \ GST \ Воспроизведение \ gsturidecodebin.c (991): gen_source_element (): / GstPlayBin2: игрок / GstURIDecodeBin: uridecodebin0

Как мне исправить это?

РЕДАКТИРОВАТЬ: первый ответ работает в Ubuntu, но не работает в Windows. Награда будет вручена тому, кто решит проблему для Windows.

Ответы [ 2 ]

1 голос
/ 09 августа 2011

Вам нужен полный URI: если вы обрабатываете только файлы в своей локальной файловой системе и хотите вставить только путь к файлу, измените строку

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

на что-то вроде этого:

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

И: в GST есть несколько процедур, которые лучше справляются с только что добавленными 'file://'. Хороший учебник здесь

0 голосов
/ 18 августа 2011

Некоторые исследования показали, что это, по-видимому, ошибка в DLL.Может потребоваться внести изменения в исходный код и скомпилировать исходный код вместо использования WinBuilds.

...