[FFmpeg-trac] #7831(avformat:new): remuxing to HLS using "hs_segment_size" creates corrupted segments

FFmpeg trac at avcodec.org
Sun Apr 7 22:57:53 EEST 2019


#7831: remuxing to HLS using "hs_segment_size" creates corrupted segments
----------------------------------+--------------------------------------
             Reporter:  barsnick  |                     Type:  defect
               Status:  new       |                 Priority:  normal
            Component:  avformat  |                  Version:  git-master
             Keywords:  hls       |               Blocked By:
             Blocking:            |  Reproduced by developer:  0
Analyzed by developer:  0         |
----------------------------------+--------------------------------------
 Summary of the bug:

 Remuxing a perfectly decodeble input video to HLS creates a corrupted
 output video. Various errors are detected by ffmpeg when decoding the
 result.

 A user reported this as a bumpy browser playback of the HLS created by
 ffmpeg:
 http://ffmpeg.org/pipermail/ffmpeg-user/2019-April/043969.html

 How to reproduce:
 {{{
 $ ../ffmpeg -i https://sample-
 videos.com/video123/mp4/720/big_buck_bunny_720p_30mb.mp4 -vcodec copy -an
 -hls_list_size 0 -hls_segment_size 3000000 -f hls badmux.m3u8
 ffmpeg version N-93534-g208ae228fa Copyright (c) 2000-2019 the FFmpeg
 developers
   built with gcc 7 (GCC)
   configuration: --enable-gpl --enable-gnutls --enable-libx264 --disable-
 doc --disable-everything --disable-vdpau --enable-indev=lavfi --enable-
 muxer=null --enable-demuxer='mov,mp4,m4a,3gp,3g2,mj2,hls,mpegts' --enable-
 encoder='wrapped_avframe,libx264' --enable-decoder='rawvideo,h264'
 --enable-filter='testsrc,null,scale' --enable-muxer='mpegts,hls' --enable-
 protocol='file,tcp,http,tls,https' --enable-bsf=h264_mp4toannexb
   libavutil      56. 26.100 / 56. 26.100
   libavcodec     58. 48.101 / 58. 48.101
   libavformat    58. 27.100 / 58. 27.100
   libavdevice    58.  7.100 / 58.  7.100
   libavfilter     7. 48.100 /  7. 48.100
   libswscale      5.  4.100 /  5.  4.100
   libswresample   3.  4.100 /  3.  4.100
   libpostproc    55.  4.100 / 55.  4.100
 Guessed Channel Layout for Input Stream #0.1 : 5.1
 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'https://sample-
 videos.com/video123/mp4/720/big_buck_bunny_720p_30mb.mp4':
   Metadata:
     major_brand     : isom
     minor_version   : 512
     compatible_brands: isomiso2avc1mp41
     creation_time   : 1970-01-01T00:00:00.000000Z
     encoder         : Lavf53.24.2
   Duration: 00:02:50.86, start: 0.000000, bitrate: 1474 kb/s
     Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p,
 1280x720 [SAR 1:1 DAR 16:9], 1086 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc
 (default)
     Metadata:
       creation_time   : 1970-01-01T00:00:00.000000Z
       handler_name    : VideoHandler
     Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, 5.1, 383
 kb/s (default)
     Metadata:
       creation_time   : 1970-01-01T00:00:00.000000Z
       handler_name    : SoundHandler
 [hls @ 0x292e040] Opening 'badmux0.ts' for writing
 Output #0, hls, to 'badmux.m3u8':
   Metadata:
     major_brand     : isom
     minor_version   : 512
     compatible_brands: isomiso2avc1mp41
     encoder         : Lavf58.27.100
     Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p,
 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 1086 kb/s, 25 fps, 25 tbr, 90k tbn,
 25 tbc (default)
     Metadata:
       creation_time   : 1970-01-01T00:00:00.000000Z
       handler_name    : VideoHandler
 Stream mapping:
   Stream #0:0 -> #0:0 (copy)
 Press [q] to stop, [?] for help
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writingtrate=N/A
 speed=4.97x
     Last message repeated 1 times
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writingtrate=N/A
 speed=12.3x
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writingtrate=N/A speed=
 13x
     Last message repeated 2 times
 [hls @ 0x292e040] Opening 'badmux1.ts' for writing40 bitrate=N/A
 speed=13.1x
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writing
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writingtrate=N/A
 speed=12.1x
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writingtrate=N/A
 speed=13.3x
     Last message repeated 2 times
 [hls @ 0x292e040] Opening 'badmux2.ts' for writing32 bitrate=N/A
 speed=14.5x
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writing
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writingtrate=N/A
 speed=14.5x
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writingtrate=N/A
 speed=14.6x
     Last message repeated 1 times
 [hls @ 0x292e040] Opening 'badmux3.ts' for writing24 bitrate=N/A
 speed=14.2x
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writing
     Last message repeated 1 times
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writingtrate=N/A
 speed=14.4x
 [hls @ 0x292e040] Opening 'badmux4.ts' for writing48 bitrate=N/A
 speed=14.6x
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writing
     Last message repeated 1 times
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writingtrate=N/A
 speed=14.6x
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writingtrate=N/A
 speed=14.7x
     Last message repeated 3 times
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writingtrate=N/A
 speed=14.5x
 [hls @ 0x292e040] Opening 'badmux5.ts' for writing
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writing
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writingtrate=N/A
 speed=14.6x
     Last message repeated 2 times
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writingtrate=N/A
 speed=14.4x
 [hls @ 0x292e040] Opening 'badmux6.ts' for writing72 bitrate=N/A
 speed=14.2x
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writing
     Last message repeated 1 times
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writingtrate=N/A
 speed=14.1x
     Last message repeated 2 times
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writingtrate=N/A
 speed=13.8x
     Last message repeated 1 times
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writingtrate=N/A speed=
 14x
     Last message repeated 2 times
 [hls @ 0x292e040] Opening 'badmux7.ts' for writing92 bitrate=N/A
 speed=13.8x
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writing
     Last message repeated 1 times
 [hls @ 0x292e040] Opening 'badmux.m3u8.tmp' for writingtrate=N/A
 speed=13.6x
 frame= 4271 fps=340 q=-1.0 Lsize=N/A time=00:02:50.84 bitrate=N/A
 speed=13.6x
 video:22650kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: unknown
 }}}
 (I recommend downloading the sample, the server throttles you after some
 attempts.)
 This results in this erroneous decode:
 {{{
 $ ../ffmpeg -i badmux.m3u8 -f null -
 ffmpeg version N-93534-g208ae228fa Copyright (c) 2000-2019 the FFmpeg
 developers
   built with gcc 7 (GCC)
   configuration: --enable-gpl --enable-gnutls --enable-libx264 --disable-
 doc --disable-everything --disable-vdpau --enable-indev=lavfi --enable-
 muxer=null --enable-demuxer='mov,mp4,m4a,3gp,3g2,mj
 2,hls,mpegts' --enable-encoder='wrapped_avframe,libx264' --enable-
 decoder='rawvideo,h264' --enable-filter='testsrc,null,scale' --enable-
 muxer='mpegts,hls' --enable-protocol='file,tcp,http,tls,htt
 ps' --enable-bsf=h264_mp4toannexb
   libavutil      56. 26.100 / 56. 26.100
   libavcodec     58. 48.101 / 58. 48.101
   libavformat    58. 27.100 / 58. 27.100
   libavdevice    58.  7.100 / 58.  7.100
   libavfilter     7. 48.100 /  7. 48.100
   libswscale      5.  4.100 /  5.  4.100
   libswresample   3.  4.100 /  3.  4.100
   libpostproc    55.  4.100 / 55.  4.100
 [hls,applehttp @ 0x12cbb00] Opening 'badmux0.ts' for reading
 Input #0, hls,applehttp, from 'badmux.m3u8':
   Duration: 00:02:50.84, start: 1.400000, bitrate: 0 kb/s
   Program 0
     Metadata:
       variant_bitrate : 0
     Stream #0:0: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p,
 1280x720 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
     Metadata:
       variant_bitrate : 0
 Stream mapping:
   Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))
 Press [q] to stop, [?] for help
 Output #0, null, to 'pipe:':
   Metadata:
     encoder         : Lavf58.27.100
     Stream #0:0: Video: wrapped_avframe, yuv420p, 1280x720 [SAR 1:1 DAR
 16:9], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
     Metadata:
       variant_bitrate : 0
       encoder         : Lavc58.48.101 wrapped_avframe
 [hls,applehttp @ 0x12cbb00] Opening 'badmux0.ts' for reading
     Last message repeated 1 times
 [hls,applehttp @ 0x12cbb00] Opening 'badmux0.ts' for reading=N/A
 speed=26.3x
     Last message repeated 3 times
 [hls,applehttp @ 0x12cbb00] Opening 'badmux1.ts' for reading
 [h264 @ 0x137c740] concealing 550 DC, 550 AC, 550 MV errors in P
 frame=26.4x
 [hls,applehttp @ 0x12cbb00] Opening 'badmux1.ts' for reading
 [hls,applehttp @ 0x12cbb00] Opening 'badmux1.ts' for reading=N/A speed=
 26x
     Last message repeated 2 times
 [hls,applehttp @ 0x12cbb00] Opening 'badmux2.ts' for reading
 badmux.m3u8: corrupt input packet in stream 0
 [h264 @ 0x12df9c0] error while decoding MB 0 43, bytestream -13
 [h264 @ 0x12df9c0] concealing 209 DC, 209 AC, 209 MV errors in P frame
 [hls,applehttp @ 0x12cbb00] Opening 'badmux2.ts' for reading=N/A
 speed=28.3x
     Last message repeated 1 times
 [hls,applehttp @ 0x12cbb00] Opening 'badmux2.ts' for reading=N/A speed=
 28x
 [hls,applehttp @ 0x12cbb00] Opening 'badmux3.ts' for reading
 badmux.m3u8: corrupt input packet in stream 0
 [h264 @ 0x12f1740] concealing 3282 DC, 3282 AC, 3282 MV errors in P frame
 [hls,applehttp @ 0x12cbb00] Opening 'badmux3.ts' for reading
 [hls,applehttp @ 0x12cbb00] Opening 'badmux3.ts' for reading=N/A
 speed=27.7x
 [hls,applehttp @ 0x12cbb00] Opening 'badmux4.ts' for reading=N/A
 speed=27.6x
 badmux.m3u8: corrupt input packet in stream 0
 [h264 @ 0x12df9c0] concealing 2495 DC, 2495 AC, 2495 MV errors in P frame
 [hls,applehttp @ 0x12cbb00] Opening 'badmux4.ts' for reading
     Last message repeated 1 times
 [hls,applehttp @ 0x12cbb00] Opening 'badmux4.ts' for reading=N/A speed=
 28x
     Last message repeated 4 times
 [hls,applehttp @ 0x12cbb00] Opening 'badmux5.ts' for reading
 badmux.m3u8: corrupt input packet in stream 0
 [h264 @ 0x137c740] concealing 2582 DC, 2582 AC, 2582 MV errors in P frame
 [hls,applehttp @ 0x12cbb00] Opening 'badmux5.ts' for reading=N/A
 speed=28.2x
     Last message repeated 3 times
 [hls,applehttp @ 0x12cbb00] Opening 'badmux6.ts' for reading=N/A
 speed=27.8x
 badmux.m3u8: corrupt input packet in stream 0
 [h264 @ 0x1374500] concealing 977 DC, 977 AC, 977 MV errors in P frame
 [hls,applehttp @ 0x12cbb00] Opening 'badmux6.ts' for reading
     Last message repeated 4 times
 [hls,applehttp @ 0x12cbb00] Opening 'badmux6.ts' for reading=N/A
 speed=27.8x
     Last message repeated 3 times
 [hls,applehttp @ 0x12cbb00] Opening 'badmux7.ts' for reading
 badmux.m3u8: corrupt input packet in stream 0
 [h264 @ 0x12f1740] concealing 2096 DC, 2096 AC, 2096 MV errors in P frame
 [hls,applehttp @ 0x12cbb00] Opening 'badmux7.ts' for reading=N/A
 speed=27.5x
 frame= 4049 fps=653 q=-0.0 Lsize=N/A time=00:02:50.84 bitrate=N/A
 speed=27.6x
 video:2119kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: unknown
 }}}

 If audio is included in the mux, e.g. AAC, decoding also exposes errors.

 Note that decoding of individual segments is also broken.

 When omitting the option {{{-hls_segment_size}}}, the errors do not occur.

 The issue is also reproducible with testsrc input and encoding, if I
 remember correctly, but the segment size may need to be chosen
 differently.

--
Ticket URL: <https://trac.ffmpeg.org/ticket/7831>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list