2016-12-26 17:55 GMT+08:00 Steven Liu <lingjiujia...@gmail.com>: > > > 2016-12-26 17:05 GMT+08:00 Steven Liu <lingjiujia...@gmail.com>: > >> >> >> 2016-12-26 9:14 GMT+08:00 Bodecs Bela <bode...@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 <bode...@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 <bode...@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@ffmpeg.org >>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >>> >>> >> > > localhost:mpegts liuqi$ ./ffmpeg -loglevel info -y -f lavfi -i > color=c=red:size=640x480:r=25 -f lavfi -f lavfi -i > color=c=pink:size=1920x1080:r=25 -f lavfi -i anullsrc=r=44100:cl=stereo > -f lavfi -i anullsrc=r=44100:cl=stereo -filter_complex > "[1]setpts=PTS-STARTPTS[1o]; [0:v]setpts=PTS-STARTPTS [0vo]; [1o][0vo] > overlay=x=10:y=10 , split=3 [v1][v2][vimg] ; [v1] scale=size=960x540, > setdar=dar=16/9, nullsink ; [v2] scale=size=640x360, setdar=dar=16/9 , > nullsink ; [vimg] fps=1/5, scale=size=320x180, nullsink ; > [3]asetpts=PTS-STARTPTS [0ao]; [2]asetpts=PTS-STARTPTS [2o]; [0ao][2o] amix > [aout1] " -map "[aout1]" -acodec aac -cutoff 20000 -ac 2 -ar 44100 -ab > 192k -f hls -hls_time 3 -hls_list_size 100 -hls_flags delete_segments > -use_localtime 1 -hls_segment_filename 'segment%Y%m%d%H%M%S.ts' > stream.m3u8}}} > ffmpeg version N-82932-g6e26b6e Copyright (c) 2000-2016 the FFmpeg > developers > built with Apple LLVM version 8.0.0 (clang-800.0.42.1) > configuration: --enable-fontconfig --enable-gpl --enable-libass > --enable-libbluray --enable-libfreetype --enable-libmp3lame > --enable-libspeex --enable-libx264 --enable-libx265 --enable-version3 > --cc='ccache gcc' > libavutil 55. 43.100 / 55. 43.100 > libavcodec 57. 70.100 / 57. 70.100 > libavformat 57. 61.100 / 57. 61.100 > libavdevice 57. 2.100 / 57. 2.100 > libavfilter 6. 68.100 / 6. 68.100 > libswscale 4. 3.101 / 4. 3.101 > libswresample 2. 4.100 / 2. 4.100 > libpostproc 54. 2.100 / 54. 2.100 > Input #0, lavfi, from 'color=c=red:size=640x480:r=25': > Duration: N/A, start: 0.000000, bitrate: N/A > Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 640x480 > [SAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc > Input #1, lavfi, from 'color=c=pink:size=1920x1080:r=25': > Duration: N/A, start: 0.000000, bitrate: N/A > Stream #1:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 1920x1080 > [SAR 1:1 DAR 16:9], 25 tbr, 25 tbn, 25 tbc > Input #2, lavfi, from 'anullsrc=r=44100:cl=stereo': > Duration: N/A, start: 0.000000, bitrate: 705 kb/s > Stream #2:0: Audio: pcm_u8, 44100 Hz, stereo, u8, 705 kb/s > Input #3, lavfi, from 'anullsrc=r=44100:cl=stereo': > Duration: N/A, start: 0.000000, bitrate: 705 kb/s > Stream #3:0: Audio: pcm_u8, 44100 Hz, stereo, u8, 705 kb/s > [mpegts @ 0x7feb3b808400] frame size not set > Output #0, hls, to 'stream.m3u8}}}': > Metadata: > encoder : Lavf57.61.100 > Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 192 kb/s > (default) > Metadata: > encoder : Lavc57.70.100 aac > Stream mapping: > Stream #0:0 (rawvideo) -> setpts > Stream #1:0 (rawvideo) -> setpts > Stream #2:0 (pcm_u8) -> asetpts > Stream #3:0 (pcm_u8) -> asetpts > amix -> Stream #0:0 (aac) > Press [q] to stop, [?] for help > [hls muxer @ 0x7feb3c02a800] Duplicated segment filename detected: > segment20161226175432.ts > [hls muxer @ 0x7feb3c02a800] Duplicated segment filename detected: > segment20161226175433.ts > Last message repeated 1 times > [hls muxer @ 0x7feb3c02a800] Duplicated segment filename detected: > segment20161226175434.ts > [hls muxer @ 0x7feb3c02a800] Duplicated segment filename detected: > segment20161226175436.ts > [hls muxer @ 0x7feb3c02a800] Duplicated segment filename detected: > segment20161226175436.ts > Last message repeated 1 times > [hls muxer @ 0x7feb3c02a800] Duplicated segment filename detected: > segment20161226175438.ts > [hls muxer @ 0x7feb3c02a800] Duplicated segment filename detected: > segment20161226175439.ts > [hls muxer @ 0x7feb3c02a800] Duplicated segment filename detected: > segment20161226175439.ts > [hls muxer @ 0x7feb3c02a800] Duplicated segment filename detected: > segment20161226175440.ts > size=N/A time=00:01:05.03 bitrate=N/A speed=5.93x > video:0kB audio:17kB subtitle:0kB other streams:0kB global headers:0kB > muxing overhead: unknown > [aac @ 0x7feb3c02be00] Qavg: 65536.000 > Exiting normally, received signal 2. > localhost:mpegts liuqi$ cat stream.m3u8}}} > #EXTM3U > #EXT-X-VERSION:3 > #EXT-X-TARGETDURATION:4 > #EXT-X-MEDIA-SEQUENCE:0 > #EXTINF:3.018600, > segment20161226175430.ts > #EXTINF:2.995367, > segment20161226175431.ts > #EXTINF:2.995378, > segment20161226175432.ts > #EXTINF:2.995378, > segment20161226175432.ts > #EXTINF:2.995367, > segment20161226175433.ts > #EXTINF:3.018600, > segment20161226175433.ts > #EXTINF:2.995378, > segment20161226175433.ts > #EXTINF:2.995367, > segment20161226175434.ts > #EXTINF:2.995378, > segment20161226175434.ts > #EXTINF:2.995378, > segment20161226175435.ts > #EXTINF:3.018589, > segment20161226175436.ts > #EXTINF:2.995378, > segment20161226175436.ts > #EXTINF:2.995367, > segment20161226175436.ts > #EXTINF:2.995378, > segment20161226175436.ts > #EXTINF:2.995378, > segment20161226175437.ts > #EXTINF:3.018589, > segment20161226175438.ts > #EXTINF:2.995378, > segment20161226175438.ts > #EXTINF:2.995378, > segment20161226175439.ts > #EXTINF:2.995367, > segment20161226175439.ts > #EXTINF:2.995378, > segment20161226175439.ts > #EXTINF:3.018589, > segment20161226175440.ts > #EXTINF:2.020144, > segment20161226175440.ts > #EXT-X-ENDLIST > > > > > > Tested pass! > > > applied!
Thanks _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel