[FFmpeg-devel] [PATCH] avformat/hlsenc: increase initial program date time precision

Steven Liu lingjiujianke at gmail.com
Tue Jul 28 04:09:35 EEST 2020


Marton Balint <cus at passwd.hu> 于2020年7月28日周二 上午4:15写道:
>
>
>
> On Sun, 19 Jul 2020, Marton Balint wrote:
>
> >
> >
> > On Sun, 19 Jul 2020, Steven Liu wrote:
> >
> >> Zhao Zhili <quinkblack at foxmail.com> 于2020年7月19日周日 下午6:26写道:
> >>>
> >>>
> >>>
> >>> > On Jul 19, 2020, at 5:20 PM, Steven Liu <lingjiujianke at gmail.com> wrote:
> >>> >
> >>> > Marton Balint <cus at passwd.hu> 于2020年7月19日周日 上午6:04写道:
> >>> >>
> >>> >> Also query time only once, not for every variant stream, otherwise
> > variant
> >>> >> streams might get a slightly different initial program date time. And
> > we can
> >>> >> set this unconditionally because HLS_PROGRAM_DATE_TIME flag is checked
> >>> >> elsewhere.
> >>> >>
> >>> >> Signed-off-by: Marton Balint <cus at passwd.hu>
> >>> >> ---
> >>> >> libavformat/hlsenc.c | 8 ++------
> >>> >> 1 file changed, 2 insertions(+), 6 deletions(-)
> >>> >>
> >>> >> diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
> >>> >> index df84e6487d..39ff1fa1e7 100644
> >>> >> --- a/libavformat/hlsenc.c
> >>> >> +++ b/libavformat/hlsenc.c
> >>> >> @@ -2704,6 +2704,7 @@ static int hls_init(AVFormatContext *s)
> >>> >>     char *p = NULL;
> >>> >>     int http_base_proto = ff_is_http_proto(s->url);
> >>> >>     int fmp4_init_filename_len = strlen(hls->fmp4_init_filename) + 1;
> >>> >> +    double initial_program_date_time = av_gettime() / 1000000.0;
> >>> > is it AV_TIME_BASE?
> >>>
> >>> According to the documentation of av_gettime, it's not related to
> > AV_TIME_BASE.
> >>>
> >>> /**
> >>>  * Get the current time in microseconds.
> >>>  */
> >>> int64_t av_gettime(void);
> >> I saw
> >> /**
> >> * Internal time base represented as integer
> >> */
> >>
> >> #define AV_TIME_BASE            1000000
> >> Do you mean cannot av_gettime() / AV_TIME_BASE?
> >
> > av_gettime() is always microsec according to docs, even if AV_TIME_BASE is
> > not 1000000. In practice however AV_TIME_BASE is assumed to be 1000000 in
> > a lot of places, so one can't really change it.
> >
> > IMHO it is cleaner to use 1000000.0 instead of AV_TIME_BASE, because
> > AV_TIME_BASE is integer, so you'd have to use (double)AV_TIME_BASE and
> > that would be ugly. So I'd rather keep 1000000.0.
>
> Ping, thanks,
I have no question about it, thanks for your clarify respond, LGTM.

>
> Marton
>
> >>>
> >>> >>
> >>> >>     if (hls->use_localtime) {
> >>> >>         pattern = get_default_pattern_localtime_fmt(s);
> >>> >> @@ -2798,12 +2799,7 @@ static int hls_init(AVFormatContext *s)
> >>> >>         vs->start_pts = AV_NOPTS_VALUE;
> >>> >>         vs->end_pts   = AV_NOPTS_VALUE;
> >>> >>         vs->current_segment_final_filename_fmt[0] = '\0';
> >>> >> -
> >>> >> -        if (hls->flags & HLS_PROGRAM_DATE_TIME) {
> >>> >> -            time_t now0;
> >>> >> -            time(&now0);
> >>> >> -            vs->initial_prog_date_time = now0;
> >>> >> -        }
> >>> >> +        vs->initial_prog_date_time = initial_program_date_time;
> >>> >>
> >>> >>         for (j = 0; j < vs->nb_streams; j++) {
> >>> >>             vs->has_video += vs->streams[j]->codecpar->codec_type ==
> > AVMEDIA_TYPE_VIDEO;
> >>> >> --
> >>> >> 2.26.2
> >>> >>

Thanks

Steven


More information about the ffmpeg-devel mailing list