GNOME Bugzilla – Bug 653124
Broken progress bar in Amarok Music Player, using Phonon Gstreamer backend
Last modified: 2011-07-14 10:39:31 UTC
A problem, which according to the developers of Phonon is caused by 'the codec provided by Gstreamer' breaks seeking functionality in the Amarok music player from the KDE software suite. The bug is confirmed by several people. Details and links to the many duplicate bug reports can be found at https://bugs.kde.org/show_bug.cgi?id=237298 I'm afraid I know very little about gstreamer, so I can't be of much help at this point, but I'd be happy to provide some form of debugging output if anyone will talk me through it (I'm not massively linux-savvy). Searching for anything to do with amarok and gstreamer seems to suggest I'm the first to report this. Rob
What's the output of: $ gst-launch-0.10 -v playbin2 uri=file:///path/to/foo.mp3 ?
-------------------------------------------------------------------------------- rob@SCKubuntu:~$ gst-launch-0.10 -v playbin2 uri=file:///path/to/foo.mp3 Setting pipeline to PAUSED ... /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0: connection-speed = 0 /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0: download = FALSE /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0: uri = "file:///path/to/foo.mp3" /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0: use-buffering = FALSE /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0: buffer-duration = -1 /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0: buffer-size = -1 /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0: ring-buffer-max-size = 0 /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0: source = (GstFileSrc) source ERROR: Pipeline doesn't want to pause. ERROR: from element /GstURIDecodeBin:uridecodebin0/GstFileSrc:source: Resource not found. Additional debug info: gstfilesrc.c(1034): gst_file_src_start (): /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstFileSrc:source: No such file "/path/to/foo.mp3" Setting pipeline to NULL ... Freeing pipeline ... rob@SCKubuntu:~$ -------------------------------------------------------------------------------- Will try with a file that exists...
> Will try with a file that exists... That was the idea, yes :-)
I kinda guessed it was :-D Just wondered if foo.mp3 was a test file included for such purposes. Turns out it's not. Here's the output with an actual file: -------------------------------------------------------------------------------- rob@SCKubuntu:~$ gst-launch-0.10 -v playbin2 uri=file:///media/NTFSFTW/Music/Playlist/CDex/Gorillaz/Punk.mp3 Setting pipeline to PAUSED ... /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0: connection-speed = 0 /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0: download = FALSE /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0: uri = "file:///media/NTFSFTW/Music/Playlist/CDex/Gorillaz/Punk.mp3" /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0: use-buffering = FALSE /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0: buffer-duration = -1 /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0: buffer-size = -1 /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0: ring-buffer-max-size = 0 /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0: source = (GstFileSrc) source /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstTypeFindElement:typefind.GstPad:src: caps = application/x-id3 /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstID3Demux:id3demux0.GstPad:sink: caps = application/x-id3 Pipeline is PREROLLING ... /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstMpegAudioParse:mpegaudioparse0.GstPad:sink: caps = audio/mpeg, mpegversion=(int)1, layer=(int)3 /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstMpegAudioParse:mpegaudioparse0.GstPad:sink: caps = audio/mpeg, mpegversion=(int)1, layer=(int)3 /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstMpegAudioParse:mpegaudioparse0.GstPad:src: caps = audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2, parsed=(boolean)true /GstPlayBin2:playbin20/GstInputSelector:inputselector0.GstSelectorPad:sink0: always-ok = FALSE /GstPlayBin2:playbin20/GstInputSelector:inputselector0: active-pad = (GstSelectorPad) sink0 /GstPlayBin2:playbin20/GstInputSelector:inputselector0.GstSelectorPad:sink0: tags = ((GstTagList*) 0x13628d0) /GstPlayBin2:playbin20/GstInputSelector:inputselector0.GstSelectorPad:sink0: tags = ((GstTagList*) 0x1362590) /GstPlayBin2:playbin20/GstInputSelector:inputselector0.GstSelectorPad:sink0: tags = ((GstTagList*) 0x1517230) /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/FluMp3Dec:flump3dec0.GstPad:sink: caps = audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2, parsed=(boolean)true /GstPlayBin2:playbin20/GstInputSelector:inputselector0.GstSelectorPad:sink0: tags = ((GstTagList*) 0x15174d0) /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0.GstGhostPad:src0: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20.GstDecodePad:src0: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/FluMp3Dec:flump3dec0.GstPad:src: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstTee:audiotee: alloc-pad = (GstPad) src0 /GstPlayBin2:playbin20/GstInputSelector:inputselector0.GstSelectorPad:sink0: tags = ((GstTagList*) 0x12c16f0) /GstPlayBin2:playbin20/GstInputSelector:inputselector0.GstSelectorPad:sink0: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0.GstGhostPad:src0.GstProxyPad:proxypad6: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20.GstDecodePad:src0.GstProxyPad:proxypad5: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstInputSelector:inputselector0.GstPad:src: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstTee:audiotee.GstPad:sink: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstTee:audiotee.GstPad:src0: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstTee:audiotee.GstPad:sink: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstPlaySink:playsink0.GstGhostPad:audio_raw_sink: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstPlaySink:playsink0.GstGhostPad:audio_raw_sink.GstProxyPad:proxypad7: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstStreamSynchronizer:streamsynchronizer0.GstPad:sink_0: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstStreamSynchronizer:streamsynchronizer0.GstPad:src_0: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstQueue:aqueue.GstPad:sink: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin.GstGhostPad:sink: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin.GstGhostPad:sink.GstProxyPad:proxypad9: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstQueue:aqueue.GstPad:src: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstInputSelector:inputselector0.GstSelectorPad:sink0: tags = ((GstTagList*) 0x13628d0) /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstAudioConvert:aconv.GstPad:src: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstInputSelector:inputselector0.GstSelectorPad:sink0: tags = ((GstTagList*) 0x12c16f0) /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstAudioConvert:aconv.GstPad:sink: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstAudioResample:aresample.GstPad:src: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstAudioResample:aresample.GstPad:sink: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstInputSelector:inputselector0.GstSelectorPad:sink0: tags = ((GstTagList*) 0x7f79e4031d90) /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstAutoAudioSink:audiosink/GstPulseSink:audiosink-actual-sink-pulse.GstPad:sink: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstAutoAudioSink:audiosink.GstGhostPad:sink: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstAutoAudioSink:audiosink.GstGhostPad:sink.GstProxyPad:proxypad8: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2 Pipeline is PREROLLED ... Setting pipeline to PLAYING ... New clock: GstPulseSinkClock /GstPlayBin2:playbin20/GstPlaySink:playsink0: volume = 1.000000 /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstAutoAudioSink:audiosink/GstPulseSink:audiosink-actual-sink-pulse: volume = 1.000000 /GstPlayBin2:playbin20/GstPlaySink:playsink0: mute = FALSE /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstAutoAudioSink:audiosink/GstPulseSink:audiosink-actual-sink-pulse: mute = FALSE Got EOS from element "playbin20". Execution ended after 96268898445 ns. Setting pipeline to PAUSED ... Setting pipeline to READY ... /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstAutoAudioSink:audiosink/GstPulseSink:audiosink-actual-sink-pulse.GstPad:sink: caps = NULL /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstAutoAudioSink:audiosink.GstGhostPad:sink: caps = NULL /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstAudioResample:aresample.GstPad:src: caps = NULL /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstAudioResample:aresample.GstPad:sink: caps = NULL /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstAudioConvert:aconv.GstPad:src: caps = NULL /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstAudioConvert:aconv.GstPad:sink: caps = NULL /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstQueue:aqueue.GstPad:src: caps = NULL /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin/GstQueue:aqueue.GstPad:sink: caps = NULL /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstBin:abin.GstGhostPad:sink: caps = NULL /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstStreamSynchronizer:streamsynchronizer0.GstPad:sink_0: caps = NULL /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstStreamSynchronizer:streamsynchronizer0.GstPad:src_0: caps = NULL /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstTee:audiotee.GstPad:src0: caps = NULL /GstPlayBin2:playbin20/GstPlaySink:playsink0/GstTee:audiotee.GstPad:sink: caps = NULL /GstPlayBin2:playbin20/GstPlaySink:playsink0.GstGhostPad:audio_raw_sink: caps = NULL /GstPlayBin2:playbin20/GstInputSelector:inputselector0.GstSelectorPad:sink0: caps = NULL /GstPlayBin2:playbin20/GstInputSelector:inputselector0.GstPad:src: caps = NULL /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0.GstGhostPad:src0: caps = NULL /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20.GstDecodePad:src0: caps = NULL /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/FluMp3Dec:flump3dec0.GstPad:src: caps = NULL /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/FluMp3Dec:flump3dec0.GstPad:sink: caps = NULL /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstMpegAudioParse:mpegaudioparse0.GstPad:src: caps = NULL /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstMpegAudioParse:mpegaudioparse0.GstPad:sink: caps = NULL /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstID3Demux:id3demux0.GstPad:src: caps = NULL /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstID3Demux:id3demux0.GstPad:sink: caps = NULL /GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstTypeFindElement:typefind.GstPad:src: caps = NULL Setting pipeline to NULL ... Freeing pipeline ... rob@SCKubuntu:~$ -------------------------------------------------------------------------------- I hope that helps at all. I tried playing the same file in Amarok and the progress bar worked SOMETIMES. I click stop, wait a few seconds and click play, and I repeated the process about 10 times. About 40% of the time it works as expected. About 60% of the time it EITHER plays for the first 3 seconds without a progress bar, but then fixes itself (the bar suddenly appears correctly after 3 seconds) OR the progress bar doesn't function at all until the track is stopped and started again. Rob
IMHO this sounds more like a bug caused by incorrect usage of GStreamer in phonon. Can you check if you have the same problem when using totem for example?
It's difficult to say, as it's an intermittent bug anyway, I've played a few tracks for a few minutes, and so far no problem within totem. Switched to Amarok, still no problem. I'll wait until Amarok starts showing symptoms and then try totem.
What version of mpegaudioparse is this? gst-inspect-0.10 mpegaudioparse | grep Version There was a bug with the SEEKING query in baseparse/mpegaudioparse a while back, which also led to seeking in mp3 files not working in e.g. totem (it was racy, it would depend on whether mpegaudioparse had processed enough frames by the time the query was done just after the app was notified of the preroll).
0.10.21 Should the problem have been fixed in that version?
> 0.10.21 - Should the problem have been fixed in that version? No, it was only fixed in -bad 0.10.22 (but the plugin has since moved to -good). This looks like it might be a duplicate of bug #641047 then.
So presumably if I update my gst plugins, this should fix the problem? Or does amarok/phonon have to be recoded to check back again later for another seekable response? Can I check if this bug has been solved by upgrading my plugins?
Yes
will do so and get back to you on it
OK, with the default repositories, my Gstreamer is showing as up-to-date. Is there a PPA I can add, or will I have to install it manually somehow?
Yes, there's a GStreamer PPA for ubuntu.
OK, think I found it: ppa:gstreamer-developers/ppa I'll get the latest from there next time I'm at home and report after a few days' testing.
OK, well it seems to have improved, though I HAVEN'T TESTED THIS EXTENSIVELY. I seem only to get a non-functional progress bar with exceptionally long tracks (like one-track mix CDs), which wasn't the case before. Where there is a problem with these long files, it only seems to happen the first time I access the file, and it's not reproducible after that. In any case, it doesn't seem to be the same bug. Some of these tracks may have also been .wav files, which show as zero length in amarok for the present, but that's for another day and another bug. I'm setting this to solved for the time being and hoping the gstreamer updates will make their way downstream by at latest kubuntu 11.10. !!! Is there any way I can re-open this bug if I later find it's still there? !!! Rob
> Is there any way I can re-open this bug if I later find it's still there? Please just file a new bug then (with a reference to the number of this bug if you want). Thanks for testing!