plugins - 在 gstreamer 插件中拦截总线消息

标签 plugins error-handling gstreamer

我正在编写一个使用 uridecodebin 的 gstreamer 插件。 .我希望能够拦截 uridecodebin 时发生的错误。在使用管道向应用程序报告之前无法打开文件(由于 URI 格式错误、文件格式未知或文件不存在)。当我尝试将 watch 添加到 uridecodebin自己的巴士,它失败了( gst_bus_create_watch: assertion bus->priv->poll != NULL ),我得到一个段错误。

如何在错误报告给应用程序之前拦截错误,以便我可以在内部优雅地失败?如果文件未加载,这对于整个插件来说不是一个严重错误,我希望能够在发生这种情况时进行一些清理工作。

最佳答案

您需要阅读此页面:
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-bus.html

使用 wxpython,我执行以下操作:

        # Create the bus to listen for messages
        bus = Gplayer.get_bus()
        bus.add_signal_watch()
        bus.enable_sync_message_emission()
        bus.connect('message', self.OnBusMessage)


#   Listen for gstreamer bus messages
    def OnBusMessage(self, bus, message):
        t = message.type
        if t == Gst.MessageType.ERROR:
            Gplayer.set_state(Gst.State.NULL)
            self.OnStop(None)
            wx.MessageBox('Gstreamer Error - Unsupported file type, Corrupt file,\
             Unable to access or Invalid Output Device', 'Error', wx.OK | wx.ICON_INFORMATION)     

或者在你的情况下,不要报告任何事情。

编辑:
您可以解析消息以查看将是错误的第 1 部分和将是更详细的解释的第 2 部分。
#   Listen for gstreamer bus messages
    def OnBusMessage(self, bus, message):
        t = message.type
        if t == Gst.MessageType.ERROR:
            print "Part 1",Gst.Message.parse_error (message)[0]
            print "part 2",Gst.Message.parse_error (message)[1]    

这是我从上面得到的丢失文件的结果:
第 1 部分未找到
第 2 部分 gstsouphttpsrc.c(1192): gst_soup_http_src_parse_status ():/GstPlayBin:playbin/GstURIDecodeBin:uridecodebin0/GstSoupHTTPSrc:source:
未找到 (404),网址:http://localhost/vvvv.mp3

注意:这假设您将代码添加到现有 watch

编辑2:
关于您的第二条评论,您是否调查了 gst_bus_new()。
乍一看,它可能会对您有所帮助。

关于plugins - 在 gstreamer 插件中拦截总线消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32248148/

相关文章:

javascript - 如何使用 XMLHttpRequest() 和 Javascript 处理 POST 请求错误

python - 通过 python 使用 maemo 相机

c# - 了解 .NET 程序集签名

jquery - jQuery 插件的动态选项对象(示例)

javascript - 无法读取未定义的属性 'Component' - React 组件插件的 webpack 构建

sqlite - ionic 2 sqlite在android上运行:无法读取未定义的属性executeSql

php - Mysqli错误显示源文件

error-handling - 无法模拟 MQ 原因码 2009

linux - GStreamer 中的多路复用音频和视频卡住

mono - 如何使用 monodevelop/xamarin 构建 gstreamer-sharp?