Message ID | 20191027183908.15436-1-philipl@overt.org |
---|---|
State | New |
Headers | show |
> 在 2019年10月28日,02:39,Philip Langdale <philipl@overt.org> 写道: > > 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 > --- > libavformat/hls.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/libavformat/hls.c b/libavformat/hls.c > index d7f4d5b442..ac151d5ca4 100644 > --- a/libavformat/hls.c > +++ b/libavformat/hls.c > @@ -2326,7 +2326,7 @@ AVInputFormat ff_hls_demuxer = { > .long_name = NULL_IF_CONFIG_SMALL("Apple HTTP Live Streaming"), > .priv_class = &hls_class, > .priv_data_size = sizeof(HLSContext), > - .flags = AVFMT_NOGENSEARCH, > + .flags = AVFMT_NOGENSEARCH | AVFMT_TS_DISCONT, > .read_probe = hls_probe, > .read_header = hls_read_header, > .read_packet = hls_read_packet, > -- > 2.20.1 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe”. LGTM, whatever other more reasons, this can fix one of those problems. Thanks Steven
On Mon, 28 Oct 2019 at 05:45, Steven Liu <lq@chinaffmpeg.org> wrote: > > > > > 在 2019年10月28日,02:39,Philip Langdale <philipl@overt.org> 写道: > > > > 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 > > --- > > libavformat/hls.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/libavformat/hls.c b/libavformat/hls.c > > index d7f4d5b442..ac151d5ca4 100644 > > --- a/libavformat/hls.c > > +++ b/libavformat/hls.c > > @@ -2326,7 +2326,7 @@ AVInputFormat ff_hls_demuxer = { > > .long_name = NULL_IF_CONFIG_SMALL("Apple HTTP Live Streaming"), > > .priv_class = &hls_class, > > .priv_data_size = sizeof(HLSContext), > > - .flags = AVFMT_NOGENSEARCH, > > + .flags = AVFMT_NOGENSEARCH | AVFMT_TS_DISCONT, > > .read_probe = hls_probe, > > .read_header = hls_read_header, > > .read_packet = hls_read_packet, > > -- > > 2.20.1 > > > > _______________________________________________ > > ffmpeg-devel mailing list > > ffmpeg-devel@ffmpeg.org > > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > > > To unsubscribe, visit link above, or email > > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe”. > > LGTM, whatever other more reasons, this can fix one of those problems. > > Thanks > Steven This patch actually fixes the occurence of DTS and PTS discontinuities I've been seeing with (some) HLS inputs that have discontinuities due to ad insertion(s). 10+ hours later without a single discontinuity.
> 在 2019年10月29日,01:09,Dennis Mungai <dmngaie@gmail.com> 写道: > > On Mon, 28 Oct 2019 at 05:45, Steven Liu <lq@chinaffmpeg.org> wrote: >> >> >> >>> 在 2019年10月28日,02:39,Philip Langdale <philipl@overt.org> 写道: >>> >>> 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 >>> --- >>> libavformat/hls.c | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/libavformat/hls.c b/libavformat/hls.c >>> index d7f4d5b442..ac151d5ca4 100644 >>> --- a/libavformat/hls.c >>> +++ b/libavformat/hls.c >>> @@ -2326,7 +2326,7 @@ AVInputFormat ff_hls_demuxer = { >>> .long_name = NULL_IF_CONFIG_SMALL("Apple HTTP Live Streaming"), >>> .priv_class = &hls_class, >>> .priv_data_size = sizeof(HLSContext), >>> - .flags = AVFMT_NOGENSEARCH, >>> + .flags = AVFMT_NOGENSEARCH | AVFMT_TS_DISCONT, >>> .read_probe = hls_probe, >>> .read_header = hls_read_header, >>> .read_packet = hls_read_packet, >>> -- >>> 2.20.1 >>> >>> _______________________________________________ >>> ffmpeg-devel mailing list >>> ffmpeg-devel@ffmpeg.org >>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >>> >>> To unsubscribe, visit link above, or email >>> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe”. >> >> LGTM, whatever other more reasons, this can fix one of those problems. >> >> Thanks >> Steven > > This patch actually fixes the occurence of DTS and PTS discontinuities > I've been seeing with (some) HLS inputs that have discontinuities due > to ad insertion(s). 10+ hours later without a single discontinuity. Thanks Dennis, Will push this patch after 24hours if there have no objections. > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". Thanks Steven
On Tue, 29 Oct 2019 at 06:07, Steven Liu <lq@chinaffmpeg.org> wrote: > > > > > 在 2019年10月29日,01:09,Dennis Mungai <dmngaie@gmail.com> 写道: > > > > On Mon, 28 Oct 2019 at 05:45, Steven Liu <lq@chinaffmpeg.org> wrote: > >> > >> > >> > >>> 在 2019年10月28日,02:39,Philip Langdale <philipl@overt.org> 写道: > >>> > >>> 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 > >>> --- > >>> libavformat/hls.c | 2 +- > >>> 1 file changed, 1 insertion(+), 1 deletion(-) > >>> > >>> diff --git a/libavformat/hls.c b/libavformat/hls.c > >>> index d7f4d5b442..ac151d5ca4 100644 > >>> --- a/libavformat/hls.c > >>> +++ b/libavformat/hls.c > >>> @@ -2326,7 +2326,7 @@ AVInputFormat ff_hls_demuxer = { > >>> .long_name = NULL_IF_CONFIG_SMALL("Apple HTTP Live Streaming"), > >>> .priv_class = &hls_class, > >>> .priv_data_size = sizeof(HLSContext), > >>> - .flags = AVFMT_NOGENSEARCH, > >>> + .flags = AVFMT_NOGENSEARCH | AVFMT_TS_DISCONT, > >>> .read_probe = hls_probe, > >>> .read_header = hls_read_header, > >>> .read_packet = hls_read_packet, > >>> -- > >>> 2.20.1 > >>> > >>> _______________________________________________ > >>> ffmpeg-devel mailing list > >>> ffmpeg-devel@ffmpeg.org > >>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > >>> > >>> To unsubscribe, visit link above, or email > >>> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe”. > >> > >> LGTM, whatever other more reasons, this can fix one of those problems. > >> > >> Thanks > >> Steven > > > > This patch actually fixes the occurence of DTS and PTS discontinuities > > I've been seeing with (some) HLS inputs that have discontinuities due > > to ad insertion(s). 10+ hours later without a single discontinuity. > > Thanks Dennis, Will push this patch after 24hours if there have no objections. > > _______________________________________________ > > ffmpeg-devel mailing list > > ffmpeg-devel@ffmpeg.org > > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > > > To unsubscribe, visit link above, or email > > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". > > Thanks > Steven Looking forward
> 在 2019年10月30日,09:05,Dennis Mungai <dmngaie@gmail.com> 写道: > > On Tue, 29 Oct 2019 at 06:07, Steven Liu <lq@chinaffmpeg.org> wrote: >> >> >> >>> 在 2019年10月29日,01:09,Dennis Mungai <dmngaie@gmail.com> 写道: >>> >>> On Mon, 28 Oct 2019 at 05:45, Steven Liu <lq@chinaffmpeg.org> wrote: >>>> >>>> >>>> >>>>> 在 2019年10月28日,02:39,Philip Langdale <philipl@overt.org> 写道: >>>>> >>>>> 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 >>>>> --- >>>>> libavformat/hls.c | 2 +- >>>>> 1 file changed, 1 insertion(+), 1 deletion(-) >>>>> >>>>> diff --git a/libavformat/hls.c b/libavformat/hls.c >>>>> index d7f4d5b442..ac151d5ca4 100644 >>>>> --- a/libavformat/hls.c >>>>> +++ b/libavformat/hls.c >>>>> @@ -2326,7 +2326,7 @@ AVInputFormat ff_hls_demuxer = { >>>>> .long_name = NULL_IF_CONFIG_SMALL("Apple HTTP Live Streaming"), >>>>> .priv_class = &hls_class, >>>>> .priv_data_size = sizeof(HLSContext), >>>>> - .flags = AVFMT_NOGENSEARCH, >>>>> + .flags = AVFMT_NOGENSEARCH | AVFMT_TS_DISCONT, >>>>> .read_probe = hls_probe, >>>>> .read_header = hls_read_header, >>>>> .read_packet = hls_read_packet, >>>>> -- >>>>> 2.20.1 >>>>> >>>>> _______________________________________________ >>>>> ffmpeg-devel mailing list >>>>> ffmpeg-devel@ffmpeg.org >>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >>>>> >>>>> To unsubscribe, visit link above, or email >>>>> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe”. >>>> >>>> LGTM, whatever other more reasons, this can fix one of those problems. >>>> >>>> Thanks >>>> Steven >>> >>> This patch actually fixes the occurence of DTS and PTS discontinuities >>> I've been seeing with (some) HLS inputs that have discontinuities due >>> to ad insertion(s). 10+ hours later without a single discontinuity. >> >> Thanks Dennis, Will push this patch after 24hours if there have no objections. >>> _______________________________________________ >>> ffmpeg-devel mailing list >>> ffmpeg-devel@ffmpeg.org >>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >>> >>> To unsubscribe, visit link above, or email >>> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". >> >> Thanks >> Steven > > > Looking forward pushed > Thanks Steven
diff --git a/libavformat/hls.c b/libavformat/hls.c index d7f4d5b442..ac151d5ca4 100644 --- a/libavformat/hls.c +++ b/libavformat/hls.c @@ -2326,7 +2326,7 @@ AVInputFormat ff_hls_demuxer = { .long_name = NULL_IF_CONFIG_SMALL("Apple HTTP Live Streaming"), .priv_class = &hls_class, .priv_data_size = sizeof(HLSContext), - .flags = AVFMT_NOGENSEARCH, + .flags = AVFMT_NOGENSEARCH | AVFMT_TS_DISCONT, .read_probe = hls_probe, .read_header = hls_read_header, .read_packet = hls_read_packet,