GNOME Bugzilla – Bug 397219
[rmdemux] captured realaudio stream with non-zero start plays as silence
Last modified: 2007-05-16 19:08:50 UTC
Please describe the problem: I captured the attached realaudio stream, but playing it back with playbin doesn't output any audio, only silence. Mplayer takes about 16 seconds to play the whole clip, but gst-launch seems to hang indefinitely after outputting the following info to the console. Steps to reproduce: Actual results: Setting pipeline to PAUSED ... /playbin0/decodebin0/typefind.src: caps = application/vnd.rn-realmedia Pipeline is PREROLLING ... FOUND TAG : found by element "rmdemux0". title: Radio Oxford artist: BBC copyright: (C) British Broadcasting Corporation 2006 FOUND TAG : found by element "rmdemux0". audio codec: Real Audio G2 (Cook) /playbin0/selector_audio_src0: active-pad = "sink0" /playbin0/decodebin0/queue0.sink: caps = audio/x-pn-realaudio, raversion=(int)8, flavor=(int)5, rate=(int)44100, channels=(int)1, width=(int)16, leaf_size=(int)128, packet_size=(int)640, height=(int)16, codec_data=(buffer)010000020400002f /playbin0/decodebin0/queue0.src: caps = audio/x-pn-realaudio, raversion=(int)8, flavor=(int)5, rate=(int)44100, channels=(int)1, width=(int)16, leaf_size=(int)128, packet_size=(int)640, height=(int)16, codec_data=(buffer)010000020400002f /playbin0/decodebin0/ffdec_cook0.sink: caps = audio/x-pn-realaudio, raversion=(int)8, flavor=(int)5, rate=(int)44100, channels=(int)1, width=(int)16, leaf_size=(int)128, packet_size=(int)640, height=(int)16, codec_data=(buffer)010000020400002f /playbin0/decodebin0/ffdec_cook0.src: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 /playbin0/selector_audio_src0.sink0: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 /playbin0/decodebin0.src0: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 /playbin0/decodebin0.src0.proxypad1: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 /playbin0/selector_audio_src0.src: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 /playbin0/preroll_audio_src0.sink: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 /playbin0/preroll_audio_src0.src: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 /playbin0/abin/aconv.src: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 /playbin0/abin/aconv.sink: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 /playbin0/abin.sink: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 /playbin0/abin.sink: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 /playbin0/abin.sink.proxypad3: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 /playbin0/abin/aresample.src: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 /playbin0/abin/aresample.sink: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 /playbin0/abin/volume.src: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 /playbin0/abin/volume.sink: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 /playbin0/abin/audiosink/audiosink-actual-sink-alsa.sink: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 /playbin0/abin/audiosink.sink: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 /playbin0/abin/audiosink.sink: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 /playbin0/abin/audiosink.sink.proxypad2: caps = audio/x-raw-int, rate=(int)44100, channels=(int)1, signed=(boolean)true, endianness=(int)1234, width=(int)16, depth=(int)16 Pipeline is PREROLLED ... Setting pipeline to PLAYING ... New clock: audioclock0 [ hang ] Expected results: Does this happen every time? Other information:
Created attachment 80382 [details] clip from the captured stream
Looks like a newsegment-event/timestamping issue: fakesink: GstEventNewsegment, format=(GstFormat)GST_FORMAT_TIME, start=(gint64)0, ... fakesink: 10240 bytes, timestamp: 8:29:54.303000000, duration: none fakesink: 10240 bytes, timestamp: 8:29:56.160000000, duration: none fakesink: 10240 bytes, timestamp: 8:29:58.015000000, duration: none So playback should start after about eight and a half hours if you are inclined to wait for that long :)
Neither the PROP nor the MDPR chunk seem to contain anything useful here (stream_start is 0, preroll is 4.6 seconds).
This should work now with rmdemux from CVS. Sorry it took so long to get fixed: 2007-05-16 Tim-Philipp Müller <tim at centricular dot net> * gst/realmedia/rmdemux.c: (gst_rmdemux_init), (gst_rmdemux_sink_event), (gst_rmdemux_perform_seek), (gst_rmdemux_reset), (gst_rmdemux_chain), (gst_rmdemux_add_stream), (gst_rmdemux_parse_packet): * gst/realmedia/rmdemux.h: Remember first timestamp encountered in stream and re-timestamp stream to start from zero (fixes #397219); only send one newsegment event, not two; when seeking, send newsegment events from the streaming thread and not from the seeking thread.