[Libav-user] lavdevices: last few seconds cut off

Perette Barella perette at barella.org
Tue Feb 13 21:22:53 EET 2018


I'm using libavdevices for output, and it consistently truncates the 
last second or so of output.  When using other output libraries it 
doesn't get truncated, so it's definitely my avdevice code, not 
something upstream.

I assume this means I should be doing something more to ensure things 
are fully flushed before I close the device.  The close code I have is:

     AvDeviceOutput::~AvDeviceOutput () {
         int status = av_write_trailer (context);
         if (status != 0) {
             flogav ("av_write_trailer", status);
         }
         avcodec_close (codec_context.get());
         avformat_free_context (context);
     }

What more should I be doing?

* av_write_trailer is returning 0 (success).
* I think the amount that's cut off is variable, from a fraction of a 
second to maybe about 1 second, maybe two.
* If I add a sleep() before av_write_trailer, the problem goes away--but 
this doesn't seem like a good solution, and leaves the dilemma of how 
much.  To little, there's audio truncated.  To much, I get gaps between 
tracks.

Platform is Linux, output to ALSA:
Output #0, alsa, to 'Default audio output driver':
     Stream #0:0: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s
Other than the chopped ending, everything else is working beautifully.

Thanks in advance,

Perette




More information about the Libav-user mailing list