diff --git a/libavformat/applehttp.c b/libavformat/applehttp.c index e0773ae87f..366d8327ff 100644 --- a/libavformat/applehttp.c +++ b/libavformat/applehttp.c @@ -99,6 +99,7 @@ typedef struct AppleHTTPContext { int cur_seq_no; int end_of_segment; int first_packet; + int64_t first_timestamp; AVIOInterruptCB *interrupt_callback; } AppleHTTPContext; @@ -527,6 +528,7 @@ static int applehttp_read_header(AVFormatContext *s, AVFormatParameters *ap) } c->first_packet = 1; + c->first_timestamp = AV_NOPTS_VALUE; return 0; fail: @@ -591,6 +593,9 @@ start: if (!var->pb.eof_reached) return ret; reset_packet(&var->pkt); + } else { + if (c->first_timestamp == AV_NOPTS_VALUE) + c->first_timestamp = var->pkt.dts; } } /* Check if this stream has the packet with the lowest dts */ @@ -639,7 +644,10 @@ static int applehttp_read_seek(AVFormatContext *s, int stream_index, for (i = 0; i < c->n_variants; i++) { /* Reset reading */ struct variant *var = c->variants[i]; - int64_t pos = 0; + int64_t pos = c->first_timestamp == AV_NOPTS_VALUE ? 0 : + av_rescale_rnd(c->first_timestamp, 1, + stream_index >= 0 ? s->streams[stream_index]->time_base.den : AV_TIME_BASE, + flags & AVSEEK_FLAG_BACKWARD ? AV_ROUND_DOWN : AV_ROUND_UP); if (var->input) { ffurl_close(var->input); var->input = NULL;