[Libav-user] Using Libav to make HLS clips from H264

Tyler Brooks tylerjbrooks at gmail.com
Tue Nov 21 22:07:53 EET 2017


On Mon, Nov 20, 2017 at 2:33 PM, Carl Eugen Hoyos <ceffmpeg at gmail.com>
wrote:

> 2017-11-20 23:12 GMT+01:00 Tyler Brooks <tylerjbrooks at gmail.com>:
>
> > My encoder gives me a timestamp on every frame (int64_t in microseconds).
> > The hardware is pretty good and the timestamps are very nearly always
> > separated to 1/framerate.  In my case the framerate is 30fps so the
> frames
> > come out of the encoder about every 30ms (lets just say for easy math for
> > now).
> >
> > Of course, I could use those timestamps for my pts/dts.  Indeed, I have
> > tried.
> >
> > But here is the root of my problem.  The key frames are handed to me as
> four
> > NAL packets (SPS, PPS, SEI, key_frame) all at the same time and all with
> the
> > same timestamp.  That makes sense.  The metadata meant for the decoder
> (SPS,
> > PPS and SEI) should to be associated with the leading key_frame and they
> > should all share the same timestamp.  My problem is I don't know how to
> make
> > a multi-packet 'AVPacket' to submit as a single frame to the
> > 'av_write_frame' call.
>
> Did you try to concatenate SPS, PPS and SEI with
> the first key-frame?
>
> Carl...
I tried concatenating the meta data with the key frame but no joy.

So, a friend pointed out to me that I might be going at this the wrong
way.  The basic problem I am having is that I don't have an input context
so there is no h264 parser that can take the SPS, PPS and SEI packets and
do anything with them.  I suspect that my loop appears to be working
because I am writing to an 'mpegts' file which, I think, is just h264
packets with the leading NAL zeroes replace with length words (some
bit-stream filter must be doing that).  But that would mean that there
isn't much chance that I can get the timestamps right because I have to
submit them as frames. I can't submit them as 'extradata/sidedata' because
there is no codec to catch them.

Apparently I am supposed to write a custom IO context for the output of my
encoder and then do a normal input context.  I have done some experiments
with this approach and it seems to work.

Thank you for your help Carl.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20171121/5505d6fb/attachment.html>


More information about the Libav-user mailing list