Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: "Jan Ekström" <jeebjp@gmail.com>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Subject: Re: [FFmpeg-devel] [PATCH v2 3/3] avformat/movenc: add support for fragmented TTML muxing
Date: Fri, 8 Dec 2023 19:09:35 +0200
Message-ID: <CAEu79SZPpM2UrEvjane6wnj+UjGLCFJrShxV0pa4Gm3aYPq+6Q@mail.gmail.com> (raw)
In-Reply-To: <CAEu79SYDdAGk168RHOUqHzoimXSdgYbMGSkB90B=9LkDoXQRkw@mail.gmail.com>

On Fri, Dec 8, 2023 at 7:05 PM Jan Ekström <jeebjp@gmail.com> wrote:
>
> On Fri, Dec 8, 2023 at 5:37 PM Dennis Mungai <dmngaie@gmail.com> wrote:
> >
> > On Fri, 8 Dec 2023 at 15:14, Andreas Rheinhardt <
> > andreas.rheinhardt@outlook.com> wrote:
> >
> > > Jan Ekström:
> > > > From: Jan Ekström <jan.ekstrom@24i.com>
> > > >
> > > > Attempts to base the fragmentation timing on other streams
> > > > as most receivers expect media fragments to be more or less
> > > > aligned.
> > > >
> > > > Currently does not support fragmentation on subtitle track
> > > > only, as the subtitle packet queue timings would have to be
> > > > checked in addition to the current fragmentation timing logic.
> > > >
> > > > Signed-off-by: Jan Ekström <jan.ekstrom@24i.com>
> > > > ---
> > > >  libavformat/movenc.c                        |    9 -
> > > >  libavformat/movenc_ttml.c                   |  157 ++-
> > > >  tests/fate/mov.mak                          |   21 +
> > > >  tests/ref/fate/mov-mp4-fragmented-ttml-dfxp | 1197 +++++++++++++++++++
> > > >  tests/ref/fate/mov-mp4-fragmented-ttml-stpp | 1197 +++++++++++++++++++
> > >
> > > Am I the only one who thinks that this is a bit excessive?
> > >
> > > >  5 files changed, 2568 insertions(+), 13 deletions(-)
> > > >  create mode 100644 tests/ref/fate/mov-mp4-fragmented-ttml-dfxp
> > > >  create mode 100644 tests/ref/fate/mov-mp4-fragmented-ttml-stpp
> > > >
> > > > diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak
> > > > index 6cb493ceab..5c44299196 100644
> > > > --- a/tests/fate/mov.mak
> > > > +++ b/tests/fate/mov.mak
> > > > @@ -143,6 +143,27 @@ FATE_MOV_FFMPEG_FFPROBE-$(call TRANSCODE, TTML
> > > SUBRIP, MP4 MOV, SRT_DEMUXER TTML
> > > >  fate-mov-mp4-ttml-stpp: CMD = transcode srt
> > > $(TARGET_SAMPLES)/sub/SubRip_capability_tester.srt mp4 "-map 0:s -c:s ttml
> > > -time_base:s 1:1000" "-map 0 -c copy" "-of json -show_entries
> > > packet:stream=index,codec_type,codec_tag_string,codec_tag,codec_name,time_base,start_time,duration_ts,duration,nb_frames,nb_read_packets:stream_tags"
> > > >  fate-mov-mp4-ttml-dfxp: CMD = transcode srt
> > > $(TARGET_SAMPLES)/sub/SubRip_capability_tester.srt mp4 "-map 0:s -c:s ttml
> > > -time_base:s 1:1000 -tag:s dfxp -strict unofficial" "-map 0 -c copy" "-of
> > > json -show_entries
> > > packet:stream=index,codec_type,codec_tag_string,codec_tag,codec_name,time_base,start_time,duration_ts,duration,nb_frames,nb_read_packets:stream_tags"
> > > >
> > > > +FATE_MOV_FFMPEG_FFPROBE-$(call TRANSCODE, TTML SUBRIP, MP4 MOV,
> > > LAVFI_INDEV SMPTEHDBARS_FILTER SRT_DEMUXER MPEG2VIDEO_ENCODER TTML_MUXER
> > > RAWVIDEO_MUXER) += fate-mov-mp4-fragmented-ttml-stpp
> > > > +fate-mov-mp4-fragmented-ttml-stpp: CMD = transcode srt
> > > $(TARGET_SAMPLES)/sub/SubRip_capability_tester.srt mp4 \
> > > > +  "-map 1:v -map 0:s \
> > > > +   -c:v mpeg2video -b:v 2M -g 48 -sc_threshold 1000000000 \
> > > > +   -c:s ttml -time_base:s 1:1000 \
> > > > +   -movflags +cmaf" \
> > > > +  "-map 0:s -c copy" \
> > > > +  "-select_streams s -of csv -show_packets -show_data_hash crc32" \
> > > > +  "-f lavfi -i
> > > smptehdbars=duration=70:size=320x180:rate=24000/1001,format=yuv420p" \
> > > > +  "" "" "rawvideo"
> > >
> > > Would it speed the test up if you used smaller dimensions or a smaller
> > > bitrate?
> > > Anyway, you probably want the "data" output format instead of rawvideo.
> > >
> > > > +
> > > > +FATE_MOV_FFMPEG_FFPROBE-$(call TRANSCODE, TTML SUBRIP, ISMV MOV,
> > > LAVFI_INDEV SMPTEHDBARS_FILTER SRT_DEMUXER MPEG2VIDEO_ENCODER TTML_MUXER
> > > RAWVIDEO_MUXER) += fate-mov-mp4-fragmented-ttml-dfxp
> > > > +fate-mov-mp4-fragmented-ttml-dfxp: CMD = transcode srt
> > > $(TARGET_SAMPLES)/sub/SubRip_capability_tester.srt ismv \
> > > > +  "-map 1:v -map 0:s \
> > > > +   -c:v mpeg2video -b:v 2M -g 48 -sc_threshold 1000000000 \
> > > > +   -c:s ttml -tag:s dfxp -time_base:s 1:1000" \
> > > > +  "-map 0:s -c copy" \
> > > > +  "-select_streams s -of csv -show_packets -show_data_hash crc32" \
> > > > +  "-f lavfi -i
> > > smptehdbars=duration=70:size=320x180:rate=24000/1001,format=yuv420p" \
> > > > +  "" "" "rawvideo"
> > > > +
> > > >  # FIXME: Uncomment these two tests once the test files are uploaded to
> > > the fate
> > > >  # server.
> > > >  # avif demuxing - still image with 1 item.
> > >
> >
> > Hello Jan,
> >
> > Taking this note into account, and I quote:
> >
> >  " Currently does not support fragmentation on subtitle track only, as the
> > subtitle packet queue timings would have to be checked in addition to the
> > current fragmentation timing logic."
> >
> > Wouldn't it be ideal to have this merged until after support for
> > fragmentation in subtitle-only tracks is complete, at the very least? That
> > way, the fate tests for such a workflow (case in point CMAF) would
> > therefore be feature complete?
> > The typical workloads that depend on such functionality, such as ingesting
> > CMFT require a subtitle-only stream be present in such a representation.
> >
> > See:
> > 1.
> > https://www.unified-streaming.com/blog/cmaf-conformance-is-this-really-cmaf
> > 2. https://www.unified-streaming.com/blog/live-media-ingest-cmaf
>
> It would be ideal, but there are a few points to keep in mind:
>
> 1. For such streaming, you are generally required to be synchronized
> in your fragmentation against other media (either video or audio). If
> subtitle only fragmentation is implemented and you have a TTML-only
> mux, then you may set something like time-based fragmentation (time of
> your expected GOP duration or so), but nothing would make sure you are
> fragmenting according to those other tracks.
> 2. Subtitle-only fragmentation is possible via the API client already
> with this implementation, which for a one-mux = one track output is
> the only way to make sure you are in sync with those other tracks as
> the muxer has no idea of where they are going (as they would be in
> other AVFormatContexts).
> 3. I have tested this code against this vendor, with the subtitles
> together in a single mux with a track that is not sparse in order to
> keep the fragmentation in sync.
>
> In other words, given how CMAF is defined I would say you are supposed
> to be controlling all muxes from a central point as synchronization is
> required. That is already possible with these changes. I can
> definitely implement time-based fragmentation for TTML only muxes, but
> I think there are some reasons to consider that not that high
> priority.

Or I guess another way would be to make sure the "fragment on each
packet" option's logic works with a TTML-only mux, and instead of
feeding the packet to the subtitle queue, you just fragment & output
with each fed TTML packet.

Jan
_______________________________________________
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".

  reply	other threads:[~2023-12-08 17:09 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-15 13:16 [FFmpeg-devel] [PATCH v2 0/3] Initial " Jan Ekström
2023-09-15 13:16 ` [FFmpeg-devel] [PATCH v2 1/3] tests/fate-run: add support for specifying the final encode muxer in `transcode` Jan Ekström
2023-09-15 13:16 ` [FFmpeg-devel] [PATCH v2 2/3] avcodec/avpacket: add functionality to prepend to AVPacketLists Jan Ekström
2023-09-15 13:17 ` [FFmpeg-devel] [PATCH v2 3/3] avformat/movenc: add support for fragmented TTML muxing Jan Ekström
2023-12-08 12:15   ` Andreas Rheinhardt
2023-12-08 15:36     ` Dennis Mungai
2023-12-08 17:05       ` Jan Ekström
2023-12-08 17:09         ` Jan Ekström [this message]
2023-12-08 17:17           ` Jan Ekström
2023-12-08 11:52 ` [FFmpeg-devel] [PATCH v2 0/3] Initial " Jan Ekström

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAEu79SZPpM2UrEvjane6wnj+UjGLCFJrShxV0pa4Gm3aYPq+6Q@mail.gmail.com \
    --to=jeebjp@gmail.com \
    --cc=ffmpeg-devel@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git