我正在 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
用大写过滤器替换会有所帮助,但那时我从来没有得到标签。