2013-11-20 176 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 –