[FFmpeg-trac] #8009(avformat:new): hls demuxer does not handle pid changes after EXT-X-DISCONTINUITY
FFmpeg
trac at avcodec.org
Wed Jul 10 04:20:30 EEST 2019
#8009: hls demuxer does not handle pid changes after EXT-X-DISCONTINUITY
----------------------------------+--------------------------------------
Reporter: tmm1 | 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:
An HLS playlist can contain EXT-X-DISCONTINUITY tags. The segment after
such a tag may contain a new PMT, which may contain new elementary streams
on previously used pids.
For example, this m3u8:
{{{
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-INDEPENDENT-SEGMENTS
#EXTINF:7.074,
segment_156270742.ts
#EXT-X-DISCONTINUITY
#EXTINF:10.101,
segment-1.ts
#EXTINF:10.008,
segment-2.ts
#EXTINF:10.194,
segment-3.ts
#EXT-X-DISCONTINUITY
#EXTINF:10.010,
segment_156270745.ts
#EXT-X-ENDLIST
}}}
where segment_156270742.ts before the X-DISCONTINUITY has streams as
follows:
{{{
Program 1
Stream #0:0[0x101]: Video: h264 (High) ([27][0][0][0] / 0x001B),
yuv420p(progressive), 1920x1080, Closed Captions, 29.97 fps, 29.97 tbr,
90k tbn, 59.94 tbc
Stream #0:1[0x102]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100
Hz, stereo, fltp, 93 kb/s
Stream #0:2[0x103]: Data: timed_id3 (ID3 / 0x20334449)
}}}
and segment-1.ts after the X-DISCONTINUITY has streams:
{{{
Program 1
Stream #0:0[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100
Hz, stereo, fltp, 69 kb/s
Stream #0:1[0x102]: Video: h264 (Constrained Baseline) ([27][0][0][0]
/ 0x001B), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps,
23.98 tbr, 90k tbn, 47.95 tbc
}}}
Before the discontinuity, 0x101 is a video PID but afterwards it is an
audio PID.
ffmpeg does not detect this PMT change, and feeds audio packets into the
video decoder and vice versa.
How to reproduce:
{{{
% ffmpeg -i https://tmm1.s3.amazonaws.com/hls-pidswap/test.m3u8 -f null -y
/dev/null
ffmpeg version git-2019-02-13-bf78aa9 Copyright (c) 2000-2019 the FFmpeg
developers
built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD-bf78aa9 --enable-
shared --enable-pthreads --enable-version3 --enable-hardcoded-tables
--enable-avresample --cc=clang --host-
cflags='-I/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/include
-I/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/include/darwin'
--host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-
libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-
librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora
--enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265
--enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype
--enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-
libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex
--enable-videotoolbox --disable-libjack --disable-indev=jack --enable-
libaom --enable-libsoxr
libavutil 56. 26.100 / 56. 26.100
libavcodec 58. 47.100 / 58. 47.100
libavformat 58. 26.101 / 58. 26.101
libavdevice 58. 6.101 / 58. 6.101
libavfilter 7. 48.100 / 7. 48.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 4.100 / 5. 4.100
libswresample 3. 4.100 / 3. 4.100
libpostproc 55. 4.100 / 55. 4.100
[hls,applehttp @ 0x7f9dd0800000] Opening 'https://tmm1.s3.amazonaws.com
/hls-pidswap/segment_156270742.ts' for reading
[hls,applehttp @ 0x7f9dd0800000] Opening 'https://tmm1.s3.amazonaws.com
/hls-pidswap/segment-1.ts' for reading
Input #0, hls,applehttp, from 'https://tmm1.s3.amazonaws.com/hls-
pidswap/test.m3u8':
Duration: 00:00:47.39, start: 44058.812000, bitrate: 0 kb/s
Program 0
Metadata:
variant_bitrate : 0
Stream #0:0: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p,
1920x1080, Closed Captions, 29.97 tbr, 90k tbn, 59.94 tbc
Metadata:
variant_bitrate : 0
Stream #0:1: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz,
stereo, fltp
Metadata:
variant_bitrate : 0
Stream #0:2: Data: timed_id3 (ID3 / 0x20334449)
Metadata:
variant_bitrate : 0
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))
Stream #0:1 -> #0:1 (aac (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, null, to '/dev/null':
Metadata:
encoder : Lavf58.26.101
Stream #0:0: Video: wrapped_avframe, yuv420p, 1920x1080, q=2-31, 200
kb/s, 29.97 fps, 29.97 tbn, 29.97 tbc
Metadata:
variant_bitrate : 0
encoder : Lavc58.47.100 wrapped_avframe
Stream #0:1: Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s
Metadata:
variant_bitrate : 0
encoder : Lavc58.47.100 pcm_s16le
[https @ 0x7f9dcf01b800] Opening 'https://tmm1.s3.amazonaws.com/hls-
pidswap/segment-2.ts' for reading
[aac @ 0x7f9dd103a000] channel element 1.0 is not allocated
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x7f9dd103a000] More than one AAC RDB per ADTS frame is not
implemented. Update your FFmpeg version to the newest one from Git. If the
problem still occurs, it means that your file has a feature which has not
been implemented.
[aac @ 0x7f9dd103a000] Multiple frames in a packet.
[aac @ 0x7f9dd103a000] Number of bands (45) exceeds limit (32).
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x7f9dd103a000] Prediction is not allowed in AAC-LC.
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x7f9dd103a000] Reserved bit set.
[aac @ 0x7f9dd103a000] invalid band type
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x7f9dd103a000] Sample rate index in program config element does
not match the sample rate index configured by the container.
[aac @ 0x7f9dd103a000] Inconsistent channel configuration.
[aac @ 0x7f9dd103a000] get_buffer() failed
Error while decoding stream #0:1: Invalid argument
[aac @ 0x7f9dd103a000] channel element 1.2 is not allocated
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x7f9dd103a000] Number of bands (23) exceeds limit (16).
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x7f9dd103a000] Reserved bit set.
[aac @ 0x7f9dd103a000] Number of bands (37) exceeds limit (19).
Error while decoding stream #0:1: Invalid data found when processing input
}}}
--
Ticket URL: <https://trac.ffmpeg.org/ticket/8009>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list