某些MP3上的id3demux“流媒体任务已暂停,原因未链接(-1)”

时间:2014-07-08 20:22:49

标签: python-2.7 gstreamer python-gstreamer

我在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标签。 所以我用audio/mpeg, mpegversion=1, layer=3替换了大写过滤器(id3demux),某些MP3上出现错误:" streaming task paused, reason not-linked (-1)"。

identityqueue放在前面并链接到它们对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会有所帮助,但我从未获得过标记。

1 个答案:

答案 0 :(得分:2)

我最终诉诸playbin2。它设法构建一个工作流水线,以某种方式发送标签消息。