nvvp9dec: internal data flow problems causing issues with hlssink2 (warnings and criticals)
-
GStreamer:
1.20.5
- GPU: NVIDIA GeForce 1070
- OS: Manjaro Linux (arch based)
I have a pipeline that basically turns any input video file into a desired HLS output (via uridecodebin
and hlssink2
).
I encountered some issues with a specific video file that produces a broken HLS manifest (and maybe segments too) in regard to the targetDuration.
The troubling bit is that when End-Of-Stream is reached, hlssink2 seems to rewrite the playlist file and fixed the broken durations (matching the generated segments?).
That is why we might need to kill/interrupt the process before it reaches the EOS – The duration is still not the expected 4
for the segments after the rewrite.
Video file (removed all streams except the video stream and only kept the first 20 seconds): test.mkv
My simple command: gst-launch-1.0 filesrc location=./test.mkv ! matroskademux ! vp9parse ! nvvp9dec ! videoconvert ! autovideosink
My command using hlssink2
(kill/interrupt the process at ca. 70% progress): gst-launch-1.0 filesrc location=./test.mkv ! matroskademux ! vp9parse ! nvvp9dec ! videoconvert ! videorate ! video/x-raw,framerate=24/1 ! x264enc key-int-max=24 ! hlssink2 target-duration=4
**Using vp9dec
instead of nvvp9dec
gets rid of the warnings and issues (the output playlist.m3u8 properly generates with durations of 4 too).
The command using hlssink2
prints the following:
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Got context from element 'nvvp9dec0': gst.cuda.context=context, gst.cuda.context=(GstCudaContext)"\(GstCudaContext\)\ cudacontext0", cuda-device-id=(int)0;
Got context from element 'nvvp9dec0': gst.gl.GLDisplay=context, gst.gl.GLDisplay=(GstGLDisplay)"\(GstGLDisplayX11\)\ gldisplayx11-0";
Redistribute latency...
Redistribute latency...
(gst-launch-1.0:353098): GStreamer-WARNING **: 13:37:52.316: ../gstreamer/subprojects/gstreamer/gst/gstpad.c:4677:gst_pad_push_data:<nvvp9dec0:src> Got data flow before segment event
(gst-launch-1.0:353098): GStreamer-WARNING **: 13:37:52.316: ../gstreamer/subprojects/gstreamer/gst/gstpad.c:4416:gst_pad_chain_data_unchecked:<videoconvert0:sink> Got data flow before segment event
(gst-launch-1.0:353098): GStreamer-WARNING **: 13:37:52.316: ../gstreamer/subprojects/gstreamer/gst/gstpad.c:4677:gst_pad_push_data:<videoconvert0:src> Got data flow before segment event
(gst-launch-1.0:353098): GStreamer-WARNING **: 13:37:52.316: ../gstreamer/subprojects/gstreamer/gst/gstpad.c:4416:gst_pad_chain_data_unchecked:<videorate0:sink> Got data flow before segment event
(gst-launch-1.0:353098): GStreamer-WARNING **: 13:37:52.319: ../gstreamer/subprojects/gstreamer/gst/gstpad.c:4677:gst_pad_push_data:<videorate0:src> Got data flow before segment event
(gst-launch-1.0:353098): GStreamer-WARNING **: 13:37:52.319: ../gstreamer/subprojects/gstreamer/gst/gstpad.c:4416:gst_pad_chain_data_unchecked:<capsfilter0:sink> Got data flow before segment event
(gst-launch-1.0:353098): GStreamer-WARNING **: 13:37:52.319: ../gstreamer/subprojects/gstreamer/gst/gstpad.c:4677:gst_pad_push_data:<capsfilter0:src> Got data flow before segment event
(gst-launch-1.0:353098): GStreamer-WARNING **: 13:37:52.319: ../gstreamer/subprojects/gstreamer/gst/gstpad.c:4416:gst_pad_chain_data_unchecked:<x264enc0:sink> Got data flow before segment event
(gst-launch-1.0:353098): GStreamer-WARNING **: 13:37:52.639: ../gstreamer/subprojects/gstreamer/gst/gstpad.c:4677:gst_pad_push_data:<x264enc0:src> Got data flow before segment event
(gst-launch-1.0:353098): GStreamer-WARNING **: 13:37:52.640: ../gstreamer/subprojects/gstreamer/gst/gstpad.c:4416:gst_pad_chain_data_unchecked:<hlssink2-0:video> Got data flow before segment event
(gst-launch-1.0:353098): GStreamer-WARNING **: 13:37:52.640: ../gstreamer/subprojects/gstreamer/gst/gstpad.c:4677:gst_pad_push_data:<video:proxypad1> Got data flow before segment event
(gst-launch-1.0:353098): GStreamer-WARNING **: 13:37:52.640: ../gstreamer/subprojects/gstreamer/gst/gstpad.c:4416:gst_pad_chain_data_unchecked:<splitmuxsink0:video> Got data flow before segment event
(gst-launch-1.0:353098): GStreamer-WARNING **: 13:37:52.640: ../gstreamer/subprojects/gstreamer/gst/gstpad.c:4677:gst_pad_push_data:<video:proxypad0> Got data flow before segment event
(gst-launch-1.0:353098): GStreamer-WARNING **: 13:37:52.640: ../gstreamer/subprojects/gstreamer/gst/gstpad.c:4416:gst_pad_chain_data_unchecked:<queue_video:sink> Got data flow before segment event
(gst-launch-1.0:353098): GStreamer-CRITICAL **: 13:37:52.640: gst_segment_to_running_time_full: assertion 'segment->format == format' failed
(gst-launch-1.0:353098): GStreamer-CRITICAL **: 13:37:52.640: gst_segment_to_running_time_full: assertion 'segment->format == format' failed
(gst-launch-1.0:353098): GStreamer-CRITICAL **: 13:37:52.640: gst_segment_to_running_time_full: assertion 'segment->format == format' failed
(gst-launch-1.0:353098): GStreamer-CRITICAL **: 13:37:52.640: gst_segment_to_running_time_full: assertion 'segment->format == format' failed
(gst-launch-1.0:353098): GStreamer-WARNING **: 13:37:52.640: ../gstreamer/subprojects/gstreamer/gst/gstpad.c:4677:gst_pad_push_data:<queue_video:src> Got data flow before segment event
Redistribute latency...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
(gst-launch-1.0:353098): GStreamer-WARNING **: 13:37:52.897: ../gstreamer/subprojects/gstreamer/gst/gstpad.c:4416:gst_pad_chain_data_unchecked:<mpegtsmux0:sink_65> Got data flow before segment event
(gst-launch-1.0:353098): GStreamer-CRITICAL **: 13:37:52.901: gst_segment_to_running_time: assertion 'segment->format == format' failed
The generated playlist.m3u8
:
#EXT-X-TARGETDURATION
should be 4 here and #EXTINF
should be 4 too as I force the framerate and keyframes to align.
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:633437445
#EXTINF:9223371776,
segment00000.ts
#EXTINF:3.5416665077209473,
segment00001.ts
#EXTINF:4,
segment00002.ts
#EXT-X-ENDLIST