【问题标题】:getting AVFrame pts value获取 AVFrame pts 值
【发布时间】:2014-03-27 22:43:26
【问题描述】:
  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 ]
    

代码:

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 [ 即:帧 pts = 数据包 dts]

【问题讨论】:

  • ffprobe.c 的源代码可能很有趣,因为它输出类似的东西,不是吗?

标签: c ffmpeg libavcodec


【解决方案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

【讨论】:

    猜你喜欢
    • 2013-12-05
    • 1970-01-01
    • 2010-11-06
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多