FFmpeg
Loading...
Searching...
No Matches
hls.c File Reference

Apple HTTP Live Streaming demuxer https://www.rfc-editor.org/rfc/rfc8216.txt. More...

#include "config_components.h"
#include "libavformat/http.h"
#include "libavutil/aes.h"
#include "libavutil/avstring.h"
#include "libavutil/avassert.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/mathematics.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
#include "libavutil/dict.h"
#include "libavutil/time.h"
#include "libavutil/tree.h"
#include "avformat.h"
#include "demux.h"
#include "internal.h"
#include "avio_internal.h"
#include "id3v2.h"
#include "url.h"
#include "hls_sample_encryption.h"

Go to the source code of this file.

Data Structures

struct  segment
 
struct  playlist
 
struct  rendition
 
struct  variant
 
struct  rendition_group
 
struct  HLSContext
 
struct  variant_info
 
struct  key_info
 
struct  init_section_info
 
struct  rendition_info
 

Macros

#define INITIAL_BUFFER_SIZE   32768
 
#define MAX_FIELD_LEN   64
 
#define MAX_CHARACTERISTICS_LEN   512
 
#define MPEG_TIME_BASE   90000
 
#define MPEG_TIME_BASE_Q   (AVRational){1, MPEG_TIME_BASE}
 
#define PACKED_AUDIO_FORMATS   "aac,ac3,eac3,mp3"
 
#define OFFSET(x)
 
#define FLAGS   AV_OPT_FLAG_DECODING_PARAM
 

Enumerations

enum  KeyType { KEY_NONE , KEY_AES_128 , KEY_SAMPLE_AES }
 
enum  PlaylistType { PLS_TYPE_UNSPECIFIED , PLS_TYPE_EVENT , PLS_TYPE_VOD }
 

Functions

static void free_segment_dynarray (struct segment **segments, int n_segments)
 
static void free_segment_list (struct playlist *pls)
 
static void free_init_section_list (struct playlist *pls)
 
static void free_playlist_list (HLSContext *c)
 
static void free_variant_list (HLSContext *c)
 
static void free_rendition_list (HLSContext *c)
 
static int cmp_url_playlist (const void *key, const void *b)
 
static int cmp_playlist_url (const void *a, const void *b)
 
static struct playlist * new_playlist (HLSContext *c, const char *url, const char *base)
 
static struct variant * new_variant (HLSContext *c, struct variant_info *info, const char *url, const char *base)
 
static void handle_variant_args (void *context, const char *key, int key_len, char **dest, int *dest_len)
 
static void handle_key_args (void *context, const char *key, int key_len, char **dest, int *dest_len)
 
static struct segment * new_init_section (struct playlist *pls, struct init_section_info *info, const char *url_base)
 
static void handle_init_section_args (void *context, const char *key, int key_len, char **dest, int *dest_len)
 
static int cmp_rendition_group (const void *a, const void *b)
 
static struct rendition_group * find_rendition_group (HLSContext *c, enum AVMediaType type, const char *id)
 
static struct rendition_group * new_rendition_group (HLSContext *c, enum AVMediaType type, const char *id)
 
static int new_rendition (HLSContext *c, struct rendition_info *info, const char *url_base)
 
static void handle_rendition_args (void *vinfo, const char *key, int key_len, char **dest, int *dest_len)
 
static int ensure_playlist (HLSContext *c, struct playlist **pls, const char *url)
 
static int is_native_http (AVIOContext *pb)
 
static int open_url_keepalive (AVFormatContext *s, AVIOContext **pb, const char *url, AVDictionary **options)
 
static int open_url (AVFormatContext *s, AVIOContext **pb, const char *url, AVDictionary **opts, AVDictionary *opts2, int *is_http_out)
 
static int test_segment (AVFormatContext *s, const AVInputFormat *in_fmt, struct playlist *pls, struct segment *seg)
 
static int parse_playlist (HLSContext *c, const char *url, struct playlist *pls, AVIOContext *in)
 
static struct segment * current_segment (struct playlist *pls)
 
static struct segment * next_segment (struct playlist *pls)
 
static int segment_continues (const struct segment *cur, const struct segment *next, int64_t end)
 
static int64_t range_end (struct playlist *pls, const struct segment *seg)
 
