[Libav-user] Configuring mp4 muxer to not recalculate time_base to an absurd timescale value

Corey Taylor corey.taylor.fl at gmail.com
Thu Jan 11 07:02:53 EET 2018


I was able to resolve this.  I said something incorrect earlier about
the RTP flags.  Clearly this has nothing to do with the timescaling ..
I just misread the same for loop.

You *must* re-scale the packet timestamps before calling
av_interleaved_write_frame with av_packet_recale_ts().

Call this with the AVCodecContext time_base as the tb_src and the
AVStream time_base as the tb_dest.  This will scale the pts, dts and
duration values.

/**
 * Convert valid timing fields (timestamps / durations) in a packet from one
 * timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be
 * ignored.
 *
 * @param pkt packet on which the conversion will be performed
 * @param tb_src source timebase, in which the timing fields in pkt are
 *               expressed
 * @param tb_dst destination timebase, to which the timing fields will be
 *               converted
 */
void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst);

corey

On Tue, Jan 9, 2018 at 2:50 PM, Corey Taylor <corey.taylor.fl at gmail.com> wrote:
>> I set the time_base value in the output AVStream to 1/90000, then stepped through the code to write the header, some frames, and then the trailer. Watching the time_base value in the debugger as I stepped through, I noticed that the values change to the 1/15360 value after the invocation of av_write_header(), which matches your findings. I am currently working around the issue by rescaling each frame's PTS/DTS to the new 1/15360 timebase, rather than using the actual timebase associated with the stream produced by the camera.
>
>
> Where you able to test if the older library modified the time-base at all?
>
> corey


More information about the Libav-user mailing list