[FFmpeg-devel] [PATCH] avformat/hlsenc: start_number new options

Bodecs Bela bodecsb at vivanet.hu
Tue Jan 10 17:17:52 EET 2017



2017.01.10. 12:10 keltezéssel, Steven Liu írta:
> 2017-01-10 17:42 GMT+08:00 Bodecs Bela <bodecsb at vivanet.hu>:
>
>>
>> 2017.01.10. 6:53 keltezéssel, Steven Liu írta:
>>
>>> 2017-01-08 8:22 GMT+08:00 Steven Liu <lingjiujianke at gmail.com>:
>>>
>>>
>>>> 2017-01-08 1:37 GMT+08:00 Bodecs Bela <bodecsb at vivanet.hu>:
>>>>
>>>>
>>>>> 2017.01.07. 0:32 keltezéssel, Steven Liu írta:
>>>>>
>>>>> 2017-01-07 0:47 GMT+08:00 Bodecs Bela <bodecsb at vivanet.hu>:
>>>>>>
>>>>>> 2017.01.06. 17:33 keltezéssel, Steven Liu írta:
>>>>>>> 2017-01-07 0:22 GMT+08:00 Bodecs Bela <bodecsb at vivanet.hu>:
>>>>>>>
>>>>>>>> 2017.01.06. 16:50 keltezéssel, Steven Liu írta:
>>>>>>>>
>>>>>>>>> 2017-01-06 22:07 GMT+08:00 Bodecs Bela <bodecsb at vivanet.hu>:
>>>>>>>>>
>>>>>>>>> Dear All,
>>>>>>>>>> in avformat/hlsenc the start_number option starts the playlist
>>>>>>>>>>
>>>>>>>>>>> sequence
>>>>>>>>>>> number
>>>>>>>>>>> (#EXT-X-MEDIA-SEQUENCE) from the specified number. Unless
>>>>>>>>>>> hls_flags
>>>>>>>>>>> single_file is set, it also specifies starting sequence numbers of
>>>>>>>>>>> segment and subtitle filenames. Sometimes it is usefull to have
>>>>>>>>>>> unique
>>>>>>>>>>> starting numbers at each run, but currently it is only achiveable
>>>>>>>>>>> by
>>>>>>>>>>> setting this parameter manually.
>>>>>>>>>>> This patch enables to set start_number parameter automatically for
>>>>>>>>>>> practically unique numbers. If start_number is set to -1, then
>>>>>>>>>>> the start number will be the seconds since epoch (1970-01-01
>>>>>>>>>>> 00:00:00).
>>>>>>>>>>> If set to -2, then the start number will be based on the current
>>>>>>>>>>> date/time value as YYYYmmddHHMMSS. e.g. 20161231235659.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> thank you,
>>>>>>>>>>>
>>>>>>>>>>> Bela Bodecs
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> ffmpeg-devel mailing list
>>>>>>>>>>> ffmpeg-devel at ffmpeg.org
>>>>>>>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Two question:
>>>>>>>>>>>
>>>>>>>>>>> 1. char b[21];   Why this is 21 ?
>>>>>>>>>>>
>>>>>>>>>> you are right, 15 is enough.
>>>>>>>>>>
>>>>>>>>>> 2. +    {"start_number",  "set first number in the sequence",
>>>>>>>>>       OFFSET(start_sequence),AV_OPT_TYPE_INT64,  {.i64 = 0},     -2,
>>>>>>>>>> INT64_MAX,
>>>>>>>>>> E},
>>>>>>>>>> Why is this -2 and the help message maybe need more infomation, for
>>>>>>>>>> example
>>>>>>>>>> -2 mean -1 mean  0 mean, and default value.
>>>>>>>>>>
>>>>>>>>>> yes, I have altered now but I have written verbosly into the doc
>>>>>>>>>>
>>>>>>>>>> (muxers.texi), here:
>>>>>>>>> +If set to -1, then the start number will be the seconds since epoch
>>>>>>>>> (1970-01-01 00:00:00).
>>>>>>>>> +If set to -2, then the start number will be based on the current
>>>>>>>>> date/time as YYYYmmddHHMMSS. e.g. 20161231235759.
>>>>>>>>> +Default value is 0.
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>>
>>>>>>>>> ffmpeg-devel mailing list
>>>>>>>>>
>>>>>>>>>> ffmpeg-devel at ffmpeg.org
>>>>>>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>>>>>>
>>>>>>>>>> I have enclosed a fixed version. A have changed some code, where
>>>>>>>>>> greater
>>>>>>>>>>
>>>>>>>>>> than 32 bit long sequence numbers were not handled correctly.
>>>>>>>>> (av_get_frame_filename2)
>>>>>>>>>
>>>>>>>>> thank you.
>>>>>>>>> Bela Bodecs
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> ffmpeg-devel mailing list
>>>>>>>>> ffmpeg-devel at ffmpeg.org
>>>>>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> +    {"start_number",  "set first number in the sequence, 0 is
>>>>>>>>> default,
>>>>>>>>>
>>>>>>>>> -1:
>>>>>>>> second since epoch, -2: current datetime as YYYYMMDDhhmmss, actual
>>>>>>>> value
>>>>>>>> otherwise", OFFSET(start_sequence),AV_OPT_TYPE_INT64,  {.i64 = 0},
>>>>>>>>     -2,
>>>>>>>> INT64_MAX, E},
>>>>>>>>
>>>>>>>> I have check this option, i think add flag to control the
>>>>>>>> start_number
>>>>>>>> maybe better,
>>>>>>>> for example:
>>>>>>>> hls_flags
>>>>>>>> hls_playlist_type
>>>>>>>>
>>>>>>>> maybe add a start_number_flags is better, What about you think?
>>>>>>>>
>>>>>>>> Using hls_flags is not enough to specify different values for them.
>>>>>>>>
>>>>>>> NO, i am not mean use hls_flags, i mean you can creat a new flags,
>>>>>>>
>>>>>> start_number_flags
>>>>>>         generic
>>>>>>         epoch
>>>>>>         datetime
>>>>>>
>>>>>> Ok, I see it. May I implement it?
>>>>>
>>>>> yes, of course ;-)
>>>>
>>>>> I thought that there should be 3 options beside this start_number
>>>>>> option.
>>>>>>
>>>>>> hls_start_number_playlist, hls_start_number_segment and
>>>>>>> hls_start_number_vtt
>>>>>>> Using start_number and any of the new 3 ones would be mutualy
>>>>>>> exlusive.
>>>>>>>
>>>>>>> This way anybody could use the old option (start_number) and it won't
>>>>>>> break the current behaviour.
>>>>>>> But those who want to have finer control, they may use the new
>>>>>>> options.
>>>>>>>
>>>>>>> of course -start_number x  has the same effect as using
>>>>>>> -hls_start_number_playlist x -hls_start_number_segment x
>>>>>>> -hls_start_number_vtt x
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>>
>>>>>>> ffmpeg-devel mailing list
>>>>>>>> ffmpeg-devel at ffmpeg.org
>>>>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>>
>>>>>>> ffmpeg-devel mailing list
>>>>>>> ffmpeg-devel at ffmpeg.org
>>>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>>
>>>>>> ffmpeg-devel mailing list
>>>>>> ffmpeg-devel at ffmpeg.org
>>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>>
>>>>>> _______________________________________________
>>>>> ffmpeg-devel mailing list
>>>>> ffmpeg-devel at ffmpeg.org
>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>
>>>>>
>>>> Hi Bodecs,
>>>         If you don't have enough time, i think i can do it together  with
>>> you;)
>>>
>> here it is.
>>
>> _______________________________________________
>>> ffmpeg-devel mailing list
>>> ffmpeg-devel at ffmpeg.org
>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>
>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>>
> +typedef enum {
> +  HLS_START_SEQUNCE_AS_START_NUMBER = 0,
> +  HLS_START_SEQUNCE_AS_SECONDS_SINCE_EPOCH = -1,
> +  HLS_START_SEQUNCE_AS_FORMATTED_DATETIME = -2,  // YYYYMMDDhhmmss
> +} StartSequenceSourceType;
> is this better?
>
> +              av_log(hls, AV_LOG_VERBOSE, "Found playlist sequence number
> was smaller than specified start sequence number: %"PRId64" < %"PRId64",
> omitting\n", tmp_sequence, hls->start_sequence);
>
> this line is too long ,
>
>
>
>
> +    if (hls->start_sequence_source_type ==
> HLS_START_SEQUNCE_AS_SECONDS_SINCE_EPOCH || hls->start_sequence_source_type
> == HLS_START_SEQUNCE_AS_FORMATTED_DATETIME) {
> +        time_t t = time(NULL); // we will need it in either case
> +        if (hls->start_sequence_source_type ==
> HLS_START_SEQUNCE_AS_SECONDS_SINCE_EPOCH) {
> +            hls->start_sequence = (int64_t)t;
> +        } else if (hls->start_sequence_source_type ==
> HLS_START_SEQUNCE_AS_FORMATTED_DATETIME) {
> +            char b[15];
> +            struct tm *p, tmbuf;
> +            if (!(p = localtime_r(&t, &tmbuf)))
> +                return AVERROR(ENOMEM);
> +            if (!strftime(b, sizeof(b), "%Y%m%d%H%M%S", p))
> +                return AVERROR(ENOMEM);
> +            hls->start_sequence = strtoll(b, NULL, 10);
> +        }
> +        av_log(hls, AV_LOG_DEBUG, "start_number evaluated to %"PRId64"\n",
> hls->start_sequence);
> +    }
>
>
> Why twice if here?
>
>
this line (first) is common in each branch:

time_t t = time(NULL); // we will need it in either case

and this line (last) is also common:
av_log(hls, AV_LOG_DEBUG, "start ...

So with the first compound if I spare two lines

> patch probe ok,
>
> My English is poor, and wait English master to review your document :D
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel



More information about the ffmpeg-devel mailing list