检索RTP / RTSP中的时间戳

时间:2013-11-20 11:43:11

标签: c++ ffmpeg rtsp rtp libav

我使用libav / ffmpeg连接到IP摄像机。我确实需要从帧中提取绝对时间戳,而不是pts / dts。我怎么能有这个价值?

使用Wireshark我可以看到相机的以下响应(Axis P1355):

RTP-Info:url = rtsp://xxx.dyndns.org:4378 / axis-media / media.amp / trackID = 1?fps = 4& resolution = 1280x720& compression = 60; seq = 32446; rtptime = 3287715479 \ r \ n

2 个答案:

答案 0 :(得分:4)

RTP数据包仅包含相对时间戳。绝对时间戳包含在作为RTCP一部分的发件人报告(SR)中。

一些未完成的IP摄像机不会发送SR数据包 - 那么你就不走运了。 我会给live555的testRTSPClient(http://www.live555.com/liveMedia/#testProgs) 尝试使您可以访问绝对时间戳 - 如果已传输。

“afterGettingFrame”函数为您提供绝对时间戳,使用RTPSource :: hasBeenSynchronizedUsingRTCP可以验证它。

答案 1 :(得分:4)

最后我解决了这个问题。

我必须从上下文中捕获RTSPState,以便获取RTSPStream数组并获取视频,然后获取包含时间戳的RTPDemuxContext。