GNOME Bugzilla – Bug 599266
Requires restart after installing codecs
Last modified: 2009-11-11 05:20:14 UTC
To reproduce: 1. Make sure that gstreamer-plugins-bad is not installed 2. Open totem with a MPEG4 audio file, i.e.: $ totem test.m4a 3. Install gstreamer-plugins-bad Expected result: Audio file plays once codec is installed Observed result: The following error is displayed and the file does not play: An error occurred The playback of this movie requires a MPEG-4 AAC decoder plugin which is not installed. The file plays if you close totem and start it again. (tested on Ubuntu 9.10) Occurs in 2.27 onwards (including git master). Does not occur in 2.26.4.
What's the debug output when installing that file?
bob@alchemy2:~$ totem --debug /media/sda2/Documents\ and\ Settings/Robert\ Ancell/My\ Documents/My\ Music/iTunes/iTunes\ Music/AIR/Pocket\ Symphony/01\ Space\ Maker.m4a sic/AIR/Pocket\ Symphony/01\ Space\ M** Message: Error: Your GStreamer installation is missing a plug-in. gstdecodebin2.c(2449): gst_decode_bin_expose (): /GstPlayBin2:play/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20: no suitable plugins found ** Message: Missing plugin: gstreamer|0.10|totem|MPEG-4 AAC decoder|decoder-audio/mpeg, mpegversion=(int)4, framed=(boolean)true (MPEG-4 AAC decoder) /usr/lib/python2.6/dist-packages/GnomeCodecInstall/MainWindow.py:300: DeprecationWarning: Accessed deprecated property Package.candidateRecord, please see the Version class for alternatives. record = pkg.candidateRecord /usr/lib/python2.6/dist-packages/GnomeCodecInstall/MainWindow.py:305: DeprecationWarning: Accessed deprecated property Package.candidateRecord, please see the Version class for alternatives. major, minor = pkg.candidateRecord["Gstreamer-Version"].split(".") ** Message: Missing plugins installed. Updating plugin registry ... ** Message: Plugin registry updated, trying again. ** Message: Missing plugin: gstreamer|0.10|totem|MPEG-4 AAC decoder|decoder-audio/mpeg, mpegversion=(int)4, framed=(boolean)true (ignoring) ** Message: All missing plugins are blacklisted, doing nothing ** Message: Error: Your GStreamer installation is missing a plug-in. gstdecodebin2.c(2449): gst_decode_bin_expose (): /GstPlayBin2:play/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin21: no suitable plugins found ** Message: Missing plugin: gstreamer|0.10|totem|MPEG-4 AAC decoder|decoder-audio/mpeg, mpegversion=(int)4, framed=(boolean)true (ignoring) ** Message: All missing plugins are blacklisted, doing nothing
Created attachment 146070 [details] Test program to try and get plugin install to work This program also fails to play, I was trying to find what is required to continue a stream that requires a codec
Could you attach (or make available otherwise if too big) a GST_DEBUG log please, like: $ GST_DEBUG=*:5 totem foo.m4a 2>dbg.log $ bzip2 dbg.log
Created attachment 146470 [details] Gstreamer log of installing codec required to play (part 1)
Created attachment 146471 [details] Gstreamer log of installing codec required to play (part 2)
Was reported on Fedora as well, with both Rhythmbox and Totem: https://bugzilla.redhat.com/show_bug.cgi?id=533544
The problem here most probably is, that decodebin2 gets the factories from the registry a single time: at instantiation. Instead it should do that everytime when going NULL->READY IMO. Not sure if playbin2 or uridecodebin keeps a list of factories but if they do the same applies ;) And then totem/RB should set playbin2 to NULL after the plugins were installed and then back to PLAYING.
Of course changing decodebin2 to update the factories everytime when going NULL->READY is a performance problem with latest totem because it always goes back to NULL after every track (see bug #599478). Does anybody have better ideas? Signals in GstRegistry maybe? :)
(In reply to comment #9) > Does anybody have better ideas? Signals in GstRegistry maybe? :) Which would be "feature-added" then and exists already... not sure if that's better though because it's triggered for every single feature that is added/updated.
We could add a cookie that is updated when the registry list changes, decodebin/playbin would then rebuild its list when it sees that the cookie changed since the last snapshot.
(In reply to comment #11) > We could add a cookie that is updated when the registry list changes, > decodebin/playbin would then rebuild its list when it sees that the cookie > changed since the last snapshot. This cookie is already in the instance private data, we could simply export it (or emulate it by having our own cookie in decodebin2 that changes everytime feature-added is emitted). So you would do it always in NULL->READY if that cookie has changed? Or something else?
I would export it with a simple getter or something, and then always recheck in NULL->READY.
(In reply to comment #13) > I would export it with a simple getter or something, and then always recheck in > NULL->READY. Ok, I'll do that later then. Sounds good
commit bbb4210738306e0533ee6227e51a489f5dc16d10 Author: Sebastian Dröge <sebastian.droege@collabora.co.uk> Date: Tue Nov 10 18:13:25 2009 +0100 playback: When going from NULL->READY check if the registry has new features This makes it possible to use newly installed plugins after going back to NULL instead of requiring a new instance. Fixes bug #599266.