Home > Back-end >  How to validate properly ffmpeg pts/dts after demuxing/decoding?
How to validate properly ffmpeg pts/dts after demuxing/decoding?

Time:07-06

How should I validate pts/dts after demuxing and then after decoding?

For me it is significant to have valid pts all the time for days and possibly weeks of continuous streaming.

After demuxing I check:

  1. dts <= pts
  2. prev_packet_dts < next_packet_pts
  3. I also discard packets with AV_NOPTS_VALUE and wait for packets with proper pts, because I don't know video duration at this case.
  • pts of packets can be not increasing because of I-P-B frames Is it all right?

What about decoded AVFrames?

  1. Should 'pts' be increasing all the time?
  2. Why at some point 'pts' could lag behind 'dts'?
  3. Why pict_type is a parameter of AVFrame? Should be at AVPacket, because AVPacket is a compressed frame, not the opposite?

CodePudding user response:

  1. Ideally, yes. Unless if your format allows discontinuities, or wraps timestamps around due to overflow, like MPEG-TS.

  2. Writing error.

  3. It is an informational field, indicating the provenance of the frame. It can be used by filters or encoders, e.g. keyframe alignment during a re-encode.

CodePudding user response:

At libav support I was advised to not rely on decoder output. It is more solid to produce pts/dts for encoding/muxing manually and I should search for ffmpeg tools sources to proper implementation. I will search for this approach.

For now I discard AVFrames only with AV_NOPTS_VALUE, and the rest of encoding/muxing works fine.

Validation of AVPackets after Demuxing remains the same, as described above.

  • Related