static int read_from_url (struct playlist *pls, struct segment *seg, uint8_t *buf, int buf_size)
 
static void parse_id3 (AVFormatContext *s, AVIOContext *pb, AVDictionary **metadata, int64_t *dts, HLSAudioSetupInfo *audio_setup_info, ID3v2ExtraMetaAPIC **apic, ID3v2ExtraMeta **extra_meta)
 
static int id3_has_changed_values (struct playlist *pls, AVDictionary *metadata, ID3v2ExtraMetaAPIC *apic)
 
static void handle_id3 (AVIOContext *pb, struct playlist *pls)
 
static void intercept_id3 (struct playlist *pls, uint8_t *buf, int buf_size, int *len)
 
static int read_key (HLSContext *c, struct playlist *pls, struct segment *seg)
 
static int open_input (HLSContext *c, struct playlist *pls, struct segment *seg, AVIOContext **in, int64_t *end)
 
static int update_init_section (struct playlist *pls, struct segment *seg)
 
static int64_t default_reload_interval (struct playlist *pls)
 
static int playlist_needed (struct playlist *pls)
 
static int reload_playlist (struct playlist *v, HLSContext *c)
 
static int read_data_continuous (void *opaque, uint8_t *buf, int buf_size)
 
static int read_data_subtitle_segment (void *opaque, uint8_t *buf, int buf_size)
 
static int nested_io_open (AVFormatContext *s, AVIOContext **pb, const char *url, int flags, AVDictionary **opts)
 
static int init_subtitle_context (struct playlist *pls)
 
static int read_subtitle_packet (struct playlist *v, AVPacket *pkt)
 
static int add_renditions_to_variant (HLSContext *c, struct variant *var, enum AVMediaType type, const char *group_id)
 
static int add_renditions_to_playlists (HLSContext *c, enum AVMediaType type)
 
static void add_metadata_from_renditions (AVFormatContext *s, struct playlist *pls, enum AVMediaType type)
 
static int find_timestamp_in_playlist (HLSContext *c, struct playlist *pls, int64_t timestamp, int64_t *seq_no, int64_t *seg_start_ts)
 
static int64_t select_cur_seq_no (HLSContext *c, struct playlist *pls)
 
static void add_stream_to_programs (AVFormatContext *s, struct playlist *pls, AVStream *stream)
 
static int set_stream_info_from_input_stream (AVStream *st, struct playlist *pls, AVStream *ist)
 
static int update_streams_from_subdemuxer (AVFormatContext *s, struct playlist *pls)
 
static void update_noheader_flag (AVFormatContext *s)
 
static int hls_close (AVFormatContext *s)
 
static int hls_read_header (AVFormatContext *s)
 
static int recheck_discard_flags (AVFormatContext *s, int first)
 
static void fill_timing_for_id3_timestamped_stream (struct playlist *pls)
 
static AVRational get_timebase (struct playlist *pls)
 
static int compare_ts_with_wrapdetect (int64_t ts_a, struct playlist *pls_a, int64_t ts_b, struct playlist *pls_b)
 
static int metadata_has_changed (const AVDictionary *current, const AVDictionary *update)
 Check whether any entry in update differs from the corresponding entry in current.
 
static int hls_read_packet (AVFormatContext *s, AVPacket *pkt)
 
