2013-11-20 153 views
1

我正在使用libav/ffmpeg連接到IP攝像機。我確實需要從幀中提取絕對時間戳,而不是pts/dts。我怎樣才能擁有這個價值?在RTP/RTSP中檢索時間戳

使用的Wireshark我可以看到從相機(軸P1355)以下響應:

RTP-信息:URL = RTSP://xxx.dyndns.org:4378 /軸媒體/ media.amp/?的TrackID = 1 FPS = 4 &分辨率1280×720 =壓縮& = 60; SEQ = 32446; rtptime = 3287715479 \ r \ n

+0

到目前爲止您嘗試了什麼?什麼工作?什麼都沒有奏效?如果您還沒有這樣做,您可能需要閱讀[Stack Overflow問題清單](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist)。 –

+0

由於找不到任何提取時間戳的方法,我還沒有嘗試過任何東西。沒有工作,所以... –

+0

這將有助於http://www.ffmpeg.org/doxygen/2.0/timestamp_8h.html#ad344b91ede6b86fc0a530611293f42da? –

回答

4

最後我解決了這個問題。

我不得不從上下文中捕獲RTSPState,以便獲取RTSPStream數組並獲取視頻,然後獲取包含時間戳的RTPDemuxContext。

+3

你可以發表一些片段嗎? – Arun

+1

@Arun從對AVFormatContext的引用開始,執行以下操作: 'RTSPState * state = _formatCtx-> priv_data;' 'RTSPStream * stream = state - > rtsp_streams [0];' 'RTPDemuxContext * demux = stream-> transport_priv;' 'demux-> timestamp' –

3

RTP分組只包含相對時間戳。絕對時間戳包含在作爲RTCP一部分的發送者報告(SR)中。

一些未完成的IP攝像機不會發送SR數據包 - 那麼您運氣不好。 我會給live555的testRTSPClient(http://www.live555.com/liveMedia/#testProgs) 一個嘗試,讓您訪問絕對時間戳 - 如果傳輸。

「afterGettingFrame」函數爲您提供了一個絕對時間戳,並且使用RTPSource :: hasBeenSynchronizedUsingRTCP您可以驗證它。

+0

嗨,謝謝你的回答。我會嘗試testRTSPClient。不過,我的問題是關於使用ffmpeg lib檢索該時間戳,所以我不能將您的答案標記爲正確答案:( –

+0

這看起來很相似,可能會幫助您http://stackoverflow.com/questions/6149983/ h-264-rtsp-absolute-timestamp –