From: Gilbok Lee Date: Thu, 6 Jan 2022 05:21:25 +0000 (+0900) Subject: hlsdemux: Reset m3u8 sequence when fail three times to get next fragment X-Git-Tag: accepted/tizen/unified/20220217.153506~2^2~10^2~9^2~12^2~2^2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fupstream%2Fgstreamer.git;a=commitdiff_plain;h=6944ff744c2337dd1d8f31ac1838897a0b2c9f62;hp=7c5705a18bc87964637cafb00906ed339d311d73 hlsdemux: Reset m3u8 sequence when fail three times to get next fragment - When media sequence of m3u8 decreases on live stream, fail to get next fragment Change-Id: Iaae7ba7cf3439fcca5155e9cc7f3a1a95e85909e --- diff --git a/ext/hls/gsthlsdemux.c b/ext/hls/gsthlsdemux.c index cfbb68a..e41d3fd 100644 --- a/ext/hls/gsthlsdemux.c +++ b/ext/hls/gsthlsdemux.c @@ -77,6 +77,10 @@ enum #define ABSDIFF(a,b) ((a) < (b) ? (b) - (a) : (a) - (b)) #endif +#ifdef TIZEN_FEATURE_HLSDEMUX_DISCONT_SEQUENCE +#define DEFAULT_FAILED_COUNT 3 +#endif + /* GObject */ static void gst_hls_demux_finalize (GObject * obj); #ifdef TIZEN_FEATURE_HLSDEMUX_PROPERTY @@ -701,6 +705,9 @@ create_stream_for_playlist (GstAdaptiveDemux * demux, GstM3U8 * playlist, hlsdemux_stream->do_typefind = TRUE; hlsdemux_stream->reset_pts = TRUE; +#ifdef TIZEN_FEATURE_HLSDEMUX_DISCONT_SEQUENCE + hlsdemux_stream->failed_count = 0; +#endif #ifdef TIZEN_FEATURE_HLSDEMUX_DISCONT hlsdemux_stream->sequence_pos = GST_CLOCK_TIME_NONE; hlsdemux_stream->last_pcr = GST_CLOCK_TIME_NONE; @@ -1585,8 +1592,19 @@ gst_hls_demux_update_fragment_info (GstAdaptiveDemuxStream * stream) if (file == NULL) { GST_INFO_OBJECT (hlsdemux, "This playlist doesn't contain more fragments"); +#ifdef TIZEN_FEATURE_HLSDEMUX_DISCONT_SEQUENCE + if (++hlsdemux_stream->failed_count > DEFAULT_FAILED_COUNT) { + GST_WARNING_OBJECT (hlsdemux, + "Reset media sequence(fail %d times to gst_m3u8_get_next_fragment)", + hlsdemux_stream->failed_count); + m3u8->sequence = 0; + } +#endif return GST_FLOW_EOS; } +#ifdef TIZEN_FEATURE_HLSDEMUX_DISCONT_SEQUENCE + hlsdemux_stream->failed_count = 0; +#endif if (stream->discont) discont = TRUE; diff --git a/ext/hls/gsthlsdemux.h b/ext/hls/gsthlsdemux.h index 105afb3..18a3a2b 100644 --- a/ext/hls/gsthlsdemux.h +++ b/ext/hls/gsthlsdemux.h @@ -126,7 +126,9 @@ struct _GstHLSDemuxStream * the stream so we can set timestamps/segments * and switch cleanly */ GstBuffer *pending_pcr_buffer; - +#ifdef TIZEN_FEATURE_HLSDEMUX_DISCONT_SEQUENCE + gint failed_count; +#endif GstHLSTSReader tsreader; }; diff --git a/packaging/gst-plugins-bad.spec b/packaging/gst-plugins-bad.spec index 32def80..c583762 100644 --- a/packaging/gst-plugins-bad.spec +++ b/packaging/gst-plugins-bad.spec @@ -4,7 +4,7 @@ Name: gst-plugins-bad Version: 1.16.2 -Release: 28 +Release: 29 Summary: GStreamer Streaming-Media Framework Plug-Ins License: LGPL-2.0+ Group: Multimedia/Framework @@ -83,6 +83,7 @@ export CFLAGS+=" -Wall -g -fPIC\ -DTIZEN_FEATURE_HLSDEMUX_PROPERTY\ -DTIZEN_FEATURE_HLSDEMUX_EMPTY_VTT\ -DTIZEN_FEATURE_HLSDEMUX_UPDATE_SEGMENT\ + -DTIZEN_FEATURE_HLSDEMUX_DISCONT_SEQUENCE\ -DTIZEN_FEATURE_TSDEMUX_MODIFICATION\ -DTIZEN_FEATURE_TSDEMUX_INVALID_PCR_PID\ -DTIZEN_FEATURE_TSDEMUX_LANG_TAG\