首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将发现者模块与pygi GstPbutils一起使用?

如何将发现者模块与pygi GstPbutils一起使用?
EN

Stack Overflow用户
提问于 2012-07-04 15:40:30
回答 2查看 847关注 0票数 5

我正在尝试将一些pygtk音乐播放器代码移植到使用gst的discoverer模块的pygi。

代码语言:javascript
复制
from gi.repository import Gst, GstPbutils

def on_discovered(discoverer, ismedia):
    print("%s -- %s" %( discoverer.tags.get('title', 'Unknown'),
                        discoverer.tags.get('artist', 'Unknown')))

Gst.init(None)
location = "file:///srv/Music/molly_hatchet-the_creeper.mp3"
discoverer = GstPbutils.Discoverer()
discoverer.discover_uri(location)
discoverer.connect('discovered', on_discovered)

当我尝试运行此命令时,我得到以下错误:

代码语言:javascript
复制
/usr/lib/python2.7/dist-packages/gi/types.py:43: Warning: g_object_get_qdata: assertion `G_IS_OBJECT (object)' failed
  return info.invoke(*args, **kwargs)
/usr/lib/python2.7/dist-packages/gi/types.py:43: Warning: g_object_ref_sink: assertion `G_IS_OBJECT (object)' failed
  return info.invoke(*args, **kwargs)

** (python:21482): CRITICAL **: pygobject_register_wrapper: assertion `PyObject_TypeCheck(self, &PyGObject_Type)' failed
/usr/lib/python2.7/dist-packages/gi/types.py:43: Warning: g_object_unref: assertion `G_IS_OBJECT (object)' failed
  return info.invoke(*args, **kwargs)

不幸的是,关于这个pygi模块的文档似乎有点稀疏。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-11 11:28:54

下面是一个通用GST discoverer调用的示例:

代码语言:javascript
复制
import sys

import gobject
gobject.threads_init()

import pygst
pygst.require('0.10')
import gst
from gst.extend.discoverer import Discoverer

def on_discovered(discoverer, ismedia, infile):
    print '\non_discovered:', infile
    discoverer.print_info()


if __name__ == '__main__':
    if len(sys.argv) >= 2:
        print 'Audio file: %s ' % sys.argv[0]
        discoverer = Discoverer(sys.argv[1])
        discoverer.connect('discovered', on_discovered, sys.argv[1])

        # The MainLoop
        mainloop = gobject.MainLoop()
        gobject.idle_add(discoverer.discover)
        mainloop.run()

    else:
        print 'Usage: %s <input_file>' % sys.argv[0]

编辑:如果你只想要标签,使用this

票数 1
EN

Stack Overflow用户

发布于 2013-12-03 05:48:03

我通过以下代码成功地使用了GstPbutils模块(请注意,这里使用的是gstreamer的1.2版本)

代码语言:javascript
复制
if __name__ == "__main__":
    if len(sys.argv) < 2:
        print >> sys.stderr, "usage %s <filename>" % sys.argv[0]
        sys.exit(1)

    Gst.init(None)
    GObject.threads_init()

    discoverer = GstPbutils.Discoverer()
    discoverer.connect('discovered', on_discovered)
    info = discoverer.discover_uri(sys.argv[1])

    # video info
    print '# video'
    for vinfo in info.get_video_streams():
        print vinfo.get_caps().to_string().replace(', ', '\n\t')

    # audio info
    print '# audio'
    for ainfo in info.get_audio_streams():
        print ainfo.get_caps().to_string().replace(', ', '\n\t')

使用它,我可以获得如下输出

代码语言:javascript
复制
$ python source.py 'file:///home/gipi/Videos/Adventure Time - Season 2/Adventure time - 1x24 - Heat Signature.mp4'
# video
video/x-h264
        stream-format=(string)avc
        alignment=(string)au
        level=(string)4.1
        profile=(string)high
        codec_data=(buffer)01640029ffe1001967640029ac5208014016ec04400000fa40002ee023c60c626001000668e88ecb22c0
        width=(int)1280
        height=(int)720
        framerate=(fraction)24000/1001
        pixel-aspect-ratio=(fraction)1/1
        parsed=(boolean)true
# audio
audio/mpeg
        mpegversion=(int)4
        framed=(boolean)true
        stream-format=(string)raw
        level=(string)2
        base-profile=(string)lc
        profile=(string)lc
        codec_data=(buffer)1190
        rate=(int)48000
        channels=(int)2

文档有点棘手,因为各种数据类型都没有明确定义(例如GstDiscovererAudioInfo);顺便说一下,您可以找到一些文档here

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11324519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档