Hello,
I'm having a lot of trouble getting any of the gstreamer muxers to work properly. Using ubuntu packages for now (eventually I'll need windows too). There seems to be some differences between 0.10 and 1.0 but I can't get either to really work. Sorry for the long post, I'm trying to include as many details as I can. Here are some examples: gst-launch-1.0 filesrc location=input.mp4 ! qtdemux ! h264parse ! mpegtsmux ! filesink location=output.ts Input is 75MB, output is 78MB. File does not play in VLC or Windows Media Player or ffplay. ffplay prints out a ton of "non-existing PPS referenced / non-existing PPS 0 referenced / decode_slice_header error / no frame!". The same pipeline, with gst-launch-0.10, outputs a file which plays in VLC and ffplay but not WMP. Another example: gst-launch-0.10 filesrc location=input.ts ! tsdemux ! h264parse ! ffdec_h264 ! ffmpegcolorspace ! videoscale ! autovideosink This plays fine. There is a slight delay at the beginning because the first keyframe is about a 1 second into the video. gstreamer 0.10, VLC, ffplay, WMP all behave the same way. BUT, if I use gstreamer 1.0, like this: gst-launch-1.0 filesrc location=input.ts ! tsdemux ! h264parse ! avdec_h264 ! videoconvert ! videoscale ! autovideosink Then it starts playing immediately, with the first second garbled. Another example: gst-launch-0.10 filesrc location=input.ts ! tsdemux ! h264parse ! video/x-h264, stream-format=avc, alignment=au, width=720, height=480, framerate=30/1 ! qtmux ! filesink location=output.mov I get the following error: ERROR: from element /GstPipeline:pipeline0/GstTSDemux:tsdemux0: Internal data stream error. Additional debug info: mpegtsbase.c(1639): mpegts_base_loop (): /GstPipeline:pipeline0/GstTSDemux:tsdemux0:stream stopped, reason not-negotiated ERROR: pipeline doesn't want to preroll. I looked in the debug output and I see: 0:00:00.535047886 9175 0x2737050 WARN qtmux gstqtmux.c:3098:gst_qt_mux_video_sink_set_caps:<qtmux0> no codec_data in h264 caps 0:00:00.535075250 9175 0x2737050 WARN qtmux gstqtmux.c:3251:gst_qt_mux_video_sink_set_caps:<qtmux0> pad video_00 refused caps video/x-h264, stream-format=(string)avc, alignment=(string)au, parsed=(boolean)true, width=(int)720, height=(int)480, framerate=(fraction)30/1 Why is the codec_data not set in the caps by the ts demuxer or the h264 parser? What can I do to retrieve the codec_data? With 1.0 I get a similar problem but it doesn't print out a warning about no codec_data... it does however have some other warnings like: 0:00:00.022590652 9201 0x1db4980 WARN GST_PADS gstpad.c:3582:gst_pad_peer_query:<capsfilter0:src> pad has no peer Setting pipeline to PAUSED ... 0:00:00.023023022 9201 0x1db4980 WARN GST_PADS gstpad.c:3582:gst_pad_peer_query:<h264parse0:sink> pad has no peer Pipeline is PREROLLING ... 0:00:00.024118386 9201 0x1dacd40 WARN mpegtsbase mpegtsbase.c:548:mpegts_base_program_add_stream: Stream already present ! 0:00:00.024235204 9201 0x1dacd40 WARN tsdemux tsdemux.c:1318:gst_ts_demux_queue_data: Didn't get the first packet of this PES /GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:sink: caps = video/x-h264, stream-format=(string)byte-stream, alignment=(string)nal 0:00:00.025333582 9201 0x1dacd40 WARN codecparsers_h264 gsth264parser.c:1106:gst_h264_parser_parse_pic_timing: didn't get the associated sequence paramater set for the current access unit 0:00:00.025368192 9201 0x1dacd40 WARN codecparsers_h264 gsth264parser.c:1154:gst_h264_parser_parse_pic_timing: error parsing "Picture timing" 0:00:00.025469794 9201 0x1dacd40 WARN codecparsers_h264 gsth264parser.c:1792:gst_h264_parser_parse_slice_hdr: couldn't find associated picture parameter set with id: 0 /GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:src: caps = video/x-h264, stream-format=(string)avc, alignment=(string)au, parsed=(boolean)true 0:00:00.025706252 9201 0x1dacd40 WARN mpegtsbase mpegtsbase.c:1639:mpegts_base_loop:<tsdemux0> error: Internal data stream error. 0:00:00.025724310 9201 0x1dacd40 WARN mpegtsbase mpegtsbase.c:1639:mpegts_base_loop:<tsdemux0> error: stream stopped, reason not-negotiated ERROR: from element /GstPipeline:pipeline0/GstTSDemux:tsdemux0: Internal data stream error. I also get the same error when trying to mux to avi, matroska. I *CAN* mux it into mpeg-ps, which works perfectly in WMP, VLC, etc. Recording from an rtsp stream has similar results - With 0.10, I can mux into mpegts using rtspsrc ! gstrtpjitterbuffer ! rtph264depay ! h264parse ! mpegtsmux ! filesink - the results are not playable in WMP, but are playable in ffmpeg and VLC. However, with 1.0, the results are not playable in anything - ffplay reports "Could not find codec parameters (Video: h264)" as well as a ton of non-existing PPS errors. Surprisingly, muxing rtsp -> mp4 gives a perfect video which can be played in WMP, VLC, ffplay... but I don't know why ts -> mp4 doesn't work like that? I thought as long as I had parsed h.264 video in the correct stream format and alignment, it should go into mp4/mov, ps, ts, avi, or mkv without issue. But it seems it sometimes needs more info - codec parameters? - and I can't figure out what to give it. I tried setting all the caps that the documentation says the muxers want, but they didn't mention anything about codec_params. So... anyone know what I'm missing? Alex |
Free forum by Nabble | Edit this page |