So. I apply this strategy when it’s on HTTP/HTTPs, and it’s not affect local normal files.
Could you please show me a bad case on this solution ? I appreciated and try to fix it. Thanks. > 2022年12月19日 下午2:18,zhilizhao(赵志立) <quinkbl...@foxmail.com> 写道: > > [你通常不会收到来自 quinkbl...@foxmail.com 的电子邮件。请访问 > https://aka.ms/LearnAboutSenderIdentification,以了解这一点为什么很重要] > >> On Dec 19, 2022, at 12:24, Chen, Jinkai <chenjin...@agora.io> wrote: >> >> Using separated HTTP connection for each stream, >> prevent from reading audio and video in long distance, >> which cause seeking(http request) repeatedly. >> Storing the user options when open input, >> and make sure that can be passed to demuxer context. > > The patch is harmful for normal files, and the implementation isn’t clean, so > NAK. > >> >> Some source can reproducing the issue: >> https://apc01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fali-sprite-video.yyouwang.com%2Fvideo%2Fworks%2F202211%2F1667997073624_73.mp4&data=05%7C01%7Cchenjinkai%40agora.io%7Cb9e67445d035449f081608dae188efd6%7C602753743eaa49c283c3cc189d126981%7C0%7C0%7C638070275515676009%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=Zkr9rHCQncaiW9OmzDzzlWXkTZdlUQSz%2FnDRs2m7fzg%3D&reserved=0 >> https://apc01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fimages.voghion.com%2FproductImages%2F04_01_C_30011_2020220106GiuseppeFanara0012.mp4&data=05%7C01%7Cchenjinkai%40agora.io%7Cb9e67445d035449f081608dae188efd6%7C602753743eaa49c283c3cc189d126981%7C0%7C0%7C638070275515676009%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=N5fGtmMWY5t2SZ3QkNCFCRAxq2XPCPKimmn5QS5jZyU%3D&reserved=0 >> >> Signed-off-by: CJK <chenjin...@agora.io<mailto:chenjin...@agora.io>> >> --- >> libavformat/avformat.c | 1 + >> libavformat/demux.c | 5 ++++- >> libavformat/internal.h | 5 +++++ >> libavformat/mov.c | 16 ++++++++++++++++ >> 4 files changed, 26 insertions(+), 1 deletion(-) >> >> diff --git a/libavformat/avformat.c b/libavformat/avformat.c >> index 19c7219471..4453727f34 100644 >> --- a/libavformat/avformat.c >> +++ b/libavformat/avformat.c >> @@ -129,6 +129,7 @@ void avformat_free_context(AVFormatContext *s) >> av_freep(&s->chapters); >> av_dict_free(&s->metadata); >> av_dict_free(&si->id3v2_meta); >> + av_dict_free(&si->options); >> av_packet_free(&si->pkt); >> av_packet_free(&si->parse_pkt); >> av_freep(&s->streams); >> diff --git a/libavformat/demux.c b/libavformat/demux.c >> index 2dfd82a63c..2377bfdab0 100644 >> --- a/libavformat/demux.c >> +++ b/libavformat/demux.c >> @@ -237,8 +237,11 @@ int avformat_open_input(AVFormatContext **ps, const >> char *filename, >> if (fmt) >> s->iformat = fmt; >> >> - if (options) >> + if (options) { >> av_dict_copy(&tmp, *options, 0); >> + si->options = NULL; >> + av_dict_copy(&si->options, *options, 0); >> + } >> >> if (s->pb) // must be before any goto fail >> s->flags |= AVFMT_FLAG_CUSTOM_IO; >> diff --git a/libavformat/internal.h b/libavformat/internal.h >> index ce837fefc7..7caae8b93e 100644 >> --- a/libavformat/internal.h >> +++ b/libavformat/internal.h >> @@ -186,6 +186,11 @@ typedef struct FFFormatContext { >> * Contexts and child contexts do not contain a metadata option >> */ >> int metafree; >> + >> + /** >> + * options from avformat_open_input >> + */ >> + AVDictionary *options; >> } FFFormatContext; >> >> static av_always_inline FFFormatContext *ffformatcontext(AVFormatContext *s) >> diff --git a/libavformat/mov.c b/libavformat/mov.c >> index 29bd3103e3..1e1a7c2f7f 100644 >> --- a/libavformat/mov.c >> +++ b/libavformat/mov.c >> @@ -4456,6 +4456,7 @@ static int mov_read_trak(MOVContext *c, AVIOContext >> *pb, MOVAtom atom) >> { >> AVStream *st; >> MOVStreamContext *sc; >> + URLContext *url_context; >> int ret; >> >> st = avformat_new_stream(c->fc, NULL); >> @@ -4501,6 +4502,8 @@ static int mov_read_trak(MOVContext *c, AVIOContext >> *pb, MOVAtom atom) >> >> mov_build_index(c, st); >> >> + url_context = ffio_geturlcontext(c->fc->pb); >> + av_assert0(url_context); >> if (sc->dref_id-1 < sc->drefs_count && sc->drefs[sc->dref_id-1].path) { >> MOVDref *dref = &sc->drefs[sc->dref_id - 1]; >> if (c->enable_drefs) { >> @@ -4510,6 +4513,19 @@ static int mov_read_trak(MOVContext *c, AVIOContext >> *pb, MOVAtom atom) >> "filename='%s', volume='%s', nlvl_from=%d, >> nlvl_to=%d\n", >> st->index, dref->path, dref->dir, dref->filename, >> dref->volume, dref->nlvl_from, dref->nlvl_to); >> + } else if (strcmp(url_context->prot->name, "http") == 0 || >> + strcmp(url_context->prot->name, "https") == 0) { >> + FFFormatContext *const si = ffformatcontext(c->fc); >> + AVDictionary *opts = NULL; >> + av_dict_copy(&opts, si->options, 0); >> + ret = c->fc->io_open(c->fc, &sc->pb, c->fc->url, >> AVIO_FLAG_READ, &opts); >> + av_dict_free(&opts); >> + if (ret < 0) { >> + av_log(c->fc, AV_LOG_ERROR, >> + "mov/http(s) stream %d, error opening url %s.\n", >> + st->index, c->fc->url); >> + return ret; >> + } >> } else { >> av_log(c->fc, AV_LOG_WARNING, >> "Skipped opening external track: " >> -- >> 2.24.3 (Apple Git-128) >> _______________________________________________ >> ffmpeg-devel mailing list >> ffmpeg-devel@ffmpeg.org >> https://apc01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fffmpeg.org%2Fmailman%2Flistinfo%2Fffmpeg-devel&data=05%7C01%7Cchenjinkai%40agora.io%7Cb9e67445d035449f081608dae188efd6%7C602753743eaa49c283c3cc189d126981%7C0%7C0%7C638070275515676009%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=JbJbisqyQS6WLr5EjzwDsyiuvKGrvqvX5hiYQ0SHdvc%3D&reserved=0 >> >> To unsubscribe, visit link above, or email >> ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://apc01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fffmpeg.org%2Fmailman%2Flistinfo%2Fffmpeg-devel&data=05%7C01%7Cchenjinkai%40agora.io%7Cb9e67445d035449f081608dae188efd6%7C602753743eaa49c283c3cc189d126981%7C0%7C0%7C638070275515676009%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=JbJbisqyQS6WLr5EjzwDsyiuvKGrvqvX5hiYQ0SHdvc%3D&reserved=0 > > To unsubscribe, visit link above, or email > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".