[FFmpeg-devel] [PATCH] libavformat/hlsenc: default segment name and, use_localtime

Steven Liu lingjiujianke at gmail.com
Sun Jan 1 05:03:17 EET 2017


2017-01-01 0:56 GMT+08:00 Bodecs Bela <bodecsb at vivanet.hu>:

>
>
> 2016.12.31. 14:19 keltezéssel, Steven Liu írta:
>
>> 2016-12-31 19:16 GMT+08:00 Bodecs Bela <bodecsb at vivanet.hu>:
>>
>>
>>> 2016.12.31. 11:48 keltezéssel, Steven Liu írta:
>>>
>>> 2016-12-31 1:24 GMT+08:00 Bodecs Bela <bodecsb at vivanet.hu>:
>>>>
>>>> 2016.12.30. 18:11 keltezéssel, Moritz Barsnick írta:
>>>>
>>>>> On Fri, Dec 30, 2016 at 15:38:25 +0100, Bodecs Bela wrote:
>>>>>
>>>>>> is not available on all system/environment. This patch checks %s
>>>>>>
>>>>>>> availabilty at runtine and alter the default format string if
>>>>>>> necessary.
>>>>>>>
>>>>>>> You forgot to add the patch.
>>>>>>>
>>>>>> please, forgive me. I attached it now.
>>>>>>
>>>>>
>>>>> Moritz
>>>>>
>>>>>> _______________________________________________
>>>>>> ffmpeg-devel mailing list
>>>>>> ffmpeg-devel at ffmpeg.org
>>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>>
>>>>>> Bela
>>>>>>
>>>>> _______________________________________________
>>>>> ffmpeg-devel mailing list
>>>>> ffmpeg-devel at ffmpeg.org
>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>
>>>>> Signed-off-by: Bela Bodecs <bodecsb at vivanet.hu>
>>>>>
>>>>> ---
>>>>    libavformat/hlsenc.c | 11 ++++++++++-
>>>>    1 file changed, 10 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
>>>> index c9d8e3c..76b85e8 100644
>>>> --- a/libavformat/hlsenc.c
>>>> +++ b/libavformat/hlsenc.c
>>>> @@ -829,13 +829,22 @@ fail:
>>>>        return err;
>>>>    }
>>>>
>>>> +static const char * get_default_pattern_localtime_fmt(void)
>>>> +{
>>>> +    char b[21];
>>>> +    time_t t = time(NULL);
>>>> +    struct tm *p, tmbuf;
>>>> +    p = localtime_r(&t, &tmbuf);
>>>> +    return (strftime(b, sizeof(b), "%s", p) > 2) ? "-%s.ts" :
>>>> "-%Y%m%d%H%I%S.ts";
>>>> Why check strftime result bigger than 2,not 1 not 3?
>>>>
>>>> I have faced different strftime behaviours on two different environments
>>> where unknown specifier was in format string.
>>> On one of them strftime returned 0, this was the expected return value by
>>> me.
>>> But on the other one, strftime returned 2 and put unknown specifier (%s)
>>> as is into the result buffer.
>>> So >2 will handle each cases. In normal behaviour, nowadays, length of
>>> seconds string will be always longer than 2.
>>> Should I put a comment about it into the code?
>>>
>> Maybe add a comment for the value 2 is better.
>>
> you are right. I have changed the testing line to be more self-explanatory.
> I have attached the new patch.
>
>>
>>> +}
>>>
>>>> +
>>>>    static int hls_write_header(AVFormatContext *s)
>>>>    {
>>>>        HLSContext *hls = s->priv_data;
>>>>        int ret, i;
>>>>        char *p;
>>>>        const char *pattern = "%d.ts";
>>>> -    const char *pattern_localtime_fmt = "-%s.ts";
>>>> +    const char *pattern_localtime_fmt =
>>>> get_default_pattern_localtime_fmt();
>>>>        const char *vtt_pattern = "%d.vtt";
>>>>        AVDictionary *options = NULL;
>>>>        int basename_size;
>>>>
>>>> _______________________________________________
>>> 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
>
> ---
 libavformat/hlsenc.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index c9d8e3c..57fc9c1 100644
--- a/libavformat/hlsenc.c
+++ b/libavformat/hlsenc.c
@@ -829,13 +829,23 @@ fail:
     return err;
 }

+static const char * get_default_pattern_localtime_fmt(void)
+{
+    char b[21];
+    time_t t = time(NULL);
+    struct tm *p, tmbuf;
+    p = localtime_r(&t, &tmbuf);
+    // no %s support when strftime returned error or left format string
unchanged
+    return (!strftime(b, sizeof(b), "%s", p) || !strcmp(b, "%s")) ?
"-%Y%m%d%H%I%S.ts" : "-%s.ts";
+}
+
 static int hls_write_header(AVFormatContext *s)
 {
     HLSContext *hls = s->priv_data;
     int ret, i;
     char *p;
     const char *pattern = "%d.ts";
-    const char *pattern_localtime_fmt = "-%s.ts";
+    const char *pattern_localtime_fmt =
get_default_pattern_localtime_fmt();
     const char *vtt_pattern = "%d.vtt";
     AVDictionary *options = NULL;
     int basename_size;
-- 
2.10.1.382.ga23ca1b.dirty



applied!





Thanks


More information about the ffmpeg-devel mailing list