GNOME Bugzilla – Bug 632788
[playbin2] Doesn't support files with a streams that are supported compressed by a sink and streams that need decoding
Last modified: 2011-06-15 17:42:50 UTC
Created attachment 172927 [details] pipeline graph root@dm8000:/media/hdd/movie/mkv# gst-launch playbin2 uri=file:///media/hdd/movie/mkv/Monster.Inc.mkv Setting pipeline to PAUSED ... Pipeline is PREROLLING ... ERROR: from element /GstPlayBin2:playbin20: Internal playbin error. Additional debug info: gstplaybin2.c(2773): no_more_pads_cb (): /GstPlayBin2:playbin20: Failed to link selector to sink. Error -2 ERROR: pipeline doesn't want to preroll. Setting pipeline to NULL ... (gst-launch-0.10:3019): GStreamer-CRITICAL **: gst_pad_unlink: assertion `GST_IS_PAD (sinkpad)' failed (gst-launch-0.10:3019): GStreamer-CRITICAL **: gst_pad_remove_event_probe: assertion `GST_IS_PAD (pad)' failed (gst-launch-0.10:3019): GStreamer-CRITICAL **: gst_pad_set_active: assertion `GST_IS_PAD (pad)' failed (gst-launch-0.10:3019): GStreamer-CRITICAL **: gst_element_remove_pad: assertion `GST_IS_PAD (pad)' failed Freeing pipeline ... mediainfo of the source file: General Complete name : Monster.Inc.mkv Format : Matroska File size : 39.8 MiB Duration : 1h 32mn Overall bit rate : 60.3 Kbps Encoded date : UTC 2009-06-07 23:59:56 Writing application : mkvmerge v2.7.0 ('Do It Again') built on Apr 15 2009 00:27:10 Writing library : libebml v0.7.7 + libmatroska v0.8.1 Video ID : 1 Format : AVC Format/Info : Advanced Video Codec Format profile : High@L4.1 Format settings, CABAC : Yes Format settings, ReFrames : 4 frames Muxing mode : Container profile=Unknown@4.1 Codec ID : V_MPEG4/ISO/AVC Duration : 1h 32mn Nominal bit rate : 9 861 Kbps Width : 1 920 pixels Height : 1 038 pixels Display aspect ratio : 1.850 Frame rate : 23.976 fps Resolution : 8 bits Colorimetry : 4:2:0 Scan type : Progressive Bits/(Pixel*Frame) : 0.206 Title : 9.8 Mbp/s AVC MPEG-4 Writing library : x264 core 67 r1163M 3f56e27 Encoding settings : cabac=1 / ref=4 / deblock=1:0:0 / analyse=0x3:0x113 / me=umh / subme=9 / psy_rd=0.2:0.0 / mixed_ref=1 / me_range=24 / chroma_me=1 / trellis=2 / 8x8dct=1 / cqm=0 / deadzone=21,11 / chroma_qp_offset=-1 / threads=6 / nr=0 / decimate=1 / mbaff=0 / bframes=9 / b_pyramid=1 / b_adapt=2 / b_bias=0 / direct=3 / wpredb=1 / keyint=250 / keyint_min=25 / scenecut=40 / rc=2pass / bitrate=9861 / ratetol=1.0 / qcomp=0.60 / qpmin=10 / qpmax=51 / qpstep=4 / cplxblur=20.0 / qblur=0.5 / vbv_maxrate=38000 / vbv_bufsize=38000 / ip_ratio=1.40 / pb_ratio=1.30 / aq=1:1.00 Language : German Audio #1 ID : 2 Format : DTS Format/Info : Digital Theater Systems Codec ID : A_DTS Duration : 1h 32mn Bit rate mode : Constant Bit rate : 754 Kbps Channel(s) : 6 channels Channel positions : Front: L C R, Side: L R, LFE Sampling rate : 48.0 KHz Resolution : 24 bits Stream size : 498 MiB Title : 5.1 DTS @ 768 kbp/s Language : German Audio #2 ID : 3 Format : DTS Format/Info : Digital Theater Systems Format profile : ES Codec ID : A_DTS Duration : 1h 32mn Bit rate mode : Constant Bit rate : 1 510 Kbps Channel(s) : 6 channels Channel positions : Front: L C R, Side: L R, LFE Sampling rate : 48.0 KHz Resolution : 24 bits Stream size : 996 MiB Title : 5.1 DTS @ 1536 kbp/s Language : English Audio #3 ID : 4 Format : Vorbis Format settings, Floor : 1 Codec ID : A_VORBIS Duration : 1h 32mn Bit rate mode : Constant Bit rate : 80.0 Kbps Channel(s) : 2 channels Sampling rate : 48.0 KHz Stream size : 52.8 MiB Title : 2.0 Vorbis @ 80 kbp/s Commentary Track Writing library : aoTuV b5c (UTC 2008-12-15) Language : English it tries linking the vorbisdec to dvbaudiosink which doesn't accept raw pcm input instead, it should create an alsasink for the vorbis stream (through an audioconvert element) and only direct the dts streams into dvbaudiosink source file available from ftp://test4711@82.149.226.170/mkv_dts_vorbis/Monster.Inc.mkv full logfile to be attached
Created attachment 172928 [details] full debug log GST_DEBUG=*:5 gst-launch playbin2 uri=file:///media/hdd/movie/mkv/Monster.Inc.mkv --gst-debug-no-color >632788_mkv_dts_vorbis.log 2>&1
Created attachment 172929 [details] gst-inspection of our sink elements source of the sink is available at http://schwerkraft.elitedvb.net/scm/viewvc.php/dvbmediasink/src/?root=dvbmediasink
ftp password is test4711
This patch takes care of one issue. Atleast on the pc this now plays. commit d466f07def637e6f6be8e1fb5ff2120ed5096ff9 Author: Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> Date: Mon Feb 14 17:49:54 2011 +0100 matroskademux: avoid sorting NULL array of cluster positions
I can switch the tracks fine now: libtool --mode=execute gdb --args ~/projects/gstreamer/gst-plugins-base/_debug/tests/examples/seek/seek 16 file:///home/ensonic/Videos/Monster.Inc.mkv
hi ensonic, unfortunately that didn't help. the latest fix by mark fixes a bug that was introduced after the release that i am using (now 0.10.32)
Created attachment 181232 [details] debug log GST_DEBUG_NO_COLOR=1 GST_DEBUG=*:5 gst-launch playbin2 uri=file:///hdd/movie/mkv/Monster.Inc.mkv > bug_632788_20110218.log 2>&1 with git checkout of core and base from today
Ok so this problem is actually quite simple. There's one audio stream that is supported by the sink without decoding and one that requires an decoder, playbin2 requests a raw audio sinkpad in playsink and then requests a non-raw audio sinkpad in playsink. Unfortunately playsink seems to assume that you either request a raw or a non-raw audio sinkpad and not both and then you get the same sinkpad in both cases, the second stream can't be linked and playbin2 errors out. So, IMHO this concept of having a raw sink and a non-raw sink for every stream type is wrong. It will, if implemented properly in playsink, require another selection mechanism in playsink while there's already a selection mechanism in playbin2. And inside playbin2 there's also differentiation between raw and non-raw streams... I guess playbin2 shouldn't really care about the raw'ness of streams and this should all be handled internally in playsink. Unfortunately this requires API changes to playsink and since a few releases playsink is a public element. Suggestions?
Patches for this and other issues are here: http://git.collabora.co.uk/?p=user/slomo/gst-plugins-base.git;a=shortlog;h=refs/heads/playbin2-compressed Would be great if people could test them, the changes are not really small :)
commit 2f8467d68249e8d1a28b7bbd9c53b56a8c26ba4b Author: Sebastian Dröge <sebastian.droege@collabora.co.uk> Date: Fri Mar 25 08:26:00 2011 +0100 playsink: Add audio and video converter convenience bins These reconfigure based on the caps and plugin in converters if necessary. This also makes switching between compressed and raw streams work flawlessly without loosing the states of any element somewhere or having running time problems. commit 105da803ade859fb299ed3c5265d6acdd168ca8f Author: Sebastian Dröge <sebastian.droege@collabora.co.uk> Date: Tue Mar 15 12:51:04 2011 +0100 playbin2/playsink: Decide if A/V caps are raw only inside playsink Before playbin2 would use different selectors for raw audio and compressed audio (and the same for video) and used different pads from playsink. This made the involved logic much more complex and was not implemented completely in playsink, which made it impossible to support files with a compressed and uncompressed stream that is support by the sink. playbin2 handles raw/non-raw streams the same now and the decision is left to playsink, which now can also handle caps changes from raw to non-raw and the other way around. Fixes bug #632788.