0

我正在 Python-GStreamer 中创建一个播放器,在一个相当过时的 GStreamer 0.10.32 上,如下所示:

import pygst
pygst.require("0.10")
import gst
import gobject

self.__player = gst.parse_launch(
    'filesrc name="source" location="/file/here.mp3" '
    '! audio/mpeg, mpegversion=1, layer=3 '
    '! ffdec_mp3 '
    '! audioconvert ! audioresample ! volume name="vol" '
    '! alsasink name="sink" sync=false')

它工作正常,但我从来没有从玩家的总线上收到标签消息。我确实需要 id3 标签。因此,我将 caps filter ( audio/mpeg, mpegversion=1, layer=3)替换为id3demux,并且某些 MP3 上出现错误:“ streaming task paused, reason not-linked (-1)”。

identity将or放在queue前面并链接到它们对 . 没有帮助id3demux

出于某种原因,mad元素在我的平台上不可用。

为什么我的第二个替换不起作用,或者还有其他方法可以从流中获取 id3 标签?

编辑:显然,这是由特定文件引起的。还不知道这些 MP3 有什么特别之处。当我简单地使用gst-launch.

使用 GST_DEBUG=2,我得到:

0:00:00.046048767 32720      0x22388a0 WARN                tagdemux gsttagdemux.c:680:gst_tag_demux_chain:<id3demux0> Downstream did not handle newsegment event as it should
0:00:00.046096615 32720      0x22388a0 WARN                 basesrc gstbasesrc.c:2625:gst_base_src_loop:<source> error: Internal data flow error.
0:00:00.046106087 32720      0x22388a0 WARN                 basesrc gstbasesrc.c:2625:gst_base_src_loop:<source> error: streaming task paused, reason not-linked (-1)

id3demux用大写过滤器替换会有所帮助,但那时我从来没有得到标签。

4

1 回答 1

2

我最终诉诸于playbin2. 它设法构建了一个工作管道,以某种方式发送标签消息。

于 2014-07-11T12:02:33.357 回答