我使用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
答案 0 :(得分:4)
RTP数据包仅包含相对时间戳。绝对时间戳包含在作为RTCP一部分的发件人报告(SR)中。
一些未完成的IP摄像机不会发送SR数据包 - 那么你就不走运了。 我会给live555的testRTSPClient(http://www.live555.com/liveMedia/#testProgs) 尝试使您可以访问绝对时间戳 - 如果已传输。
“afterGettingFrame”函数为您提供绝对时间戳,使用RTPSource :: hasBeenSynchronizedUsingRTCP可以验证它。
答案 1 :(得分:4)
最后我解决了这个问题。
我必须从上下文中捕获RTSPState,以便获取RTSPStream数组并获取视频,然后获取包含时间戳的RTPDemuxContext。