[Bug 646012] New: unable to mux h.264 live stream buffers produced by flvdemux
GStreamer (bugzilla.gnome.org)
bugzilla at gnome.org
Mon Mar 28 13:40:08 PDT 2011
https://bugzilla.gnome.org/show_bug.cgi?id=646012
GStreamer | gst-plugins-good | 0.10.25
Summary: unable to mux h.264 live stream buffers produced by
flvdemux
Classification: Platform
Product: GStreamer
Version: 0.10.25
OS/Version: Linux
Status: UNCONFIRMED
Severity: normal
Priority: Normal
Component: gst-plugins-good
AssignedTo: gstreamer-bugs at lists.freedesktop.org
ReportedBy: gnome at tibit.com
QAContact: gstreamer-bugs at lists.freedesktop.org
GNOME target: ---
GNOME version: ---
I have a pipeline that demuxes h.264 from a live rtmp stream into an mp4
container. It works fine with my lower-bitrate base-profile streams, but
chokes on my high-profile stream, apparently because qtmux isn't getting the
buffer durations it needs. This stream plays just fine if I pipe it into a
decoder and imagesink, but qtmux fails:
gst-launch -e rtmpsrc location=rtmp://mystream ! flvdemux name=demux
demux.video ! queue max-size-time=5000000000 max-size-buffers=0 ! h264parse !
mp4mux ! filesink location=foo.mp4
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
ERROR: from element /GstPipeline:pipeline0/GstMP4Mux:mux: Could not multiplex
stream. Additional debug info: gstqtmux.c(1802): gst_qt_mux_add_buffer ():
/GstPipeline:pipeline0/GstMP4Mux:mux: Received buffer without
timestamp/duration.
Execution ended after 3092134 ns.
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
Using fakesink -v reveals that buffers produced by flvdemux have no duration:
gst-launch -e rtmpsrc location=rtmp://mystream ! flvdemux name=demux
demux.video ! queue max-size-time=5000000000 max-size-buffers=0 ! h264parse !
fakesink -v
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstFlvDemux:demux.GstPad:video: caps = video/x-h264,
pixel-aspect-ratio=(fraction)1/1,
codec_data=(buffer)0164001fffe100196764001facec05005bb0110000030001773594000f1831380001000468eaef2c
/GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = video/x-h264,
pixel-aspect-ratio=(fraction)1/1,
codec_data=(buffer)0164001fffe100196764001facec05005bb0110000030001773594000f1831380001000468eaef2c
/GstPipeline:pipeline0/GstQueue:queue0.GstPad:src: caps = video/x-h264,
pixel-aspect-ratio=(fraction)1/1,
codec_data=(buffer)0164001fffe100196764001facec05005bb0110000030001773594000f1831380001000468eaef2c
/GstPipeline:pipeline0/GstQueue:queue0.GstPad:src: caps = video/x-h264,
pixel-aspect-ratio=(fraction)1/1,
codec_data=(buffer)0164001fffe100196764001facec05005bb0110000030001773594000f1831380001000468eaef2c
/GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:sink: caps =
video/x-h264, pixel-aspect-ratio=(fraction)1/1,
codec_data=(buffer)0164001fffe100196764001facec05005bb0110000030001773594000f1831380001000468eaef2c
/GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:src: caps = video/x-h264,
pixel-aspect-ratio=(fraction)1/1,
codec_data=(buffer)0164001fffe100196764001facec05005bb0110000030001773594000f1831380001000468eaef2c,
width=(int)1280, height=(int)720, stream-format=(string)avc,
alignment=(string)au
/GstPipeline:pipeline0/GstFakeSink:fakesink0.GstPad:sink: caps = video/x-h264,
pixel-aspect-ratio=(fraction)1/1,
codec_data=(buffer)0164001fffe100196764001facec05005bb0110000030001773594000f1831380001000468eaef2c,
width=(int)1280, height=(int)720, stream-format=(string)avc,
alignment=(string)au
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = "preroll *******
"
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = "event ******* E
(type: 118, taglist, video-codec=(string)\"H.264/AVC\\ Video\";) 0x89ee6c8"
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = "event ******* E
(type: 102, GstEventNewsegment, update=(boolean)false, rate=(double)1,
applied-rate=(double)1, format=(GstFormat)GST_FORMAT_TIME,
start=(gint64)33000000, stop=(gint64)-1, position=(gint64)33000000;) 0x89ee6f0"
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = "chain ******* <
(21852 bytes, timestamp: 0:00:00.033000000, duration: none, offset: 0,
offset_end: 1, flags: 33) 0x8b6f730"
New clock: GstSystemClock
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = "chain ******* <
(21852 bytes, timestamp: 0:00:01.165000000, duration: none, offset: 1,
offset_end: 2, flags: 1) 0x8b6f410"
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = "chain ******* <
(13453 bytes, timestamp: 0:00:01.199000000, duration: none, offset: 2,
offset_end: 3, flags: 1) 0x8b6f5f0"
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = "chain ******* <
(11798 bytes, timestamp: 0:00:01.232000000, duration: none, offset: 3,
offset_end: 4, flags: 1) 0x8b6f818"
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = "chain ******* <
(10086 bytes, timestamp: 0:00:01.265000000, duration: none, offset: 4,
offset_end: 5, flags: 1) 0x8b6f908"
[...snip...]
I get the same failed result with and without h264parse.
fraxinas and MikeS on #gstreamer suggested that I file a bug report, and that
making flvdemux or h264parse produce the missing durations might be trivial for
someone familiar with writing gstreamer plugins.
--
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.
More information about the gstreamer-bugs
mailing list