[FFmpeg-trac] #8989(ffmpeg:new): #EXT-X-PROGRAM-DATE-TIME value of existing segments gets over written with new value when appending new segments to an existing playlist file
FFmpeg
trac at avcodec.org
Mon Nov 16 07:41:56 EET 2020
#8989: #EXT-X-PROGRAM-DATE-TIME value of existing segments gets over written with
new value when appending new segments to an existing playlist file
-------------------------------------+-------------------------------------
Reporter: | Type: defect
VigneshRavichandran |
Status: new | Priority: normal
Component: ffmpeg | Version: git-
Keywords: hls | master
playlist ffmpeg m3u8 EXT-X | Blocked By:
-PROGRAM-DATE-TIME append_list |
program_date_time |
Blocking: | Reproduced by developer: 1
Analyzed by developer: 1 |
-------------------------------------+-------------------------------------
Summary of the bug:
#EXT-X-PROGRAM-DATE-TIME value of existing segments gets over written with
new value when appending new segments to an existing playlist file.
Did some digging into the code base(hlsenc.c and hlsplaylist.c) and found
the below behavior:
1. The initial_prog_date_time gets set to the current local time
2. The existing playlist (.m3u8) file gets parsed and the segments present
are added to the variant stream
3. The new segment is created and added
4. The existing segments and the new segment are written to the playlist
file.
The initial_prog_date_time from point 1 is used for calculating "#EXT-X
-PROGRAM-DATE-TIME" for the segments,
which results in incorrect "#EXT-X-PROGRAM-DATE-TIME" values for
existing segments
Contents of the existing playlist file (.m3u8) used for debugging:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-DISCONTINUITY
#EXTINF:4.000000,
#EXT-X-PROGRAM-DATE-TIME:2020-11-12T19:31:50.104+0530
20201112T193150+0530.ts
#EXTINF:4.000000,
#EXT-X-PROGRAM-DATE-TIME:2020-11-12T19:31:54.104+0530
20201112T193154+0530.ts
#EXTINF:0.900000,
#EXT-X-PROGRAM-DATE-TIME:2020-11-12T19:31:58.104+0530
20201112T193158+0530.ts
#EXT-X-ENDLIST
Contents of the playlist file after command execution:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-DISCONTINUITY
#EXTINF:4.000000,
#EXT-X-PROGRAM-DATE-TIME:2020-11-13T11:40:48.848+0530
20201112T193150+0530.ts
#EXTINF:4.000000,
#EXT-X-PROGRAM-DATE-TIME:2020-11-13T11:40:52.848+0530
20201112T193154+0530.ts
#EXTINF:0.900000,
#EXT-X-PROGRAM-DATE-TIME:2020-11-13T11:40:56.848+0530
20201112T193158+0530.ts
#EXT-X-DISCONTINUITY
#EXTINF:4.000000,
#EXT-X-PROGRAM-DATE-TIME:2020-11-13T11:40:57.748+0530
20201113T114057+0530.ts
#EXTINF:4.000000,
#EXT-X-PROGRAM-DATE-TIME:2020-11-13T11:41:01.748+0530
20201113T114101+0530.ts
#EXTINF:0.800000,
#EXT-X-PROGRAM-DATE-TIME:2020-11-13T11:41:05.748+0530
20201113T114105+0530.ts
#EXT-X-ENDLIST
Logs (Added more logs to hlsenc.c and hlsplaylist.c to produce the below):
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (h264_videotoolbox))
Press [q] to stop, [?] for help
[hls muxer @ 0x7fd19e80b200] parse_playlist(): Parsing
20201112T193150+0530.ts
[hls muxer @ 0x7fd19e80b200] parse_playlist(): Parsing
20201112T193154+0530.ts
[hls muxer @ 0x7fd19e80b200] parse_playlist(): Parsing
20201112T193158+0530.ts
[hls muxer @ 0x7fd19e80b200] parse_playlist(): Initial program date time:
1605247848.848017 // This Epoch second is equal to
2020-11-13T11:40:48.848+0530
[hls muxer @ 0x7fd19e80b200] parse_playlist(): Parsing complete. 3
segments added to vs->segments
Output #0, hls, to 'playlist.m3u8':
Metadata:
encoder : Lavf58.64.100
Stream #0:0: Video: h264 (h264_videotoolbox), yuv420p(tv,
progressive), 1280x720, q=2-31, 200 kb/s, 30 fps, 90k tbn, 30 tbc
Metadata:
encoder : Lavc58.112.102 h264_videotoolbox
[hls @ 0x7fd19e81c000] Opening '20201113T114057+0530.ts' for writing=72
drop=0 speed=0.974x
[hls @ 0x7fd19e81c000] Opening 'playlist.m3u8.tmp' for writing
ff_hls_write_file_entry(): Writing 20201112T193150+0530.ts with
program_datetime 2020-11-13T11:40:48.848+0530
ff_hls_write_file_entry(): Writing 20201112T193154+0530.ts with
program_datetime 2020-11-13T11:40:52.848+0530
ff_hls_write_file_entry(): Writing 20201112T193158+0530.ts with
program_datetime 2020-11-13T11:40:56.848+0530
ff_hls_write_file_entry(): Writing 20201113T114057+0530.ts with
program_datetime 2020-11-13T11:40:57.748+0530
[hls @ 0x7fd19e81c000] Opening '20201113T114101+0530.ts' for writing=146
drop=0 speed=0.984x
[hls @ 0x7fd19e81c000] Opening 'playlist.m3u8.tmp' for writing
ff_hls_write_file_entry(): Writing 20201112T193150+0530.ts with
program_datetime 2020-11-13T11:40:48.848+0530
ff_hls_write_file_entry(): Writing 20201112T193154+0530.ts with
program_datetime 2020-11-13T11:40:52.848+0530
ff_hls_write_file_entry(): Writing 20201112T193158+0530.ts with
program_datetime 2020-11-13T11:40:56.848+0530
ff_hls_write_file_entry(): Writing 20201113T114057+0530.ts with
program_datetime 2020-11-13T11:40:57.748+0530
ff_hls_write_file_entry(): Writing 20201113T114101+0530.ts with
program_datetime 2020-11-13T11:41:01.748+0530
[hls @ 0x7fd19e81c000] Opening '20201113T114105+0530.ts' for writing=155
drop=0 speed=0.984x
[hls @ 0x7fd19e81c000] Opening 'playlist.m3u8.tmp' for writing
ff_hls_write_file_entry(): Writing 20201112T193150+0530.ts with
program_datetime 2020-11-13T11:40:48.848+0530
ff_hls_write_file_entry(): Writing 20201112T193154+0530.ts with
program_datetime 2020-11-13T11:40:52.848+0530
ff_hls_write_file_entry(): Writing 20201112T193158+0530.ts with
program_datetime 2020-11-13T11:40:56.848+0530
ff_hls_write_file_entry(): Writing 20201113T114057+0530.ts with
program_datetime 2020-11-13T11:40:57.748+0530
ff_hls_write_file_entry(): Writing 20201113T114101+0530.ts with
program_datetime 2020-11-13T11:41:01.748+0530
ff_hls_write_file_entry(): Writing 20201113T114105+0530.ts with
program_datetime 2020-11-13T11:41:05.748+0530
frame= 264 fps= 30 q=-0.0 Lsize=N/A time=00:00:08.80 bitrate=N/A dup=159
drop=0 speed=1.01x
video:222kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: unknown
How to reproduce:
{{{
% ffmpeg -re \
-f avfoundation \
-framerate 30 -i 0 \
-codec:v h264_videotoolbox \
-an \
-f hls -hls_list_size 600 -hls_time 4 -hls_flags
program_date_time+append_list -strftime 1 -hls_segment_filename
'%Y%m%dT%H%M%S%z.ts' \
playlist.m3u8
ffmpeg version: git-master
built on: Mac OSX Catalina (Version 10.15.5)
}}}
--
Ticket URL: <https://trac.ffmpeg.org/ticket/8989>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list