[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