这段代码在ffmpeg.c中做了什么,它的目的是什么?
01562 ist->next_pts = ist->pts = picture.best_effort_timestamp;
01563 if (ist->st->codec->time_base.num != 0) {
01564 int ticks= ist->st->parser ? ist->st->parser->repeat_pict+1 : ist->st->codec->ticks_per_frame;
01565 ist->next_pts += ((int64_t)AV_TIME_BASE *
01566 ist->st->codec->time_base.num * ticks) /
01567 ist->st->codec->time_base.den;
01568 }
Run Code Online (Sandbox Code Playgroud)
Bar*_*art 92
那些是解码时间标记(DTS)和显示时间标记(PTS).您可以在教程中找到解释.
所以我们假设我们有一部电影,框架显示如下:IBB P.现在,我们需要知道P中的信息才能显示B帧.因此,帧可能存储如下:IPB B.这就是我们在每个帧上都有解码时间戳和显示时间戳的原因.解码时间戳告诉我们何时需要解码某些内容,并且演示时间戳告诉我们何时需要显示某些内容.因此,在这种情况下,我们的流可能如下所示:
Run Code Online (Sandbox Code Playgroud)PTS: 1 4 2 3 DTS: 1 2 3 4 Stream: I P B B一般来说,PTS和DTS只有在我们正在播放的流中有B帧时才会有所不同.