[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