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

Zhao Zhili quinkblack at foxmail.com
Sun Jul 19 15:53:21 EEST 2020



> On Jul 19, 2020, at 7:45 PM, Steven Liu <lingjiujianke at gmail.com> 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_TIME_BASE is an opaque time unit used by ffmpeg, it can be set to 90000 in theory.
To get time in AV_TIME_BASE, it should be (ignore integer overflow)

av_gettime * AV_TIME_BASE / 1000000


>> 
>>>> 
>>>>    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
>>>> 
>>>> _______________________________________________
>>>> ffmpeg-devel mailing list
>>>> ffmpeg-devel at ffmpeg.org
>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>> 
>>>> To unsubscribe, visit link above, or email
>>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>> _______________________________________________
>>> ffmpeg-devel mailing list
>>> ffmpeg-devel at ffmpeg.org
>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>> 
>>> To unsubscribe, visit link above, or email
>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>> 
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>> 
>> To unsubscribe, visit link above, or email
>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".



More information about the ffmpeg-devel mailing list