|
|
|
@ -244,6 +244,7 @@ static int applehttp_read(URLContext *h, uint8_t *buf, int size) |
|
|
|
|
AppleHTTPContext *s = h->priv_data; |
|
|
|
|
const char *url; |
|
|
|
|
int ret; |
|
|
|
|
int64_t reload_interval; |
|
|
|
|
|
|
|
|
|
start: |
|
|
|
|
if (s->seg_hd) { |
|
|
|
@ -256,12 +257,21 @@ start: |
|
|
|
|
s->seg_hd = NULL; |
|
|
|
|
s->cur_seq_no++; |
|
|
|
|
} |
|
|
|
|
reload_interval = s->n_segments > 0 ? |
|
|
|
|
s->segments[s->n_segments - 1]->duration : |
|
|
|
|
s->target_duration; |
|
|
|
|
reload_interval *= 1000000; |
|
|
|
|
retry: |
|
|
|
|
if (!s->finished) { |
|
|
|
|
int64_t now = av_gettime(); |
|
|
|
|
if (now - s->last_load_time >= s->target_duration*1000000) |
|
|
|
|
if (now - s->last_load_time >= reload_interval) { |
|
|
|
|
if ((ret = parse_playlist(h, s->playlisturl)) < 0) |
|
|
|
|
return ret; |
|
|
|
|
/* If we need to reload the playlist again below (if
|
|
|
|
|
* there's still no more segments), switch to a reload |
|
|
|
|
* interval of half the target duration. */ |
|
|
|
|
reload_interval = s->target_duration * 500000; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (s->cur_seq_no < s->start_seq_no) { |
|
|
|
|
av_log(h, AV_LOG_WARNING, |
|
|
|
@ -272,7 +282,7 @@ retry: |
|
|
|
|
if (s->cur_seq_no - s->start_seq_no >= s->n_segments) { |
|
|
|
|
if (s->finished) |
|
|
|
|
return AVERROR_EOF; |
|
|
|
|
while (av_gettime() - s->last_load_time < s->target_duration*1000000) { |
|
|
|
|
while (av_gettime() - s->last_load_time < reload_interval) { |
|
|
|
|
if (ff_check_interrupt(&h->interrupt_callback)) |
|
|
|
|
return AVERROR_EXIT; |
|
|
|
|
usleep(100*1000); |
|
|
|
|