C++ FFmpeg c++;如何获取时间戳,以帧拍摄时的历元后的秒为单位

C++ FFmpeg c++;如何获取时间戳,以帧拍摄时的历元后的秒为单位,c++,ffmpeg,unix-timestamp,C++,Ffmpeg,Unix Timestamp,我一直在找这个,但似乎找不到。我有一个使用ffmpeg提取的RTSP流。我可以使用的对象包括AVPacket、AVFrame、AVCodecContext和AVFormatContext。我想得到拍摄一帧的绝对时间。(理想情况下,粒度只有毫秒,尽管这不是完全必要的) 使用ffmpeg库有没有一种简单的方法可以做到这一点?我已经看过了av\u frame\u get\u best\u efforce\u timestamp以及codec\u context->time\u base,但这似乎在视频

我一直在找这个,但似乎找不到。我有一个使用ffmpeg提取的RTSP流。我可以使用的对象包括AVPacket、AVFrame、AVCodecContext和AVFormatContext。我想得到拍摄一帧的绝对时间。(理想情况下,粒度只有毫秒,尽管这不是完全必要的)

使用ffmpeg库有没有一种简单的方法可以做到这一点?我已经看过了
av\u frame\u get\u best\u efforce\u timestamp
以及
codec\u context->time\u base
,但这似乎在视频开始后的几秒钟内给出了答案,我不一定知道视频何时开始

使用,然后添加自流开始的帧时间

[编辑]


还要考虑到
start\u time\u realtime
以毫秒表示,而
AVFrame::best\u efforce\u timestamp
AVStream->time\u基本单位表示,假设您能够从流中获取时间戳。它将被绑定到远程计算机上的时钟上——这与本地时钟无关。那么,为什么不存储接收到第一个视频帧的时间,并将其用作已提取的每个av_帧的偏移量_get_best_efforce_timestamp?@Artemy,因为我需要我的应用程序与视频给我的时间同步。可能有多个应用程序都使用此流,我希望我的程序与这些应用程序同步。我收到第一个数据包的时间可能从为我的应用程序拍摄帧时延迟30秒,而为另一个应用程序延迟10秒。然后我的计时就差20秒了。然而,所有应用程序都可以访问流中的绝对时间帧的绝对时间戳可以使用RTCP发送者报告中的信息提取。示例是如何在C中使用FFMpeg内部头文件完成的。自视频开始以来的时间是否是我使用best_effort_timestamp和time_base获得的时间?另外,这是否给了我流媒体的开始时间,还是视频的开始时间?@DerekHalden是流媒体的开始时间,请使用
int64\t AVFrame::best\u efforce\u timestamp
保持一致。值得注意的是,这给出的时间以微秒为单位,best\u efforce\u timestamp给出的时间以秒为单位。