[FFmpeg-devel] [PATCH] avformat/format: make experimental flag works for muxer

Kieran Kunhya kieran618 at googlemail.com
Fri Jun 6 13:00:35 EEST 2025


On Fri, 6 Jun 2025, 10:51 Michael Niedermayer, <michael at niedermayer.cc>
wrote:

> On Fri, Jun 06, 2025 at 12:06:34AM +0800, Zhao Zhili wrote:
> > From: Zhao Zhili <zhilizhao at tencent.com>
> >
> > ---
> >  libavformat/avformat.h | 3 +--
> >  libavformat/format.c   | 2 ++
> >  2 files changed, 3 insertions(+), 2 deletions(-)
> >
> > diff --git a/libavformat/avformat.h b/libavformat/avformat.h
> > index 2034d2aecc..6edcf11022 100644
> > --- a/libavformat/avformat.h
> > +++ b/libavformat/avformat.h
> > @@ -470,8 +470,7 @@ typedef struct AVProbeData {
> >  /**
> >   * The muxer/demuxer is experimental and should be used with caution.
> >   *
> > - * - demuxers: will not be selected automatically by probing, must be
> specified
> > - *             explicitly.
> > + * Will not be selected automatically, must be specified explicitly.
> >   */
> >  #define AVFMT_EXPERIMENTAL  0x0004
> >  #define AVFMT_SHOW_IDS      0x0008 /**< Show format stream IDs numbers.
> */
> > diff --git a/libavformat/format.c b/libavformat/format.c
> > index 71018ea6ab..516925e7e4 100644
> > --- a/libavformat/format.c
> > +++ b/libavformat/format.c
> > @@ -95,6 +95,8 @@ const AVOutputFormat *av_guess_format(const char
> *short_name, const char *filena
> >      /* Find the proper file type. */
> >      score_max = 0;
> >      while ((fmt = av_muxer_iterate(&i))) {
> > +        if (fmt->flags & AVFMT_EXPERIMENTAL && !short_name)
> > +            continue;
>
> what does AVFMT_EXPERIMENTAL mean for a muxer ?
>
> * a muxer could generate invalid, non compliant data
> * a muxer could be insecure and exploitable
> * a muxer could lack some feature (iam sure most muxers in most projects
> lack some feature)
>
> I think the first 2 are reasons to use this flag
>

In the case of WebRTC it's 3. The user would expect it to work over the
internet (*Web*RTC after all) but it lacks NACK support so cannot recover
from any packet loss.

Without the experimental flag FFmpeg will get support tickets raised and
claims it is inferior to other implementations. Users will not be aware of
the lack of missing feature otherwise.

So it may be compliant on paper but it's not usable in the real world.

Kieran


More information about the ffmpeg-devel mailing list