|
|
@@ -54,7 +54,7 @@ struct variant { |
|
|
|
char url[MAX_URL_SIZE]; |
|
|
|
}; |
|
|
|
|
|
|
|
typedef struct AppleHTTPContext { |
|
|
|
typedef struct HLSContext { |
|
|
|
char playlisturl[MAX_URL_SIZE]; |
|
|
|
int target_duration; |
|
|
|
int start_seq_no; |
|
|
@@ -66,7 +66,7 @@ typedef struct AppleHTTPContext { |
|
|
|
int cur_seq_no; |
|
|
|
URLContext *seg_hd; |
|
|
|
int64_t last_load_time; |
|
|
|
} AppleHTTPContext; |
|
|
|
} HLSContext; |
|
|
|
|
|
|
|
static int read_chomp_line(AVIOContext *s, char *buf, int maxlen) |
|
|
|
{ |
|
|
@@ -76,7 +76,7 @@ static int read_chomp_line(AVIOContext *s, char *buf, int maxlen) |
|
|
|
return len; |
|
|
|
} |
|
|
|
|
|
|
|
static void free_segment_list(AppleHTTPContext *s) |
|
|
|
static void free_segment_list(HLSContext *s) |
|
|
|
{ |
|
|
|
int i; |
|
|
|
for (i = 0; i < s->n_segments; i++) |
|
|
@@ -85,7 +85,7 @@ static void free_segment_list(AppleHTTPContext *s) |
|
|
|
s->n_segments = 0; |
|
|
|
} |
|
|
|
|
|
|
|
static void free_variant_list(AppleHTTPContext *s) |
|
|
|
static void free_variant_list(HLSContext *s) |
|
|
|
{ |
|
|
|
int i; |
|
|
|
for (i = 0; i < s->n_variants; i++) |
|
|
@@ -109,7 +109,7 @@ static void handle_variant_args(struct variant_info *info, const char *key, |
|
|
|
|
|
|
|
static int parse_playlist(URLContext *h, const char *url) |
|
|
|
{ |
|
|
|
AppleHTTPContext *s = h->priv_data; |
|
|
|
HLSContext *s = h->priv_data; |
|
|
|
AVIOContext *in; |
|
|
|
int ret = 0, duration = 0, is_segment = 0, is_variant = 0, bandwidth = 0; |
|
|
|
char line[1024]; |
|
|
@@ -175,9 +175,9 @@ fail: |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
static int applehttp_close(URLContext *h) |
|
|
|
static int hls_close(URLContext *h) |
|
|
|
{ |
|
|
|
AppleHTTPContext *s = h->priv_data; |
|
|
|
HLSContext *s = h->priv_data; |
|
|
|
|
|
|
|
free_segment_list(s); |
|
|
|
free_variant_list(s); |
|
|
@@ -185,9 +185,9 @@ static int applehttp_close(URLContext *h) |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
static int applehttp_open(URLContext *h, const char *uri, int flags) |
|
|
|
static int hls_open(URLContext *h, const char *uri, int flags) |
|
|
|
{ |
|
|
|
AppleHTTPContext *s = h->priv_data; |
|
|
|
HLSContext *s = h->priv_data; |
|
|
|
int ret, i; |
|
|
|
const char *nested_url; |
|
|
|
|
|
|
@@ -258,13 +258,13 @@ static int applehttp_open(URLContext *h, const char *uri, int flags) |
|
|
|
return 0; |
|
|
|
|
|
|
|
fail: |
|
|
|
applehttp_close(h); |
|
|
|
hls_close(h); |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
static int applehttp_read(URLContext *h, uint8_t *buf, int size) |
|
|
|
static int hls_read(URLContext *h, uint8_t *buf, int size) |
|
|
|
{ |
|
|
|
AppleHTTPContext *s = h->priv_data; |
|
|
|
HLSContext *s = h->priv_data; |
|
|
|
const char *url; |
|
|
|
int ret; |
|
|
|
int64_t reload_interval; |
|
|
@@ -329,19 +329,19 @@ retry: |
|
|
|
#if FF_API_APPLEHTTP_PROTO |
|
|
|
URLProtocol ff_applehttp_protocol = { |
|
|
|
.name = "applehttp", |
|
|
|
.url_open = applehttp_open, |
|
|
|
.url_read = applehttp_read, |
|
|
|
.url_close = applehttp_close, |
|
|
|
.url_open = hls_open, |
|
|
|
.url_read = hls_read, |
|
|
|
.url_close = hls_close, |
|
|
|
.flags = URL_PROTOCOL_FLAG_NESTED_SCHEME, |
|
|
|
.priv_data_size = sizeof(AppleHTTPContext), |
|
|
|
.priv_data_size = sizeof(HLSContext), |
|
|
|
}; |
|
|
|
#endif |
|
|
|
|
|
|
|
URLProtocol ff_hls_protocol = { |
|
|
|
.name = "hls", |
|
|
|
.url_open = applehttp_open, |
|
|
|
.url_read = applehttp_read, |
|
|
|
.url_close = applehttp_close, |
|
|
|
.url_open = hls_open, |
|
|
|
.url_read = hls_read, |
|
|
|
.url_close = hls_close, |
|
|
|
.flags = URL_PROTOCOL_FLAG_NESTED_SCHEME, |
|
|
|
.priv_data_size = sizeof(AppleHTTPContext), |
|
|
|
.priv_data_size = sizeof(HLSContext), |
|
|
|
}; |