[FFmpeg-cvslog] avformat/hls: fix segment selection regression on track changes of live streams

Anssi Hannula git at videolan.org
Thu Oct 15 15:00:56 CEST 2015


ffmpeg | branch: release/2.7 | Anssi Hannula <anssi.hannula at iki.fi> | Thu Oct 15 13:42:38 2015 +0300| [e69d8fc619d2e640e207c2b412cfc0b6cc6d5230] | committer: Carl Eugen Hoyos

avformat/hls: fix segment selection regression on track changes of live streams

Commit ad701326b43078b90 ("avformat/hls: open playlists immediately when
AVDISCARD_ALL is dropped") inadvertently caused first_packet to never be
cleared, causing select_cur_seq_no() to not use the specific code for
live streams.

In practice this means that when the user selects a different audio
track during live stream (i.e. non-VOD) playback, there may be some
additional delay as the code might select an incorrect segment at first,
and we have to wait for video to catch audio (if too late segment was
selected) or to download more following audio segments (if too early
segment was selected).

Fix that by restoring the zeroing of first_packet.
(cherry picked from commit fd74d45d5158812675105a3b4aeb29c67b82f7e8)

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e69d8fc619d2e640e207c2b412cfc0b6cc6d5230
---

 libavformat/hls.c |    1 +
 1 file changed, 1 insertion(+)

diff --git a/libavformat/hls.c b/libavformat/hls.c
index 3f1d97e..59117f9 100644
--- a/libavformat/hls.c
+++ b/libavformat/hls.c
@@ -1535,6 +1535,7 @@ static int hls_read_packet(AVFormatContext *s, AVPacket *pkt)
     int ret, i, minplaylist = -1;
 
     recheck_discard_flags(s, c->first_packet);
+    c->first_packet = 0;
 
     for (i = 0; i < c->n_playlists; i++) {
         struct playlist *pls = c->playlists[i];



More information about the ffmpeg-cvslog mailing list