[FFmpeg-devel] [PATCH] avformat/hlsenc: detecting duplicated segment filenames

Steven Liu lingjiujianke at gmail.com
Mon Dec 26 11:05:09 EET 2016


2016-12-26 9:14 GMT+08:00 Bodecs Bela <bodecsb at vivanet.hu>:

> Dear All,
>
> with use_localtime parameter hlsenc may produce identical filenames for
> different but still existing segments. It happens when
> hls_segment_filename contains
> syntacticaly correct but inadequate format parameters. Currently there
> is no any log message when such a situaton occurs but these cases should
> be avoided in most times. This patch generate warning log messages in these
> cases.
>
> best regards,
>
> bb
>
>> From 7055e0b0bec3fee61373dd446bcab24d15117b7e Mon Sep 17 00:00:00 2001
>
> From: Bela Bodecs <bodecsb at vivanet.hu>
>
> Date: Mon, 26 Dec 2016 02:00:49 +0100
>
> Subject: [PATCH] avformat/hlsenc: detecting duplicated segment filenames
>
>
>> with use_localtime parameter hlsenc may produce identical filenames for
>
> different but still existing segments. It happens when
>
> hls_segment_filename contains
>
> syntacticaly correct but inadequate format parameters. Currently there
>
> is no any log message when such a situaton occurs but these cases should
>
> be avoided in most times. This patch generate warning messages in these
>
> cases.
>
>
>> Signed-off-by: Bela Bodecs <bodecsb at vivanet.hu>
>
> ---
>
>  libavformat/hlsenc.c | 34 ++++++++++++++++++++++++++++++++++
>
>  1 file changed, 34 insertions(+)
>
>
>> diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
>
> index acf3a30..11ec3b8 100644
>
> --- a/libavformat/hlsenc.c
>
> +++ b/libavformat/hlsenc.c
>
> @@ -653,6 +653,38 @@ fail:
>
>      return ret;
>
>  }
>
>
>
> +static HLSSegment * find_segment_by_filename(HLSSegment * segment, const
>> char * filename)
>
> +{
>
> +    /* filename may contain rel/abs path, but segments store only
>> basename */
>
> +    char *p, *dirname, *path;
>
> +    int path_size;
>
> +    HLSSegment *ret_segment = NULL;
>
> +    dirname = av_strdup(filename);
>
> +    if (!dirname)
>
> +        return NULL;
>
> +    p = (char *)av_basename(dirname); // av_dirname would return . in
>> case of no dir
>
> +    *p = '\0'; // maybe empty
>
> +
>
> +    while (segment) {
>
> +        path_size = strlen(dirname) + strlen(segment->filename) + 1;
>
> +        path = av_malloc(path_size);
>
> +        if (!path)
>
> +            goto end;
>
> +        av_strlcpy(path, dirname, path_size);
>
> +        av_strlcat(path, segment->filename, path_size);
>
> +        if (!strcmp(path,filename)) {
>
> +            ret_segment = segment;
>
> +            av_free(path);
>
> +            goto end;
>
> +        }
>
> +        av_free(path);
>
> +        segment = segment->next;
>
> +    }
>
> +end:
>
> +    av_free(dirname);
>
> +    return ret_segment;
>
> +}
>
> +
>
>  static int hls_start(AVFormatContext *s)
>
>  {
>
>      HLSContext *c = s->priv_data;
>
> @@ -685,6 +717,8 @@ static int hls_start(AVFormatContext *s)
>
>                  av_log(oc, AV_LOG_ERROR, "Could not get segment filename
>> with use_localtime\n");
>
>                  return AVERROR(EINVAL);
>
>              }
>
> +            if (find_segment_by_filename(c->segments, oc->filename) ||
>> find_segment_by_filename(c->old_segments, oc->filename))
>
> +                av_log(c, AV_LOG_WARNING, "Duplicated segment filename
>> detected: %s\n",oc->filename);
>
>
>
>              if (c->use_localtime_mkdir) {
>
>                  const char *dir;
>
> --
>
> 2.5.3.windows.1
>
>
>>
LTGM




>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
>


More information about the ffmpeg-devel mailing list