GNOME Bugzilla – Bug 589204
playbin2 does not use sufficiently large queues for dvbsrc
Last modified: 2011-08-16 09:40:15 UTC
Please describe the problem: I have a sample mpeg transport stream from Australian HDTV (1080i channel). It is available currently at: http://www.physics.uq.edu.au/people/lund/temp.ts This file was generated using gst-launch dvbbasebin options=blah ! filesink location=temp.ts Playing this using playbin does not work. There is no output at all. Steps to reproduce: 1. Either download the file or get a dvb tuner to generate a mpeg TS as above 2. Play the file using playbin Actual results: No output at all. No video or audio. Expected results: Playback of video and audio Does this happen every time? Yes. But tested only against current git. Other information: The output of gst-launch -v is below. It stops at the bottom line and no output is produced. $ gst-launch -v playbin uri=file:///home/lund/Desktop/temp.ts Setting pipeline to PAUSED ... /GstPlayBin:playbin0/GstDecodeBin:decodebin0/GstTypeFindElement:typefind.GstPad:src: caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188 /GstPlayBin:playbin0/GstDecodeBin:decodebin0/GstMpegTSDemux:mpegtsdemux0.GstPad:sink: caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188 /GstPlayBin:playbin0/GstDecodeBin:decodebin0/GstMpegTSDemux:mpegtsdemux0: pat-info = ((GValueArray*) 0xa09540) /GstPlayBin:playbin0/GstDecodeBin:decodebin0/GstMpegTSDemux:mpegtsdemux0: pmt-info = ((MpegTsPmtInfo*) 0x9f5430) ** Message: don't know how to handle private/teletext Pipeline is PREROLLING ... /GstPlayBin:playbin0/GstDecodeBin:decodebin0/GstQueue:queue0.GstPad:sink: caps = audio/x-ac3 /GstPlayBin:playbin0/GstDecodeBin:decodebin0/GstQueue:queue0.GstPad:src: caps = audio/x-ac3 /GstPlayBin:playbin0/GstDecodeBin:decodebin0/GstA52Dec:a52dec0.GstPad:sink: caps = audio/x-ac3 /GstPlayBin:playbin0/GstDecodeBin:decodebin0.GstGhostPad:src0: caps = audio/x-raw-float, endianness=(int)1234, width=(int)32, channels=(int)2, rate=(int)48000, channel-positions=(GstAudioChannelPosition)< GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT > /GstPlayBin:playbin0/GstDecodeBin:decodebin0/GstA52Dec:a52dec0.GstPad:src: caps = audio/x-raw-float, endianness=(int)1234, width=(int)32, channels=(int)2, rate=(int)48000, channel-positions=(GstAudioChannelPosition)< GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT > /GstPlayBin:playbin0/GstDecodeBin:decodebin0/GstQueue:queue2.GstPad:sink: caps = video/mpeg, mpegversion=(int)2, systemstream=(boolean)false /GstPlayBin:playbin0/GstDecodeBin:decodebin0/GstQueue:queue2.GstPad:src: caps = video/mpeg, mpegversion=(int)2, systemstream=(boolean)false /GstPlayBin:playbin0/GstDecodeBin:decodebin0/MpegVideoParse:mpegvideoparse0.GstPad:sink: caps = video/mpeg, mpegversion=(int)2, systemstream=(boolean)false /GstPlayBin:playbin0/GstDecodeBin:decodebin0/MpegVideoParse:mpegvideoparse0.GstPad:src: caps = video/mpeg, systemstream=(boolean)false, parsed=(boolean)true, mpegversion=(int)2, width=(int)1440, height=(int)1080, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)4/3, interlaced=(boolean)true, codec_data=(buffer)000001b35a043833dbba2a021020205620568c8c8c8c8c8cd4b0d4e6e6e6d4d4d4d4e6e6e70b0b0b6565650b0b0ae6e70b0b414165659bad9b77776577adadd1d1d1ffffffffffffffffffff1019192222222b2b2b2b34343434343d3d3d3d3d3d464646464646464f4f4f4f4f4f4f4f58585861585858616a6a6a6a6173737373737c7c7c7c8e8e8e9797a9000001b51442000100000000 /GstPlayBin:playbin0/GstDecodeBin:decodebin0/GstMpeg2dec:mpeg2dec0.GstPad:sink: caps = video/mpeg, systemstream=(boolean)false, parsed=(boolean)true, mpegversion=(int)2, width=(int)1440, height=(int)1080, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)4/3, interlaced=(boolean)true, codec_data=(buffer)000001b35a043833dbba2a021020205620568c8c8c8c8c8cd4b0d4e6e6e6d4d4d4d4e6e6e70b0b0b6565650b0b0ae6e70b0b414165659bad9b77776577adadd1d1d1ffffffffffffffffffff1019192222222b2b2b2b34343434343d3d3d3d3d3d464646464646464f4f4f4f4f4f4f4f58585861585858616a6a6a6a6173737373737c7c7c7c8e8e8e9797a9000001b51442000100000000 /GstPlayBin:playbin0/GstStreamSelector:selector_audio_src0.GstSelectorPad:sink0: caps = audio/x-raw-float, endianness=(int)1234, width=(int)32, channels=(int)2, rate=(int)48000, channel-positions=(GstAudioChannelPosition)< GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT > /GstPlayBin:playbin0/GstDecodeBin:decodebin0.GstGhostPad:src0.GstProxyPad:proxypad1: caps = audio/x-raw-float, endianness=(int)1234, width=(int)32, channels=(int)2, rate=(int)48000, channel-positions=(GstAudioChannelPosition)< GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT > /GstPlayBin:playbin0/GstStreamSelector:selector_audio_src0.GstPad:src: caps = audio/x-raw-float, endianness=(int)1234, width=(int)32, channels=(int)2, rate=(int)48000, channel-positions=(GstAudioChannelPosition)< GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT > /GstPlayBin:playbin0/GstQueue:preroll_audio_src0.GstPad:sink: caps = audio/x-raw-float, endianness=(int)1234, width=(int)32, channels=(int)2, rate=(int)48000, channel-positions=(GstAudioChannelPosition)< GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT > /GstPlayBin:playbin0/GstDecodeBin:decodebin0.GstGhostPad:src1: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)1440, height=(int)1080, pixel-aspect-ratio=(fraction)4/3, framerate=(fraction)25/1, interlaced=(boolean)true /GstPlayBin:playbin0/GstDecodeBin:decodebin0/GstMpeg2dec:mpeg2dec0.GstPad:src: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)1440, height=(int)1080, pixel-aspect-ratio=(fraction)4/3, framerate=(fraction)25/1, interlaced=(boolean)true /GstPlayBin:playbin0/GstDecodeBin:decodebin0/GstQueue:queue2: max-size-bytes = 262016 /GstPlayBin:playbin0/GstDecodeBin:decodebin0/GstQueue:queue2: max-size-bytes = 524032 /GstPlayBin:playbin0/GstDecodeBin:decodebin0/GstQueue:queue2: max-size-bytes = 1048064 /GstPlayBin:playbin0/GstDecodeBin:decodebin0/GstQueue:queue2: max-size-bytes = 2193212 /GstPlayBin:playbin0/GstDecodeBin:decodebin0/GstQueue:queue2: max-size-bytes = 3303440 /GstPlayBin:playbin0/GstDecodeBin:decodebin0/GstQueue:queue2: max-size-bytes = 4393216 /GstPlayBin:playbin0/GstDecodeBin:decodebin0/GstQueue:queue2: max-size-bytes = 5469220 /GstPlayBin:playbin0/GstStreamSelector:selector_audio_src0: active-pad = (GstSelectorPad) sink0 /GstPlayBin:playbin0/GstStreamSelector:selector_video_src1: active-pad = (GstSelectorPad) sink0 /GstPlayBin:playbin0/GstQueue:preroll_audio_src0.GstPad:src: caps = audio/x-raw-float, endianness=(int)1234, width=(int)32, channels=(int)2, rate=(int)48000, channel-positions=(GstAudioChannelPosition)< GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT > /GstPlayBin:playbin0/GstBin:abin/GstAudioConvert:aconv.GstPad:src: caps = audio/x-raw-float, endianness=(int)1234, width=(int)32, channels=(int)2, rate=(int)48000, channel-positions=(GstAudioChannelPosition)< GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT > /GstPlayBin:playbin0/GstBin:abin/GstAudioConvert:aconv.GstPad:sink: caps = audio/x-raw-float, endianness=(int)1234, width=(int)32, channels=(int)2, rate=(int)48000, channel-positions=(GstAudioChannelPosition)< GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT > /GstPlayBin:playbin0/GstBin:abin.GstGhostPad:sink: caps = audio/x-raw-float, endianness=(int)1234, width=(int)32, channels=(int)2, rate=(int)48000, channel-positions=(GstAudioChannelPosition)< GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT > /GstPlayBin:playbin0/GstBin:abin.GstGhostPad:sink.GstProxyPad:proxypad4: caps = audio/x-raw-float, endianness=(int)1234, width=(int)32, channels=(int)2, rate=(int)48000, channel-positions=(GstAudioChannelPosition)< GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT > /GstPlayBin:playbin0/GstBin:abin/GstAudioResample:aresample.GstPad:src: caps = audio/x-raw-float, endianness=(int)1234, width=(int)32, channels=(int)2, rate=(int)48000, channel-positions=(GstAudioChannelPosition)< GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT > /GstPlayBin:playbin0/GstBin:abin/GstAudioResample:aresample.GstPad:sink: caps = audio/x-raw-float, endianness=(int)1234, width=(int)32, channels=(int)2, rate=(int)48000, channel-positions=(GstAudioChannelPosition)< GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT > /GstPlayBin:playbin0/GstBin:abin/GstVolume:volume.GstPad:src: caps = audio/x-raw-float, endianness=(int)1234, width=(int)32, channels=(int)2, rate=(int)48000, channel-positions=(GstAudioChannelPosition)< GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT > /GstPlayBin:playbin0/GstBin:abin/GstVolume:volume.GstPad:sink: caps = audio/x-raw-float, endianness=(int)1234, width=(int)32, channels=(int)2, rate=(int)48000, channel-positions=(GstAudioChannelPosition)< GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT > /GstPlayBin:playbin0/GstBin:abin/GstAutoAudioSink:audiosink/GstPulseSink:audiosink-actual-sink-pulse.GstPad:sink: caps = audio/x-raw-float, endianness=(int)1234, width=(int)32, channels=(int)2, rate=(int)48000, channel-positions=(GstAudioChannelPosition)< GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT > /GstPlayBin:playbin0/GstBin:abin/GstAutoAudioSink:audiosink.GstGhostPad:sink: caps = audio/x-raw-float, endianness=(int)1234, width=(int)32, channels=(int)2, rate=(int)48000, channel-positions=(GstAudioChannelPosition)< GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT > /GstPlayBin:playbin0/GstBin:abin/GstAutoAudioSink:audiosink.GstGhostPad:sink.GstProxyPad:proxypad3: caps = audio/x-raw-float, endianness=(int)1234, width=(int)32, channels=(int)2, rate=(int)48000, channel-positions=(GstAudioChannelPosition)< GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT > /GstPlayBin:playbin0/GstQueue:preroll_audio_src0: min-threshold-time = 900000000
I think I've isolated the problem to dvbsrc. I'm able to make it work when a stream from dvbsrc is saved to file then played back from the file.
Created attachment 163039 [details] Output from playbin2 and GST_DEBUG=dvbsrc:4,queue:4,queue_dataflow:4 I think I've narrowed it down to problems with queue max sizes. Blocking the dvb source is bad. The following pipeline works (it follows the example from gstdvbsrc.c): gst-launch -v dvbsrc frequency=219500000 modulation=3 trans-mode=8k bandwidth=7 code-rate-lp=3/4 ! mpegtsparse ! mpegtsdemux name=ts program-number=1607 ! queue max-size-buffers=0 max-size-time=0 ! video/mpeg ! mpegvideoparse ! ffdec_mpeg2video ! xvimagesink ts. ! queue max-size-buffers=0 max-size-time=0 ! audio/x-ac3 ! ac3parse ! decodebin ! pulsesink playbin2 seems to place the queues in the wrong place and not ensure that there is sufficient space to avoid blocking.
The above pipeline allows for the stream to play but is unsynchronised due to bug 618336.
This seems to work now in current git. The only significant difference I can see in the output is that there is now queues called "aqueue" and "vqueue" which seem to have some extra output when initialising.
Ok so this bug can be closed now?
Created attachment 183699 [details] Output from git 2011-03-18 playbin2 and GST_DEBUG=dvbsrc:4,queue:4,queue_dataflow:4 OK. Strange. I confused myself. The file plays but when playing from the dvb source it doesn't. However, it does work with playbin, but not playbin2.
playbin(2) uses dvbbasebin instead of dvbsrc, does it work if you use that instead of dvbsrc in your manual pipeline?
Austin, can you please respond to the comment#7 ?
Closing this bug report as no further information has been provided. Please feel free to reopen this bug if you can provide the information asked for. Thanks!