获得AVFrame pts值

时间:2014-02-25 15:30:15

标签: c ffmpeg libavcodec

  1. 我有一个来自FormatContext的视频AVStream。 [avstream]
  2. 读取数据包
  3. 解码数据包,如果它来自视频。
  4. 现在显示以下内容。

    Packet DTS ->  7200.00    [ from packet ]
    Frame PTS   -> -9223372036854775808.000000
    stream time_base ->  0.000011
    Offset                    ->  0.080000    [ pts * time_base ]
    
  5. 代码:

    double pts = (double) packet.dts;
    printf (" dts of packet %f , Frame pts:  %f, timeBase %f Offset: %f ",
        pts,
        (double)pFrame->pts, 
        av_q2d (avstream->time_base) , 
        pts
    *av_q2d(avstream->time_base));
    
    1. 为什么Frame pts为负?这是预期的行为吗?
    2. 我是否需要考虑来自数据包DTS的帧pts [即:frame pts = packet dts]

1 个答案:

答案 0 :(得分:1)

您看到的PTS数字是-9223372036854775808(0x8000000000000000),也称为AV_NOPTS_VALUE。这意味着没有可用的价值。

当我看到这个时我找不到解决方案,所以在花了相当长的时间对此付诸行动之后,我最终还是在看到这个时手动推进了我的视频时钟。

int64 pts = m_frame->pts;

if (pts == AV_NOPTS_VALUE)
{
    pts = m_videoClock +
        (1.f / av_q2d(stream->avg_frame_rate)) / av_q2d(stream->time_base);
}

m_videoClock = pts;

我不认为DTS在这里有用,因为它表示数据包何时解码,而不是PTS的替代。

这里还有一些其他信息对我有所帮助: getting AVFrame pts value