[FFmpeg-trac] #7673(undetermined:new): Fails to play long (30+ hours) hls playlist
FFmpeg
trac at avcodec.org
Sat Jan 12 14:48:53 EET 2019
#7673: Fails to play long (30+ hours) hls playlist
-------------------------------------+-------------------------------------
Reporter: Jasdf923 | Type: defect
Status: new | Priority: normal
Component: | Version: git-
undetermined | master
Keywords: hls m3u | Blocked By:
m3u8 playlist | Reproduced by developer: 0
Blocking: |
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
Summary of the bug:
ffmpeg (ffplay) fails to play a long hls playlist. Trying to seek to
somewhere after roughly after 27 hours does not work.
How to reproduce:
First, generate a long playlist. I am using the following command. It
creates a lot of files totalling about 750MiB, so run it in a new
directory.
{{{
ffmpeg -t 165600 -f lavfi -i color=c=black:s=2x2 -c:v libx264 -tune
stillimage -pix_fmt yuv420p -hls_time 10 -hls_playlist_type vod
playlist.m3u8
}}}
This is 46 hours of blank video split into 10 second segments.
{{{
ffmpeg -v 9 -loglevel 99 -i playlist.m3u8
ffmpeg version n4.1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 8.2.1 (GCC) 20180831
configuration: --prefix=/usr --disable-debug --disable-static --disable-
stripping --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl
--enable-ladspa --enable-libaom --enable-libass --enable-libbluray
--enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm
--enable-libiec61883 --enable-libjack --enable-libmodplug --enable-
libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-
libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-
libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-
libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-
libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid
--enable-nvdec --enable-nvenc --enable-omx --enable-shared --enable-
version3
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
Splitting the commandline.
Reading option '-v' ... matched as option 'v' (set logging level) with
argument '9'.
Reading option '-loglevel' ... matched as option 'loglevel' (set logging
level) with argument '99'.
Reading option '-i' ... matched as input url with argument
'playlist.m3u8'.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option v (set logging level) with argument 9.
Successfully parsed a group of options.
Parsing a group of options: input url playlist.m3u8.
Successfully parsed a group of options.
Opening an input file: playlist.m3u8.
[NULL @ 0x5610dd18edc0] Opening 'playlist.m3u8' for reading
[file @ 0x5610dd18f8c0] Setting default whitelist 'file,crypto'
Probing hls,applehttp score:100 size:2048
[hls,applehttp @ 0x5610dd18edc0] Format hls,applehttp probed with
size=2048 and score=100
[hls,applehttp @ 0x5610dd18edc0] new_program: id=0x0000
[hls,applehttp @ 0x5610dd18edc0] HLS request for url 'playlist0.ts',
offset 0, playlist 0
[hls,applehttp @ 0x5610dd18edc0] Opening 'playlist0.ts' for reading
Probing mpeg score:25 size:2048
Probing mpegts score:50 size:2048
Format mpegts probed with size=2048 and score=50
score: 44, dvhs_score: -2, fec_score: -2
[mpegts @ 0x5610dd4a6880] Filter: pid=0x11 type=1
[mpegts @ 0x5610dd4a6880] Filter: pid=0x0 type=1
[mpegts @ 0x5610dd4a6880] SDT:
[mpegts @ 0x5610dd4a6880] tag: 0x48 len=18
[mpegts @ 0x5610dd4a6880] new_program: id=0x0001
[mpegts @ 0x5610dd4a6880] PAT:
[mpegts @ 0x5610dd4a6880] sid=0x1 pid=0x1000
[mpegts @ 0x5610dd4a6880] new_program: id=0x0001
[mpegts @ 0x5610dd4a6880] Filter: pid=0x1000 type=1
[mpegts @ 0x5610dd4a6880] PMT: len 21
[mpegts @ 0x5610dd4a6880] sid=0x1 sec_num=0/0 version=0 tid=2
[mpegts @ 0x5610dd4a6880] pcr_pid=0x100
[mpegts @ 0x5610dd4a6880] Filter: pid=0x100 type=0
[mpegts @ 0x5610dd4a6880] stream=0 stream_type=1b pid=100 prog_reg_desc=
[mpegts @ 0x5610dd4a6880] tuning done
[hls,applehttp @ 0x5610dd18edc0] Before avformat_find_stream_info() pos:
585164 bytes read:585164 seeks:0 nb_streams:1
[mpegts @ 0x5610dd4a6880] Skipping after seek
[mpegts @ 0x5610dd4a6880] SDT:
[mpegts @ 0x5610dd4a6880] tag: 0x48 len=18
[mpegts @ 0x5610dd4a6880] new_program: id=0x0001
[mpegts @ 0x5610dd4a6880] PAT:
[mpegts @ 0x5610dd4a6880] sid=0x1 pid=0x1000
[mpegts @ 0x5610dd4a6880] new_program: id=0x0001
[mpegts @ 0x5610dd4a6880] PMT: len 21
[mpegts @ 0x5610dd4a6880] sid=0x1 sec_num=0/0 version=0 tid=2
[mpegts @ 0x5610dd4a6880] pcr_pid=0x100
[mpegts @ 0x5610dd4a6880] pid=100 pes_code=0x1e0
Last message repeated 2 times
[AVBSFContext @ 0x5610dd4bf340] nal_unit_type: 9(AUD), nal_ref_idc: 0
[AVBSFContext @ 0x5610dd4bf340] nal_unit_type: 7(SPS), nal_ref_idc: 3
[AVBSFContext @ 0x5610dd4bf340] nal_unit_type: 8(PPS), nal_ref_idc: 3
[AVBSFContext @ 0x5610dd4bf340] nal_unit_type: 6(SEI), nal_ref_idc: 0
[AVBSFContext @ 0x5610dd4bf340] nal_unit_type: 5(IDR), nal_ref_idc: 3
[h264 @ 0x5610dd4bd300] nal_unit_type: 9(AUD), nal_ref_idc: 0
[h264 @ 0x5610dd4bd300] nal_unit_type: 7(SPS), nal_ref_idc: 3
[h264 @ 0x5610dd4bd300] nal_unit_type: 8(PPS), nal_ref_idc: 3
[h264 @ 0x5610dd4bd300] nal_unit_type: 6(SEI), nal_ref_idc: 0
[h264 @ 0x5610dd4bd300] nal_unit_type: 5(IDR), nal_ref_idc: 3
[h264 @ 0x5610dd4bd300] Format yuv420p chosen by get_format().
[h264 @ 0x5610dd4bd300] Reinit context to 16x16, pix_fmt: yuv420p
[h264 @ 0x5610dd4bd300] no picture
[mpegts @ 0x5610dd4a6880] pid=100 pes_code=0x1e0
Last message repeated 126 times
[hls,applehttp @ 0x5610dd18edc0] max_analyze_duration 5000000 reached at
5000000 microseconds st:0
[hls,applehttp @ 0x5610dd18edc0] Setting avg frame rate based on r frame
rate
[hls,applehttp @ 0x5610dd18edc0] stream 0: start_time: 1.480 duration:
-102481911520608.625
[hls,applehttp @ 0x5610dd18edc0] format: start_time: 1.480 duration:
165600.000 bitrate=0 kb/s
[hls,applehttp @ 0x5610dd18edc0] After avformat_find_stream_info() pos:
585164 bytes read:585164 seeks:0 frames:127
Input #0, hls,applehttp, from 'playlist.m3u8':
Duration: 46:00:00.00, start: 1.480000, bitrate: 0 kb/s
Program 0
Metadata:
variant_bitrate : 0
Stream #0:0, 127, 1/90000: Video: h264 (High), 1 reference frame
([27][0][0][0] / 0x001B), yuv420p(left), 2x2 (16x16) [SAR 1:1 DAR 1:1],
0/1, 25 fps, 25 tbr, 90k tbn, 50 tbc
Metadata:
variant_bitrate : 0
Successfully opened the file.
At least one output file must be specified
[AVIOContext @ 0x5610dd4b8040] Statistics: 32768 bytes read, 0 seeks
[AVIOContext @ 0x5610dd197d40] Statistics: 585164 bytes read, 0 seeks
}}}
Note that the log above was created with release version 4.1 but I have
reproduced the same problem using the development version.
The error can be reproduced with:
{{{
ffplay playlist.m3u8
}}}
Then seek to somewhere later than 30 hours. Earlier than 25 hours works
fine but I am do not know exactly at which time between 25 and 30 hours
the problem starts to occur.
I use the right mouse button to seek in ffplay.
Here is an example log output
{{{
Seek to 31% (14:22:30) of total duration (46:00:00) B f=0/0
[hls,applehttp @ 0x7fc81c000b80] Opening 'playlist5175.ts' for reading
[hls,applehttp @ 0x7fc81c000b80] Opening 'playlist5176.ts' for reading
Seek to 75% (34:34:18) of total duration (46:00:00) 0B f=0/0
[hls,applehttp @ 0x7fc81c000b80] Opening 'playlist12445.ts' for reading
[hls,applehttp @ 0x7fc81c000b80] Opening 'playlist12446.ts' for reading
[hls,applehttp @ 0x7fc81c000b80] Opening 'playlist12447.ts' for reading
...
}}}
The first seek works fine and the file plays correctly, after the second
seek the console is filled with the above messages, showing all the
individual segments in quick succession. The file no longer plays at all.
I can also reproduce this with the mpv media player which uses ffmpeg
internally. This makes seeking a bit easier and it shows the same log
messages.
{{{
mpv --no-config --msg-level=all=debug playlist.m3u8
}}}
--
Ticket URL: <https://trac.ffmpeg.org/ticket/7673>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list