mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-25 16:52:31 +00:00
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.
This commit is contained in:
parent
637dfa3942
commit
6194d7e564
@ -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.
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 ?
|
||||
|
@ -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, \
|
||||
|
Loading…
Reference in New Issue
Block a user