ffmpeg/libavformat
Philip Langdale d6ac6650b9 avformat/hls: Set AVFMT_TS_DISCONT flag on HLS input format
There have been many reports over the years about problems when
taking an HLS stream as input to `ffmpeg` where there are timestamp
discontinuities present. This is explicitly supported in the
HLS spec (EXT-X-DISCONTINUITY) and often used for ad injection.

Various fixes and work-arounds have been proposed over the years,
but one step that seems obvious, even if it's not a complete fix,
is to mark the HLS input format as supporting discontinuities. This
will prevent timestamp fixup logic in ffmpeg.c kicking in that ends
up mangling the timestamps unnecessarily.

I've tested this out with an example provided by Joe Koberg early
last year, and it is sufficient to allow `ffmpeg` to download and
mux the stream correctly. Joe had briefly suggested that other
situations can still be handled incorrectly, but this seems like
a strict improvement.

Joe's example:

https://s3.amazonaws.com/playon-test-videos/discont_test_new/discont_test.m3u8

Reviewed-by: Steven Liu <lq@onvideo.cn>
Reviewed-by: Dennis Mungai <dmngaie@gmail.com>
2019-10-30 17:59:02 +08:00
..
tests
.gitignore
3dostr.c
4xm.c lavf/4xm: fix memory leak in error handing path 2019-09-25 11:23:03 +08:00
a64.c
aacdec.c
aadec.c
ac3dec.c
acm.c
act.c
adp.c
ads.c
adtsenc.c avformat: use avpriv_mpeg4audio_get_config2() 2019-09-27 10:37:11 -03:00
adxdec.c
aea.c
afc.c
aiff.h
aiffdec.c avformat/aiffdec: fix signed integer overflow 2019-09-25 17:40:50 +02:00
aiffenc.c avformat/aiffenc: Add deinit function 2019-10-25 23:27:02 +02:00
aixdec.c
allformats.c avformat/hashenc: add streamhash muxer 2019-09-20 23:26:34 +02:00
amr.c
anm.c
apc.c
ape.c
apetag.c
apetag.h
apngdec.c
apngenc.c
aptxdec.c
aqtitledec.c
asf.c
asf.h
asfcrypt.c
asfcrypt.h
asfdec_f.c
asfdec_o.c
asfenc.c avformat/asfenc: Remove unnecessary header 2019-10-25 23:27:02 +02:00
assdec.c
assenc.c avformat/assenc: optimize writing dialogs 2019-08-17 18:39:49 +02:00
ast.c
ast.h
astdec.c
astenc.c
async.c
au.c
audiointerleave.c avformat/mux: Use const AVPacket * in compare functions 2019-08-15 01:26:21 +02:00
audiointerleave.h avformat/mux: Use const AVPacket * in compare functions 2019-08-15 01:26:21 +02:00
av1.c
av1.h
avc.c
avc.h
avformat.h
avformatres.rc
avi.h
avidec.c avformat/avidec: Remove superfluous header 2019-10-25 23:27:02 +02:00
avienc.c avformat/avienc: Remove superfluous header 2019-10-25 23:27:02 +02:00
avio_internal.h lavf/avio: add a ffio_realloc_buf API for AVIO buffer realloc 2019-08-15 09:27:11 +08:00
avio.c lavf/avio: Print https warning also for avio_find_protocol_name(). 2019-10-01 19:52:47 +02:00
avio.h avformat/avio: remove 4k limit from avio_printf 2019-08-17 18:39:49 +02:00
aviobuf.c avformat/avio: remove 4k limit from avio_printf 2019-08-17 18:39:49 +02:00
avisynth.c
avlanguage.c
avlanguage.h
avr.c
avs.c
bethsoftvid.c
bfi.c
bink.c
bintext.c avformat/bintext: avoid division by zero 2019-10-25 12:22:25 +02:00
bit.c
bluray.c
bmv.c
boadec.c
brstm.c
c93.c
cache.c
caf.c
caf.h
cafdec.c
cafenc.c
cavsvideodec.c
cdg.c
cdxl.c avformat/cdxl: Fix integer overflow in intermediate 2019-09-16 00:53:18 +02:00
chromaprint.c avformat/chromaprint: Fix writing raw fingerprint 2019-10-16 10:34:51 +05:30
cinedec.c avformat/cinedec: check av_strdup() return value 2019-10-19 06:47:10 +02:00
codec2.c
concat.c lavf/concat: implement FFSEEK_SIZE. 2019-08-13 15:38:57 +02:00
concatdec.c
crcenc.c
crypto.c
cutils.c
dash.c
dash.h
dashdec.c avformat/dashdec: fix segfault when parsing segmentlist 2019-09-23 10:06:46 +08:00
dashenc.c
data_uri.c
dauddec.c
daudenc.c
davs2.c
dcstr.c
dfa.c
dhav.c avformat/dhav: fix demuxer since recent breakage 2019-09-27 14:25:18 +02:00
diracdec.c
dnxhddec.c
dsfdec.c avformat/dsfdec: set packet pts/duration/pos correctly 2019-08-28 17:01:43 +02:00
dsicin.c
dss.c avformat/dss: Remove superfluous headers 2019-10-29 16:20:33 +01:00
dtsdec.c
dtshddec.c
dump.c lavf/dump: dump the vbv_delay with N/A instead of 18446744073709551615 2019-08-28 18:18:41 +02:00
dv.c avformat/dv: free all allocated structs on dv_read_header failure 2019-10-11 20:38:36 -03:00
dv.h
dvbsub.c
dvbtxt.c
dvenc.c
dxa.c
eacdata.c
electronicarts.c avformat/electronicarts: If no packet has been read at the end do not treat it as if theres a packet 2019-10-01 22:16:20 +02:00
epafdec.c
ffmeta.h
ffmetadec.c
ffmetaenc.c
fifo_test.c
fifo.c
file_open.c
file.c
filmstripdec.c
filmstripenc.c
fitsdec.c
fitsenc.c
flac_picture.c avformat/flac_picture: Avoid allocation of AVIOContext 2019-10-07 22:27:17 +02:00
flac_picture.h
flacdec.c
flacenc_header.c
flacenc.c avformat/flacenc: add a deinit function 2019-10-21 17:20:20 -03:00
flacenc.h
flic.c
flv.h
flvdec.c avformat/flvdec: delete unused code 2019-08-23 22:24:07 +02:00
flvenc.c
format.c
framecrcenc.c
framehash.c
frmdec.c
fsb.c
ftp.c
g722.c
g723_1.c
g726.c
g729dec.c avformat/g729dec: set packet duration and correctly set timebase info 2019-09-27 12:39:21 +02:00
gdv.c
genh.c
gif.c
gifdec.c
golomb_tab.c
gopher.c
gsmdec.c
gxf.c
gxf.h
gxfenc.c avformat/mux: Use const AVPacket * in compare functions 2019-08-15 01:26:21 +02:00
h261dec.c
h263dec.c
h264dec.c
hashenc.c avformat/hashenc: fix incorrect use of av_mallocz_array() 2019-09-23 22:16:00 +02:00
hcom.c avformat/hcom: Tell the compiler about set but not read variables 2019-09-16 00:04:18 +02:00
hdsenc.c
hevc.c
hevc.h
hevcdec.c
hls.c avformat/hls: Set AVFMT_TS_DISCONT flag on HLS input format 2019-10-30 17:59:02 +08:00
hlsenc.c avformat/hlsenc: move freep segment from sls_flags_filename_process after caller failed 2019-10-28 14:26:04 +08:00
hlsplaylist.c lavf/hlsenc: refine the get_relative_url function to avoid extra malloc for relation path 2019-09-02 13:28:08 +08:00
hlsplaylist.h lavf/hlsenc: refine the get_relative_url function to avoid extra malloc for relation path 2019-09-02 13:28:08 +08:00
hlsproto.c
hnm.c
http.c avformat/http: add ff_http_do_new_request2 for options 2019-10-08 14:57:44 +08:00
http.h avformat/http: add ff_http_do_new_request2 for options 2019-10-08 14:57:44 +08:00
httpauth.c
httpauth.h
icecast.c
icodec.c
icoenc.c avformat/icoenc: Add deinit function 2019-10-24 19:45:17 +02:00
id3v1.c
id3v1.h
id3v2.c
id3v2.h
id3v2enc.c
idcin.c
idroqdec.c
idroqenc.c
iff.c avformat/iff: fix memleak when get st->codecpar->extradata failed in iff_read_header 2019-10-10 09:54:48 +08:00
ifv.c
ilbc.c
img2_alias_pix.c
img2_brender_pix.c
img2.c
img2.h
img2dec.c
img2enc.c
ingenientdec.c
internal.h avformat/utils: ensure that all packets in AVPacketList are reference counted 2019-09-25 21:54:18 -03:00
ip.c
ip.h
ipmovie.c
ircam.c
ircam.h
ircamdec.c
ircamenc.c
isom.c avformat: use avpriv_mpeg4audio_get_config2() 2019-09-27 10:37:11 -03:00
isom.h avformat/mov: parse sdtp atom and set the pkt disposable flag accordingly 2019-10-12 14:36:15 +02:00
iss.c
iv8.c
ivfdec.c avformat/ivfdec: Change the length field to 32 bits 2019-10-08 21:45:00 -04:00
ivfenc.c avformat/ivfenc: Change the length fields to 32 bits 2019-10-08 21:44:41 -04:00
jacosubdec.c
jacosubenc.c
jvdec.c avformat/jvdec: fix memleak when read_header failed 2019-10-10 09:54:42 +08:00
latmenc.c avformat/latmenc: abort if no extradata is available 2019-10-15 13:04:44 -03:00
libavformat.v
libgme.c
libmodplug.c avformat/libmodplug: fix memleak when load modplug failed 2019-10-28 14:26:07 +08:00
libopenmpt.c
librtmp.c
libsmbclient.c
libsrt.c avformat/libsrt: check av_strdup() return value and fix memleak 2019-10-19 06:49:46 +02:00
libssh.c
libzmq.c avformat: Add ZeroMQ as a protocol 2019-09-02 23:08:43 +02:00
lmlm4.c
loasdec.c
log2_tab.c
lrc.c
lrc.h
lrcdec.c
lrcenc.c
lvfdec.c
lxfdec.c
m4vdec.c
Makefile avformat/Makefile: Fix aiffdec replaygain dependency 2019-10-14 00:48:44 +02:00
matroska.c
matroska.h
matroskadec.c avformat/matroskadec: don't rescale mastering display values 2019-10-05 22:37:41 -03:00
matroskaenc.c avformat/matroskaenc: Cosmetics 2019-10-21 21:05:14 -03:00
md5proto.c
metadata.c
metadata.h
mgsts.c
microdvddec.c
microdvdenc.c
mj2kdec.c
mkvtimestamp_v2.c
mlpdec.c
mlvdec.c
mm.c
mmf.c
mms.c avformat/mms: add logging context to log 2019-10-08 13:47:16 +08:00
mms.h
mmsh.c
mmst.c avformat/mmst: add logging context to log 2019-10-08 13:47:12 +08:00
mov_chan.c
mov_chan.h
mov_esds.c
mov.c avformat/mov: parse sdtp atom and set the pkt disposable flag accordingly 2019-10-12 14:36:15 +02:00
movenc.c aformat/movenc: add missing padding to output track extradata 2019-09-26 15:19:00 -03:00
movenc.h
movenccenc.c
movenccenc.h
movenchint.c
mp3dec.c
mp3enc.c avformat/mp3enc: add init and deinit functions 2019-10-21 17:20:20 -03:00
mpc8.c avformat/mpc8: fix memleak when seek table too big 2019-10-28 14:26:10 +08:00
mpc.c
mpeg.c avformat/mpeg: Don't free unintialized pointer 2019-10-24 15:51:20 -03:00
mpeg.h
mpegenc.c avformat/mpegenc: check for stream private data during deinit 2019-10-18 23:14:40 -03:00
mpegts.c avformat/mpegts: add support for EPG extraction from mpegts 2019-09-19 21:30:54 +02:00
mpegts.h avformat/mpegts: add all well known PIDs and TIDs to mpegts.h 2019-09-19 21:30:54 +02:00
mpegtsenc.c avformat/mpegtsenc: fix flushing of audio packets 2019-09-02 21:44:25 +02:00
mpegvideodec.c
mpjpeg.c
mpjpegdec.c avformat/mpjpegdec: ensure seekback for latest chunk 2019-10-12 13:21:50 +02:00
mpl2dec.c
mpsubdec.c avformat/mpsubdec: Clear queue on error 2019-10-08 16:24:58 +02:00
msf.c
msnwc_tcp.c
mtaf.c
mtv.c avformat/mtv: check av_strdup() return value 2019-10-19 06:54:53 +02:00
musx.c
mux.c avformat: call AVOutputFormat->deinit() when freeing the context 2019-10-21 17:20:20 -03:00
mvdec.c avformat/mvdec: check av_strdup() return value 2019-10-19 06:56:02 +02:00
mvi.c
mxf.c
mxf.h
mxfdec.c avformat/mxfdec: do not ignore bad size errors 2019-08-22 21:38:41 +02:00
mxfenc.c avformat/mxfenc: fix warning: unused function 'klv_ber_length' [-Wunused-function] 2019-09-04 18:55:00 +02:00
mxg.c
ncdec.c
network.c avformat/network: add logging context to log 2019-10-08 13:47:07 +08:00
network.h
nistspheredec.c
nspdec.c
nsvdec.c
nullenc.c
nut.c avformat/nut: add pcm_s64 support 2019-09-27 12:15:50 +02:00
nut.h
nutdec.c lavf/nutdec: add logging context to log 2019-09-30 10:06:21 +08:00
nutenc.c avformat/nutenc: free all missing dynamic AVIOContext on header writing failure 2019-10-19 14:42:23 -03:00
nuv.c
oggdec.c
oggdec.h
oggenc.c avformat/oggenc: free buffered page lists while uninitializing the muxer 2019-10-21 17:20:58 -03:00
oggparsecelt.c
oggparsedaala.c
oggparsedirac.c
oggparseflac.c
oggparseogm.c
oggparseopus.c
oggparseskeleton.c
oggparsespeex.c
oggparsetheora.c
oggparsevorbis.c
oggparsevp8.c
oma.c
oma.h
omadec.c
omaenc.c
options_table.h
options.c avformat/options: don't call avformat_free_context() within avformat_alloc_context() 2019-10-19 21:29:36 -03:00
os_support.c
os_support.h
paf.c
pcm.c
pcm.h
pcmdec.c
pcmenc.c
pjsdec.c avformat/pjsdec: Check duration for overflow 2019-10-20 19:57:51 +02:00
pmpdec.c
prompeg.c
protocols.c avformat: Add ZeroMQ as a protocol 2019-09-02 23:08:43 +02:00
psxstr.c
pva.c
pvfdec.c
qcp.c
qtpalette.c
qtpalette.h
r3d.c
rawdec.c
rawdec.h
rawenc.c lavf/rawenc: Only accept the appropriate stream type for raw muxers. 2019-09-06 16:22:44 -03:00
rawenc.h
rawutils.c
rawvideodec.c
rdt.c
rdt.h
realtextdec.c avformat/realtextdec: free queue on error 2019-08-22 18:35:44 +02:00
redspark.c
replaygain.c
replaygain.h
riff.c lavc/g729dec: Support decoding Sipro ACELP.KELVIN. 2019-09-16 20:57:53 +02:00
riff.h avformat/avidec: add support for recognizing HEVC fourcc when demuxing 2019-08-31 17:38:25 +02:00
riffdec.c
riffenc.c
rl2.c avformat/rl2: fix memleak when read end of file 2019-10-28 14:26:11 +08:00
rm.c
rm.h
rmdec.c avformat/rmdec.c: fix brackets around arguments 2019-09-15 11:04:33 -03:00
rmenc.c
rmsipr.c
rmsipr.h
rpl.c
rsd.c
rso.c
rso.h
rsodec.c
rsoenc.c
rtmp.h
rtmpcrypt.c
rtmpcrypt.h
rtmpdh.c
rtmpdh.h
rtmpdigest.c
rtmphttp.c
rtmppkt.c
rtmppkt.h
rtmpproto.c avformat/rtmpproto: fix memleak when open rtmp failed 2019-10-28 14:26:14 +08:00
rtp.c
rtp.h
rtpdec_ac3.c
rtpdec_amr.c
rtpdec_asf.c
rtpdec_dv.c
rtpdec_formats.h
rtpdec_g726.c
rtpdec_h261.c
rtpdec_h263_rfc2190.c
rtpdec_h263.c
rtpdec_h264.c
rtpdec_hevc.c
rtpdec_ilbc.c
rtpdec_jpeg.c
rtpdec_latm.c
rtpdec_mpa_robust.c
rtpdec_mpeg4.c avformat/rtpdec_mpeg4: Fix integer parameters size check in SDP fmtp line 2019-08-10 00:01:02 +02:00
rtpdec_mpeg12.c
rtpdec_mpegts.c
rtpdec_qcelp.c
rtpdec_qdm2.c
rtpdec_qt.c
rtpdec_rfc4175.c
rtpdec_svq3.c
rtpdec_vc2hq.c
rtpdec_vp8.c
rtpdec_vp9.c
rtpdec_xiph.c
rtpdec.c
rtpdec.h
rtpenc_aac.c
rtpenc_amr.c
rtpenc_chain.c
rtpenc_chain.h
rtpenc_h261.c
rtpenc_h263_rfc2190.c
rtpenc_h263.c
rtpenc_h264_hevc.c
rtpenc_jpeg.c
rtpenc_latm.c
rtpenc_mpegts.c avformat/rtpenc_mpegts: copy metadata to mpegts sub-muxer 2019-09-20 23:26:34 +02:00
rtpenc_mpv.c
rtpenc_vc2hq.c
rtpenc_vp8.c
rtpenc_vp9.c
rtpenc_xiph.c
rtpenc.c
rtpenc.h
rtpproto.c
rtpproto.h
rtsp.c libavformat/rtsp: return error if rtsp_hd_out is null instead of crash 2019-09-27 10:54:28 -07:00
rtsp.h
rtspcodes.h
rtspdec.c
rtspenc.c
s337m.c
samidec.c
sapdec.c avformat/sapdec: check av_strdup() return value and fix memleak 2019-10-19 06:56:52 +02:00
sapenc.c
sauce.c
sauce.h
sbcdec.c
sbgdec.c
sccdec.c avformat/sccdec: remove not needed code 2019-09-13 19:47:03 +02:00
sccenc.c
sctp.c
sdp.c
sdr2.c
sdsdec.c avformat/sdsdec: fix undefined behaviour 2019-09-25 18:01:09 +02:00
sdxdec.c
segafilm.c
segafilmenc.c avformat/segafilmenc: remove unneeded code 2019-10-22 10:51:30 +08:00
segment.c
serdec.c
shortendec.c avformat/shortendec: Check k in probe 2019-10-16 19:17:57 +02:00
sierravmd.c
siff.c
smacker.c avformat/smacker: fix memleak when avformat_new_stream failed 2019-10-28 14:26:16 +08:00
smjpeg.c
smjpeg.h
smjpegdec.c
smjpegenc.c
smoothstreamingenc.c
smush.c
sol.c
sox.h
soxdec.c
soxenc.c
spdif.c
spdif.h
spdifdec.c
spdifenc.c
srtdec.c
srtenc.c
srtp.c
srtp.h
srtpproto.c
stldec.c
subfile.c libavformat/subfile: Fix SEEK_CUR and SEEK_END seeking 2019-08-13 16:00:23 +02:00
subtitles.c avformat/subtitles: Check nb_subs in ff_subtitles_queue_finalize() 2019-10-06 20:00:59 +02:00
subtitles.h
subviewer1dec.c
subviewerdec.c
supdec.c
supenc.c
svag.c
swf.c
swf.h
swfdec.c avformat/swfdec: fix memleak when inflateInit failed 2019-10-28 14:26:20 +08:00
swfenc.c
takdec.c
tcp.c
tedcaptionsdec.c
tee_common.c
tee_common.h
tee.c avformat/tee.c: steal bsf option before passing to fifo muxer 2019-10-25 11:55:52 +08:00
teeproto.c
thp.c
tiertexseq.c
tls_gnutls.c
tls_libtls.c
tls_mbedtls.c
tls_openssl.c
tls_schannel.c
tls_securetransport.c
tls.c
tls.h
tmv.c
tta.c
ttaenc.c avformat/ttaenc: add a deinit function 2019-10-21 17:20:20 -03:00
tty.c
txd.c
ty.c
udp.c avformat/udp: add logging context to log 2019-10-08 13:46:42 +08:00
uncodedframecrcenc.c
unix.c
url.c
url.h
urldecode.c
urldecode.h
utils.c avformat: call AVOutputFormat->deinit() when freeing the context 2019-10-21 17:20:20 -03:00
v210.c
vag.c
vapoursynth.c
vc1dec.c
vc1test.c
vc1testenc.c
version.h avformat/hashenc: add streamhash muxer 2019-09-20 23:26:34 +02:00
vividas.c avformat/vividas: Test size and packet numbers a bit more 2019-09-24 17:53:39 +02:00
vivo.c
voc_packet.c
voc.c
voc.h
vocdec.c
vocenc.c
vorbiscomment.c
vorbiscomment.h
vpcc.c
vpcc.h
vpk.c
vplayerdec.c
vqf.c
w64.c
w64.h
wavdec.c
wavenc.c
wc3movie.c avformat/wc3movie: fix memleak when read content size not equvipe input size 2019-10-28 14:26:22 +08:00
webm_chunk.c
webmdashenc.c
webpenc.c
webvttdec.c
webvttenc.c
westwood_aud.c
westwood_vqa.c
wsddec.c
wtv_common.c
wtv.h
wtvdec.c
wtvenc.c
wv.c
wv.h
wvdec.c
wvedec.c
wvenc.c
xa.c
xmv.c
xvag.c
xwma.c
yop.c
yuv4mpeg.h
yuv4mpegdec.c avformat/y4m: do not try to seek if pts is less than 0 2019-09-22 19:25:55 +02:00
yuv4mpegenc.c