[FFmpeg-cvslog] avformat, hls: add a flag to signal unavailability of seeking

wm4 git at videolan.org
Sat Jan 27 05:18:30 EET 2018


ffmpeg | branch: master | wm4 <nfxjfg at googlemail.com> | Wed Jan 24 08:02:25 2018 +0100| [6194d7e56454897b9c5d9d52e82376b2a6e6b85c] | committer: wm4

avformat, hls: add a flag to signal unavailability of seeking

The seek function can just return an error if seeking is unavailable,
but often this is too late. Add a flag that signals that the stream is
unseekable, and use it in HLS.

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

 doc/APIchanges         | 3 +++
 libavformat/avformat.h | 5 +++++
 libavformat/hls.c      | 8 ++++++--
 libavformat/version.h  | 4 ++--
 4 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index c27f104c95..59e3b20c08 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -15,6 +15,9 @@ libavutil:     2017-10-21
 
 API changes, most recent first:
 
+2018-01-xx - xxxxxxx - lavf 58.6.100 - avformat.h
+  Add AVFMTCTX_UNSEEKABLE (for HLS demuxer).
+
 2018-xx-xx - xxxxxxx - lavu 56.9.100 - aes_ctr.h
   Add method to set the 16-byte IV.
 
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index e5740be2b4..60ab9fbc80 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -1275,6 +1275,11 @@ typedef struct AVProgram {
 
 #define AVFMTCTX_NOHEADER      0x0001 /**< signal that no header is present
                                          (streams are added dynamically) */
+#define AVFMTCTX_UNSEEKABLE    0x0002 /**< signal that the stream is definitely
+                                         not seekable, and attempts to call the
+                                         seek function will fail. For some
+                                         network protocols (e.g. HLS), this can
+                                         change dynamically at runtime. */
 
 typedef struct AVChapter {
     int id;                 ///< unique ID to identify the chapter
diff --git a/libavformat/hls.c b/libavformat/hls.c
index ff7bdecc93..6e1a2e3f1e 100644
--- a/libavformat/hls.c
+++ b/libavformat/hls.c
@@ -930,6 +930,11 @@ fail:
     av_free(new_url);
     if (close_in)
         ff_format_io_close(c->ctx, &in);
+    c->ctx->ctx_flags = c->ctx->ctx_flags & ~(unsigned)AVFMTCTX_UNSEEKABLE;
+    if (!c->n_variants || !c->variants[0]->n_playlists ||
+        !(c->variants[0]->playlists[0]->finished ||
+          c->variants[0]->playlists[0]->type == PLS_TYPE_EVENT))
+        c->ctx->ctx_flags |= AVFMTCTX_UNSEEKABLE;
     return ret;
 }
 
@@ -2213,8 +2218,7 @@ static int hls_read_seek(AVFormatContext *s, int stream_index,
     int stream_subdemuxer_index;
     int64_t first_timestamp, seek_timestamp, duration;
 
-    if ((flags & AVSEEK_FLAG_BYTE) ||
-        !(c->variants[0]->playlists[0]->finished || c->variants[0]->playlists[0]->type == PLS_TYPE_EVENT))
+    if ((flags & AVSEEK_FLAG_BYTE) || (c->ctx->ctx_flags & AVFMTCTX_UNSEEKABLE))
         return AVERROR(ENOSYS);
 
     first_timestamp = c->first_timestamp == AV_NOPTS_VALUE ?
diff --git a/libavformat/version.h b/libavformat/version.h
index 148fc75faa..5ff8a89ae0 100644
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@ -32,8 +32,8 @@
 // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
 // Also please add any ticket numbers that you believe might be affected here
 #define LIBAVFORMAT_VERSION_MAJOR  58
-#define LIBAVFORMAT_VERSION_MINOR   5
-#define LIBAVFORMAT_VERSION_MICRO 101
+#define LIBAVFORMAT_VERSION_MINOR   6
+#define LIBAVFORMAT_VERSION_MICRO 100
 
 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
                                                LIBAVFORMAT_VERSION_MINOR, \



More information about the ffmpeg-cvslog mailing list