2017-08-29 523 views
0

拍攝的時代自從我一直在尋找這個,並且似乎無法找到它。我有一個使用ffmpeg的RTSP流。我可以使用的對象包括AVPacket,AVFrame,AVCodecContext和AVFormatContext。我想獲得一個幀的絕對時間。 (理想情況下粒度小到毫秒,儘管這不是完全必要的)。FFmpeg C++如何獲取時間戳,以秒爲單位,因爲在

有沒有一種簡單的方法來做到這一點使用ffmpeg庫?我已經看過av_frame_get_best_effort_timestamp以及codec_context->time_base,但似乎在視頻開始後的幾秒鐘內給出答案,而且我不一定知道視頻何時開始。

+0

表示假設你就可以得到從流的時間戳。它將被綁定到遠程計算機上的時鐘 - 這與本地時鐘無關。那麼爲什麼不存儲收到第一個視頻幀的時間,並將其用作您提取的每個av_frame_get_best_effort_timestamp的偏移量? –

+0

@Artemy因爲我需要我的應用程序與視頻給予我的時間同步。可能有多個應用程序都使用此流,並且我希望我的程序與這些流同步。我收到第一個數據包的時間可能比我的應用程序的幀時間延遲了30秒,而另一個應用程序延遲了10秒。然後我的時間是20秒。而從視頻流的絕對時間可以被所有的應用程序訪問 –

回答

1

使用int64_t AVFormatContext::start_time_realtime,然後添加自流開始以來的幀時間。

[編輯]

而且考慮到start_time_realtime以毫秒爲單位,而AVFrame::best_effort_timestampAVStream->time_base units

+0

從我開始使用best_effort_timestamp和time_base視頻開始的那段時間? 此外,這是否給我的流的start_time,或視頻的start_time? –

+0

@DerekHalden是實時流式傳輸的開始時間,使用'int64_t AVFrame :: best_effort_timestamp'是一致的。 – Rama

+0

值得注意的是,這給出的時間以微秒爲單位,而best_effort_timestamp給出的時間以秒爲單位。 –

相關問題