[Ffmpeg-devel] Interleaving audio and video
Roman Shaposhnik
rvs
Sun Feb 4 06:57:19 CET 2007
Hi
On Fri, 2007-02-02 at 12:05 +0100, Michael Niedermayer wrote:
> > > see av_interleaved_write_frame() (the docs above it)
> > > and AVOutputFormat.interleave_packet()
> >
> > I see. Thanks for pointing it out. I guess my followup question
> > is exactly along the lines of what Baptiste has asked -- should
> > we enforce it somehow ?
>
> packets MUST be interleaved according to AVOutputFormat.interleave_packet
> i thought the doxygen comments clearly say so but apparently not
Right. I guess lack of documentation was to some extent responsible
for my confusion. We sure can use a word or two of doxygen, but I guess
the key problem is that one is supposed to know whether to use
av_write_packet() or av_interleaved_write_frame() ahead of time.
Most of examples illustrating how to use FFmpeg's API use
av_write_packet() exclusively, with the only exception of ffmpeg.c
itself.
Now, there are formats (DV, GXF and may be others) which sort
of require av_interleaved_write_frame() regardless of how well
the incoming stream of packets is interleaved. The reason, as I
figured out by reading the other portion of this thread is
that somehow av_interleaved_write_frame() gets used to emulate
and actual packetizer.
> > Or perhaps have a flag for AVOutputFormat ?
>
> i dunno what do we gain from this? making non interleaved mov and avi,
> which are slower to demux due to seeking between streams, and cant be
> streamed over non seekable protocols, it doesnt seem like a good idea
Sorry, I wasn't clear on this one. Here's the problem I was talking
about: it seems that currently there's nothing preventing clients
from using av_write_packet() for generating GXF files. Same thing
would happen to the DV muxer if I decide to simplify it by using
the av_interleaved_write_frame() magic instead of an actual packetizer.
So, where I was driving at was a sort of solution where somehow
muxers like DV and GXF would *mandate* usage of
av_interleaved_write_frame().
An alternative (at least for DV and GXF) would be an actual
packetizer.
Thanks,
Roman.
More information about the ffmpeg-devel
mailing list