现在显示以下内容。
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));
答案 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