【问题标题】:Missing PyGST Plugin?缺少 PyGST 插件?
【发布时间】:2011-08-19 01:12:08
【问题描述】:

我正在运行 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 问题的人。

【问题讨论】:

    标签: python gstreamer


    【解决方案1】:

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

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

    到这样的事情:

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

    AND:GST 有一些例程可以更好地处理 uri,只是在前面加上 'file://'A good tutorial is here

    【讨论】:

    • 我换行了,错误信息也变了。路径:C:\Users\user\Downloads\Overcome.mp3。错误:无法打开资源进行阅读。 ..\..\..\..\..\Source\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 以供阅读:打开文件时出错:参数无效
    • 您的意思是您输入了路径:'C:\Users\user\Downloads\Overcome.mp3' 并且错误消息说文件位于:file:///C:/GTKTutorial/文件:/C:/Users/user/Downloads/Overcome.mp3 不存在?路径的第一部分来自哪里?
    • 我不知道...我尝试了两种方法,但问题仍然存在。
    • 你能把这行替换成:self.player.set_property("uri", "file://C:/Users/user/Downloads/Overcome.mp3") 然后点击开始吗?
    • 没有错误,但绝对没有响应。我确认该文件在那里,并且确实有音频。但是,点击开始后,程序并没有播放该文件。
    【解决方案2】:

    一些研究表明,这显然是 DLL 中的错误。可能需要对源代码进行调整,并编译源代码,而不是使用 WinBuild。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 2017-02-27
      相关资源
      最近更新 更多