Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Romain Beauxis <romain.beauxis@gmail.com>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Cc: Marvin Scholz <epirat07@gmail.com>, Lynne <dev@lynne.ee>,
	Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Subject: Re: [FFmpeg-devel] [PATCH v2] ogg/vorbis: implement header packet skip in chained ogg bitstreams.
Date: Mon, 11 Aug 2025 19:23:38 -0500
Message-ID: <CABWZ6OQu7-Zq49Ad61BKjhekKfWGM=1p6NHLjod+943gysq7Gw@mail.gmail.com> (raw)
In-Reply-To: <CABWZ6OR2gDoSAAOrrcvgvV0OX7b1xwzR=RtrkTj8gMGWwiV_Sg@mail.gmail.com>

Le lun. 11 août 2025 à 19:21, Romain Beauxis
<romain.beauxis@gmail.com> a écrit :
>
> Le lun. 11 août 2025 à 17:31, Yalda <marth64@proxyid.net> a écrit :
> >
> > Hi Romain,
>
> Hi!
>
> > I can try to help out here.
> > I am not familiar with the OGG spec but I can at least help with
> > reviews/facilitate to a degree, and it's free so I can read if needed.
> >
> > It seems you are trying to fix issues in and improve OGG support.
> > Can you give me a brief summary of your goals?
> > (i.e. what should I look at first to assist?)
>
> Great, thank you so much for taking the time.
>
> Got the current work, I would like to improve ffmpeg support for ogg
> stream chaining.
>
> # Ogg chaining
>
> The documentation for this feature is here:
> https://xiph.org/ogg/doc/oggstream.html
>
> Ogg stream chaining is used in particular to send a sequence of
> tracks. Each time a track ends, the current bitstream is terminated
> and a new one created. This is also required to pass in-band metadata.
>
> In practice, ogg chaining works pretty much like concatenating ogg files.
>
> Historically, this spec has proven to be a pretty bad design. There
> are very few tools handling this properly. Most of them treat the end
> of the first logical bitstream as an end of file.
>
> However, and furthermore unfortunately, ogg is still pretty popular
> for audio streaming, especially using icecast. In particular it is the
> only container that currently supports lossless codec (flac) with
> in-band metadata.
>
> # In ffmpeg
>
> In ffmpeg, support for chained streams is essentially missing. In the
> following, I'm talking about the state of the code before I started
> working on it.
>
> 1- Most decoders are able to keep decoding after the first logical
> bitstreams. However, in most cases, secondary and later metadata are
> lost.
>
> 2- The demuxer outputs ogg header packets as ffmpeg packets from
> secondary and further streams. These packets should be suppressed by
> the demuxer and instead passed as extradata.
>
> 3- PTS and later DTS of secondary and further streams are
> discontinuous: they restart from their initial value.

I meant the other way :-) DTS and then PTS

> 4- It is currently not possible to do a ffmpeg -c copy copy of
> sequentialize ogg streams.
>
> I'm trying to fix those 4 points.
>
> The work that I have been doing has been focused on the most popular
> codecs, namely opus, flac and vorbis. I'm happy to extend to more but,
> at this point, I'd consider all the other one as deprecated
> personally.
>
> Issue #1 is partially addressed with some patches current in the code
> base and some patches pending.
>
> But, first, I'd like to focus on issue #2 because it is almost complete.
>
> Currently, issue #2 has been addressed by a series of patches reviewed
> and merged by Michael and Lynne.
>
> 2431fd0b275: introduce a dump utility to track and check changes to
> the bitstreams on each patch
> 6d54af6599 and a9d39d6eb9: change the meaning of ogg_codec->packet
> return value of 1 to make it possible to direct the demuxer to skip
> some decoded packets
>
> At this point, the stage is ready to start skipping ogg header packets:
> 2fb6416dd0: skip ogg header packets in ogg/flac streams
> 9c5ed57f94: skip ogg header packets in ogg/opus streams
> 574f634e49: skip ogg header packets in ogg/vorbis streams
>
> The last one was clearly erroneous and reverted by Andreas Rheinhardt
>
> The PR here: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20026 is the
> fixed version, following Andreas Rheinhardt feedback.
>
> The fixed patch packs all 3 vorbis header into a bytestream structure,
> passes it as extra data and uses it on the decoder side.
>
> Following Michael's review, support for demuxed ogg headers is kept as
> legacy in case libavcodec is linked with an older version of
> libavformat.
>
> A new decoding routine is added to handle the new extradata-based
> header packets.
>
> Let me know if that is enough information for you to help and thanks again!
> -- Romain
_______________________________________________
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:[~2025-08-12  0:24 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-04 16:58 Romain Beauxis
2025-06-10 18:04 ` Romain Beauxis
2025-06-12 11:35   ` Michael Niedermayer
2025-06-14 10:39     ` Romain Beauxis
2025-06-14 22:57 ` Michael Niedermayer
2025-06-21  8:45   ` Romain Beauxis
2025-06-21 21:59     ` Michael Niedermayer
2025-07-23 19:06       ` Romain Beauxis
2025-07-28  0:22         ` Michael Niedermayer
2025-07-28 21:12           ` Romain Beauxis
2025-08-03 21:36             ` Michael Niedermayer
2025-08-03 22:50               ` Romain Beauxis
2025-08-04  0:11                 ` Michael Niedermayer
2025-08-04  0:19                   ` Kieran Kunhya via ffmpeg-devel
2025-08-04 10:53                     ` Nicolas George
2025-08-04  8:21                   ` Michael Niedermayer
2025-08-04 15:59                     ` Romain Beauxis
2025-08-11 22:31                       ` Yalda
2025-08-12  0:21                         ` Romain Beauxis
2025-08-12  0:23                           ` Romain Beauxis [this message]

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='CABWZ6OQu7-Zq49Ad61BKjhekKfWGM=1p6NHLjod+943gysq7Gw@mail.gmail.com' \
    --to=romain.beauxis@gmail.com \
    --cc=andreas.rheinhardt@outlook.com \
    --cc=dev@lynne.ee \
    --cc=epirat07@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