static int hls_read_seek (AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
 
static int hls_probe (const AVProbeData *p)
 

Variables

static const AVOption hls_options []
 
static const AVClass hls_class
 
const FFInputFormat ff_hls_demuxer
 

Detailed Description

Apple HTTP Live Streaming demuxer https://www.rfc-editor.org/rfc/rfc8216.txt.

Definition in file hls.c.

Macro Definition Documentation

◆ INITIAL_BUFFER_SIZE

#define INITIAL_BUFFER_SIZE   32768

Definition at line 52 of file hls.c.

◆ MAX_FIELD_LEN

#define MAX_FIELD_LEN   64

Definition at line 54 of file hls.c.

◆ MAX_CHARACTERISTICS_LEN

#define MAX_CHARACTERISTICS_LEN   512

Definition at line 55 of file hls.c.

◆ MPEG_TIME_BASE

#define MPEG_TIME_BASE   90000

Definition at line 57 of file hls.c.

Referenced by set_stream_info_from_input_stream().

◆ MPEG_TIME_BASE_Q

#define MPEG_TIME_BASE_Q   (AVRational){1, MPEG_TIME_BASE}

◆ PACKED_AUDIO_FORMATS

#define PACKED_AUDIO_FORMATS   "aac,ac3,eac3,mp3"

Definition at line 60 of file hls.c.

Referenced by handle_id3(), and hls_read_header().

◆ OFFSET

#define OFFSET ( x)
Value:
offsetof(HLSContext, x)

Definition at line 3295 of file hls.c.

◆ FLAGS

#define FLAGS   AV_OPT_FLAG_DECODING_PARAM

Definition at line 3296 of file hls.c.

Enumeration Type Documentation

◆ KeyType

enum KeyType
Enumerator
KEY_NONE 
KEY_AES_128 
KEY_SAMPLE_AES 

Definition at line 74 of file hls.c.

◆ PlaylistType

Enumerator
PLS_TYPE_UNSPECIFIED 
PLS_TYPE_EVENT 
PLS_TYPE_VOD 

Definition at line 96 of file hls.c.

Function Documentation

◆ free_segment_dynarray()

static void free_segment_dynarray ( struct segment ** segments,
int n_segments )
static

Definition at line 287 of file hls.c.

Referenced by free_segment_list(), and parse_playlist().

◆ free_segment_list()

static void free_segment_list ( struct playlist * pls)
static

Definition at line 297 of file hls.c.

Referenced by free_playlist_list().

◆ free_init_section_list()

static void free_init_section_list ( struct playlist * pls)
static

Definition at line 304 of file hls.c.

Referenced by free_playlist_list().

◆ free_playlist_list()

static void free_playlist_list ( HLSContext * c)
static

Definition at line 316 of file hls.c.

Referenced by hls_close().

◆ free_variant_list()

static void free_variant_list ( HLSContext * c)
static

Definition at line 348 of file hls.c.

Referenced by hls_close().

◆ free_rendition_list()

static void free_rendition_list ( HLSContext * c)
static

Definition at line 360 of file hls.c.

Referenced by hls_close().

◆ cmp_url_playlist()

static int cmp_url_playlist ( const void * key,
const void * b )
static

Definition at line 379 of file hls.c.

Referenced by new_playlist().

◆ cmp_playlist_url()

static int cmp_playlist_url ( const void * a,
const void * b )
static

Definition at line 385 of file hls.c.

Referenced by new_playlist().

◆ new_playlist()

static struct playlist * new_playlist ( HLSContext * c,
const char * url,
const char * base )
static

Definition at line 391 of file hls.c.

Referenced by new_rendition(), and new_variant().

◆ new_variant()

static struct variant * new_variant ( HLSContext * c,
struct variant_info * info,
const char * url,
const char * base )
static

Definition at line 446 of file hls.c.

Referenced by ensure_playlist(), and parse_playlist().

◆ handle_variant_args()

static void handle_variant_args ( void * context,
const char * key,
int key_len,
char ** dest,
int * dest_len )
static

Definition at line 472 of file hls.c.

Referenced by parse_playlist().

◆ handle_key_args()

static void handle_key_args ( void * context,
const char * key,
int key_len,
char ** dest,
int * dest_len )
static

Definition at line 497 of file hls.c.

Referenced by parse_playlist().

◆ new_init_section()

static struct segment * new_init_section ( struct playlist * pls,
struct init_section_info * info,
const char * url_base )
static

Definition at line 518 of file hls.c.

Referenced by parse_playlist().

◆ handle_init_section_args()

static void handle_init_section_args ( void * context,
const char * key,
int key_len,
char ** dest,
int * dest_len )
static

Definition at line 567 of file hls.c.

Referenced by parse_playlist().

◆ cmp_rendition_group()

static int cmp_rendition_group ( const void * a,
const void * b )
static

Definition at line 592 of file hls.c.

Referenced by find_rendition_group(), and new_rendition_group().

◆ find_rendition_group()

static struct rendition_group * find_rendition_group ( HLSContext * c,
enum AVMediaType type,
const char * id )
static

Definition at line 601 of file hls.c.

Referenced by add_renditions_to_variant(), and new_rendition_group().

◆ new_rendition_group()

static struct rendition_group * new_rendition_group ( HLSContext * c,
enum AVMediaType type,
const char * id )
static

Definition at line 611 of file hls.c.

Referenced by new_rendition().

◆ new_rendition()

static int new_rendition ( HLSContext * c,
struct rendition_info * info,
const char * url_base )
static

Definition at line 635 of file hls.c.

Referenced by parse_playlist().

◆ handle_rendition_args()

static void handle_rendition_args ( void * vinfo,
const char * key,
int key_len,
char ** dest,
int * dest_len )
static

Definition at line 739 of file hls.c.

Referenced by parse_playlist().

◆ ensure_playlist()

static int ensure_playlist ( HLSContext * c,
struct playlist ** pls,
const char * url )
static

Definition at line 785 of file hls.c.

Referenced by parse_playlist().

◆ is_native_http()

static int is_native_http ( AVIOContext * pb)
static

Definition at line 796 of file hls.c.

Referenced by open_url(), parse_playlist(), and read_data_continuous().

◆ open_url_keepalive()

static int open_url_keepalive ( AVFormatContext * s,
AVIOContext ** pb,
const char * url,
AVDictionary ** options )
static

Definition at line 806 of file hls.c.

Referenced by open_url(), and parse_playlist().

◆ open_url()

static int open_url ( AVFormatContext * s,
AVIOContext ** pb,
const char * url,
AVDictionary ** opts,
AVDictionary * opts2,
int * is_http_out )
static

Definition at line 824 of file hls.c.

Referenced by open_input(), parse_playlist(), and read_key().

◆ test_segment()

static int test_segment ( AVFormatContext * s,
const AVInputFormat * in_fmt,
struct playlist * pls,
struct segment * seg )
static

Definition at line 912 of file hls.c.

Referenced by hls_read_header(), and parse_playlist().

◆ parse_playlist()

static int parse_playlist ( HLSContext * c,
const char * url,
struct playlist * pls,
AVIOContext * in )
static

Definition at line 959 of file hls.c.

Referenced by hls_read_header(), hls_read_seek(), reload_playlist(), and select_cur_seq_no().

◆ current_segment()

static struct segment * current_segment ( struct playlist * pls)
static

◆ next_segment()

static struct segment * next_segment ( struct playlist * pls)
static

Definition at line 1327 of file hls.c.

Referenced by range_end(), and read_data_continuous().

◆ segment_continues()

static int segment_continues ( const struct segment * cur,
const struct segment * next,
int64_t end )
static

Definition at line 1339 of file hls.c.

Referenced by range_end(), and read_data_continuous().

◆ range_end()

static int64_t range_end ( struct playlist * pls,
const struct segment * seg )
static

Definition at line 1351 of file hls.c.

Referenced by filter_units_make_type_list(), and open_input().

◆ read_from_url()

static int read_from_url ( struct playlist * pls,
struct segment * seg,
uint8_t * buf,
int buf_size )
static

◆ parse_id3()

static void parse_id3 ( AVFormatContext * s,
AVIOContext * pb,
AVDictionary ** metadata,
int64_t * dts,
HLSAudioSetupInfo * audio_setup_info,
ID3v2ExtraMetaAPIC ** apic,
ID3v2ExtraMeta ** extra_meta )
static

Definition at line 1382 of file hls.c.

Referenced by handle_id3().

◆ id3_has_changed_values()

static int id3_has_changed_values ( struct playlist * pls,
AVDictionary * metadata,
ID3v2ExtraMetaAPIC * apic )
static

Definition at line 1411 of file hls.c.

Referenced by handle_id3().

◆ handle_id3()

static void handle_id3 ( AVIOContext * pb,
struct playlist * pls )
static

Definition at line 1440 of file hls.c.

Referenced by intercept_id3().

◆ intercept_id3()

static void intercept_id3 ( struct playlist * pls,
uint8_t * buf,
int buf_size,
int * len )
static

Definition at line 1483 of file hls.c.

Referenced by read_data_continuous().

◆ read_key()

static int read_key ( HLSContext * c,
struct playlist * pls,
struct segment * seg )
static

Definition at line 1583 of file hls.c.

◆ open_input()

static int open_input ( HLSContext * c,
struct playlist * pls,
struct segment * seg,
AVIOContext ** in,
int64_t * end )
static

Definition at line 1614 of file hls.c.

Referenced by read_data_continuous(), read_data_subtitle_segment(), and update_init_section().

◆ update_init_section()

static int update_init_section ( struct playlist * pls,
struct segment * seg )
static

Definition at line 1690 of file hls.c.

Referenced by read_data_continuous().

◆ default_reload_interval()

static int64_t default_reload_interval ( struct playlist * pls)
static

Definition at line 1747 of file hls.c.

Referenced by hls_read_seek(), reload_playlist(), and select_cur_seq_no().

◆ playlist_needed()

static int playlist_needed ( struct playlist * pls)
static

Definition at line 1754 of file hls.c.

Referenced by recheck_discard_flags(), and reload_playlist().

◆ reload_playlist()

static int reload_playlist ( struct playlist * v,
HLSContext * c )
static

Definition at line 1800 of file hls.c.

Referenced by read_data_continuous(), and read_subtitle_packet().

◆ read_data_continuous()

static int read_data_continuous ( void * opaque,
uint8_t * buf,
int buf_size )
static

Definition at line 1877 of file hls.c.

Referenced by hls_read_header().

◆ read_data_subtitle_segment()

static int read_data_subtitle_segment ( void * opaque,
uint8_t * buf,
int buf_size )
static

Definition at line 2011 of file hls.c.

Referenced by init_subtitle_context().

◆ nested_io_open()

static int nested_io_open ( AVFormatContext * s,
AVIOContext ** pb,
const char * url,
int flags,
AVDictionary ** opts )
static

Definition at line 2040 of file hls.c.

◆ init_subtitle_context()

static int init_subtitle_context ( struct playlist * pls)
static

Definition at line 2050 of file hls.c.

Referenced by read_subtitle_packet().

◆ read_subtitle_packet()

static int read_subtitle_packet ( struct playlist * v,
AVPacket * pkt )
static

Definition at line 2090 of file hls.c.

Referenced by hls_read_packet().

◆ add_renditions_to_variant()

static int add_renditions_to_variant ( HLSContext * c,
struct variant * var,
enum AVMediaType type,
const char * group_id )
static

Definition at line 2122 of file hls.c.

Referenced by hls_read_header().

◆ add_renditions_to_playlists()

static int add_renditions_to_playlists ( HLSContext * c,
enum AVMediaType type )
static

Definition at line 2151 of file hls.c.

Referenced by hls_read_header().

◆ add_metadata_from_renditions()

static void add_metadata_from_renditions ( AVFormatContext * s,
struct playlist * pls,
enum AVMediaType type )
static

Definition at line 2177 of file hls.c.

Referenced by hls_read_header().

◆ find_timestamp_in_playlist()

static int find_timestamp_in_playlist ( HLSContext * c,
struct playlist * pls,
int64_t timestamp,
int64_t * seq_no,
int64_t * seg_start_ts )
static

Definition at line 2209 of file hls.c.

Referenced by hls_read_seek(), and select_cur_seq_no().

◆ select_cur_seq_no()

static int64_t select_cur_seq_no ( HLSContext * c,
struct playlist * pls )
static

Definition at line 2248 of file hls.c.

Referenced by hls_read_header(), and recheck_discard_flags().

◆ add_stream_to_programs()

static void add_stream_to_programs ( AVFormatContext * s,
struct playlist * pls,
AVStream * stream )
static

Definition at line 2323 of file hls.c.

Referenced by update_streams_from_subdemuxer().

◆ set_stream_info_from_input_stream()

static int set_stream_info_from_input_stream ( AVStream * st,
struct playlist * pls,
AVStream * ist )
static

Definition at line 2349 of file hls.c.

Referenced by hls_read_packet(), and update_streams_from_subdemuxer().

◆ update_streams_from_subdemuxer()

static int update_streams_from_subdemuxer ( AVFormatContext * s,
struct playlist * pls )
static

Definition at line 2373 of file hls.c.

Referenced by hls_read_header(), and hls_read_packet().

◆ update_noheader_flag()

static void update_noheader_flag ( AVFormatContext * s)
static

Definition at line 2414 of file hls.c.

Referenced by hls_read_header(), and hls_read_packet().

◆ hls_close()

static int hls_close ( AVFormatContext * s)
static

Definition at line 2435 of file hls.c.

◆ hls_read_header()

static int hls_read_header ( AVFormatContext * s)
static

Definition at line 2452 of file hls.c.

◆ recheck_discard_flags()

static int recheck_discard_flags ( AVFormatContext * s,
int first )
static

Definition at line 2783 of file hls.c.

Referenced by hls_read_packet().

◆ fill_timing_for_id3_timestamped_stream()

static void fill_timing_for_id3_timestamped_stream ( struct playlist * pls)
static

Definition at line 2827 of file hls.c.

Referenced by hls_read_packet().

◆ get_timebase()

static AVRational get_timebase ( struct playlist * pls)
static

Definition at line 2852 of file hls.c.

Referenced by compare_ts_with_wrapdetect(), and hls_read_packet().

◆ compare_ts_with_wrapdetect()

static int compare_ts_with_wrapdetect ( int64_t ts_a,
struct playlist * pls_a,
int64_t ts_b,
struct playlist * pls_b )
static

Definition at line 2860 of file hls.c.

Referenced by hls_read_packet().

◆ metadata_has_changed()

static int metadata_has_changed ( const AVDictionary * current,
const AVDictionary * update )
static

Check whether any entry in update differs from the corresponding entry in current.

HLS segments can repeat timed ID3 metadata in every segment so that listeners joining mid-stream immediately receive the current track information. Only signal a metadata change when values actually differ to avoid spurious updates on every segment boundary.

Definition at line 2878 of file hls.c.

Referenced by hls_read_packet().

◆ hls_read_packet()

static int hls_read_packet ( AVFormatContext * s,
AVPacket * pkt )
static

Definition at line 2892 of file hls.c.

◆ hls_read_seek()

static int hls_read_seek ( AVFormatContext * s,
int stream_index,
int64_t timestamp,
int flags )
static

Definition at line 3102 of file hls.c.

◆ hls_probe()

static int hls_probe ( const AVProbeData * p)
static

Definition at line 3259 of file hls.c.

Variable Documentation

◆ hls_options

const AVOption hls_options[]
static

Definition at line 3297 of file hls.c.

◆ hls_class

const AVClass hls_class
static
Initial value:
= {
.class_name = "hls demuxer",
.item_name = av_default_item_name,
.option = hls_options,
}
const char * av_default_item_name(void *ptr)
Return the context name.
Definition log.c:247
#define LIBAVUTIL_VERSION_INT
Definition version.h:85
static const AVOption hls_options[]
Definition hls.c:3297

Definition at line 3338 of file hls.c.

◆ ff_hls_demuxer

const FFInputFormat ff_hls_demuxer
Initial value:
= {
.p.name = "hls",
.p.long_name = NULL_IF_CONFIG_SMALL("Apple HTTP Live Streaming"),
.p.priv_class = &hls_class,
.priv_data_size = sizeof(HLSContext),
.flags_internal = FF_INFMT_FLAG_INIT_CLEANUP,
}
#define AVFMT_TS_DISCONT
Format allows timestamp discontinuities.
Definition avformat.h:502
#define AVFMT_NO_BYTE_SEEK
Format does not allow seeking by bytes.
Definition avformat.h:508
#define AVFMT_NOGENSEARCH
Format does not allow to fall back on generic search.
Definition avformat.h:507
#define AVFMT_SHOW_IDS
Show format stream IDs numbers.
Definition avformat.h:498
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
static int read_probe(const AVProbeData *p)
Definition cdg.c:30
#define FF_INFMT_FLAG_INIT_CLEANUP
For an FFInputFormat with this flag set read_close() needs to be called by the caller upon read_heade...
Definition demux.h:35
static int read_header(FFV1Context *f, RangeCoder *c)
Definition ffv1dec.c:578
static int hls_read_header(AVFormatContext *s)
Definition hls.c:2452
static int hls_probe(const AVProbeData *p)
Definition hls.c:3259
static int hls_close(AVFormatContext *s)
Definition hls.c:2435
static int hls_read_packet(AVFormatContext *s, AVPacket *pkt)
Definition hls.c:2892
static const AVClass hls_class
Definition hls.c:3338
static int hls_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
Definition hls.c:3102
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition internal.h:97
static av_cold int read_close(AVFormatContext *ctx)
Definition libcdio.c:143
static int read_seek(AVFormatContext *ctx, int stream_index, int64_t timestamp, int flags)
Definition libcdio.c:151

Definition at line 3345 of file hls.c.