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! _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel