[FFmpeg-devel] [PATCH v4] avformat: add MMTP parser and MMT/TLV demuxer

SuperFashi admin at superfashi.com
Sun Apr 30 06:32:46 EEST 2023


Thanks. Is there anything else that does not fit codebase tradition? Please
point everything out so I could send a new patch.

On Sun, Apr 30, 2023 at 3:06 AM Michael Niedermayer <michael at niedermayer.cc>
wrote:

> On Sat, Apr 29, 2023 at 02:53:06PM +0900, SuperFashi wrote:
> > v1 -> v2: Refactor using GetByteContext; Fix compile error.
> > v2 -> v3: Remove debug statement.
> > v3 -> v4: Squash commits (sorry, first time git patch user :(
> >
> > This patch adds an MPEG Media Transport Protocol (MMTP) parser, as
> defined in ISO/IEC 23008-1, and an MMT protocol over TLV packets (MMT/TLV)
> demuxer, as defined in ARIB STD-B32. Currently, it supports HEVC, AAC LATM,
> and ARIB-TTML demuxing.
> >
> > Since MMTP is designed to transmit over IP, there is no size information
> within each MMTP packet, and there is no filesystem format defined
> alongside the protocol. One industrial solution is a simple container
> format using type–length–value packets, which is defined in ARIB STD-B32.
> >
> > Another known container format for MMTP is using packet capture (pcap)
> files which records network packets. This patch does not include the
> demuxer for this container format.
> >
> > Signed-off-by: SuperFashi <admin at superfashi.com>
> > ---
> >  Changelog                |    1 +
> >  doc/demuxers.texi        |    4 +
> >  libavformat/Makefile     |    1 +
> >  libavformat/allformats.c |    1 +
> >  libavformat/mmtp.c       | 1372 ++++++++++++++++++++++++++++++++++++++
> >  libavformat/mmtp.h       |   61 ++
> >  libavformat/mmttlv.c     |  324 +++++++++
> >  libavformat/version.h    |    2 +-
> >  8 files changed, 1765 insertions(+), 1 deletion(-)
> >  create mode 100644 libavformat/mmtp.c
> >  create mode 100644 libavformat/mmtp.h
> >  create mode 100644 libavformat/mmttlv.c
> >
> > diff --git a/Changelog b/Changelog
> > index b6f6682904..2483fdd547 100644
> > --- a/Changelog
> > +++ b/Changelog
> > @@ -6,6 +6,7 @@ version <next>:
> >  - Playdate video decoder and demuxer
> >  - Extend VAAPI support for libva-win32 on Windows
> >  - afireqsrc audio source filter
> > +- MMTP parser and MMT/TLV demuxer
> >
> >  version 6.0:
> >  - Radiance HDR image support
> > diff --git a/doc/demuxers.texi b/doc/demuxers.texi
> > index 2d33b47a56..56aab251b2 100644
> > --- a/doc/demuxers.texi
> > +++ b/doc/demuxers.texi
> > @@ -689,6 +689,10 @@ Set the sample rate for libopenmpt to output.
> >  Range is from 1000 to INT_MAX. The value default is 48000.
> >  @end table
> >
> > + at section mmttlv
> > +
> > +Demuxer for MMT protocol over TLV packets (MMT/TLV), as defined in ARIB
> STD-B32.
> > +
> >  @section mov/mp4/3gp
> >
> >  Demuxer for Quicktime File Format & ISO/IEC Base Media File Format
> (ISO/IEC 14496-12 or MPEG-4 Part 12, ISO/IEC 15444-12 or JPEG 2000 Part 12).
> > diff --git a/libavformat/Makefile b/libavformat/Makefile
> > index f8ad7c6a11..e32d6e71a3 100644
> > --- a/libavformat/Makefile
> > +++ b/libavformat/Makefile
> > @@ -354,6 +354,7 @@ OBJS-$(CONFIG_MLV_DEMUXER)               += mlvdec.o
> riffdec.o
> >  OBJS-$(CONFIG_MM_DEMUXER)                += mm.o
> >  OBJS-$(CONFIG_MMF_DEMUXER)               += mmf.o
> >  OBJS-$(CONFIG_MMF_MUXER)                 += mmf.o rawenc.o
> > +OBJS-$(CONFIG_MMTTLV_DEMUXER)            += mmtp.o mmttlv.o
> >  OBJS-$(CONFIG_MODS_DEMUXER)              += mods.o
> >  OBJS-$(CONFIG_MOFLEX_DEMUXER)            += moflex.o
> >  OBJS-$(CONFIG_MOV_DEMUXER)               += mov.o mov_chan.o mov_esds.o
> \
> > diff --git a/libavformat/allformats.c b/libavformat/allformats.c
> > index efdb34e29d..d5f4f5680e 100644
> > --- a/libavformat/allformats.c
> > +++ b/libavformat/allformats.c
> > @@ -270,6 +270,7 @@ extern const AVInputFormat  ff_mlv_demuxer;
> >  extern const AVInputFormat  ff_mm_demuxer;
> >  extern const AVInputFormat  ff_mmf_demuxer;
> >  extern const FFOutputFormat ff_mmf_muxer;
> > +extern const AVInputFormat  ff_mmttlv_demuxer;
> >  extern const AVInputFormat  ff_mods_demuxer;
> >  extern const AVInputFormat  ff_moflex_demuxer;
> >  extern const AVInputFormat  ff_mov_demuxer;
> > diff --git a/libavformat/mmtp.c b/libavformat/mmtp.c
> > new file mode 100644
> > index 0000000000..ba1fcab281
> > --- /dev/null
> > +++ b/libavformat/mmtp.c
> > @@ -0,0 +1,1372 @@
> > +/*
> > + * MPEG Media Transport Protocol (MMTP) parser, as defined in ISO/IEC
> 23008-1.
> > + * Copyright (c) 2023 SuperFashi
> > + *
> > + * This file is part of FFmpeg.
> > + *
> > + * FFmpeg is free software; you can redistribute it and/or
> > + * modify it under the terms of the GNU Lesser General Public
> > + * License as published by the Free Software Foundation; either
> > + * version 2.1 of the License, or (at your option) any later version.
> > + *
> > + * FFmpeg is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> > + * Lesser General Public License for more details.
> > + *
> > + * You should have received a copy of the GNU Lesser General Public
> > + * License along with FFmpeg; if not, write to the Free Software
> > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> 02110-1301 USA
> > + */
> > +#include "libavutil/mem.h"
> > +#include "libavutil/avassert.h"
> > +#include "libavutil/intreadwrite.h"
> > +#include "libavcodec/bytestream.h"
> > +#include "network.h"
> > +#include "mmtp.h"
> > +#include "internal.h"
> > +#include "demux.h"
> > +
> > +#include <stdbool.h>
> > +
>
> > +#define ENSURE_BS_LEFT(bs, size) if (bytestream2_get_bytes_left(bs) <
> (size)) return AVERROR_INVALIDDATA
>
> please dont wrap libavcodec API in another API
> if every file in libavformat did that, noone would be able to
> read code except their own files
>
>
> > +
> > +struct MMTGeneralLocationInfo {
> > +    uint8_t location_type;
> > +    union {
> > +        struct {
> > +            uint16_t packet_id;
> > +        } type0;
> > +        struct {
> > +            struct in_addr ipv4_src_addr;
> > +            struct in_addr ipv4_dst_addr;
>
> > +            in_port_t      dst_port;
>
> src/libavformat/mmtp.c:43:13: error: unknown type name ‘in_port_t’
>              in_port_t      dst_port;
>
>
> [...]
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> If the United States is serious about tackling the national security
> threats
> related to an insecure 5G network, it needs to rethink the extent to which
> it
> values corporate profits and government espionage over security.-Bruce
> Schneier
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>


More information about the ffmpeg-devel mailing list