检索RTP / RTSP中的时间戳

Did*_*era 1 c++ ffmpeg rtp rtsp libav

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

使用Wireshark,我可以从相机(轴P1355)看到以下响应:

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

Mar*_*ann 5

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

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

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


Did*_*era 5

最后我解决了这个问题。

为了获取RTSPStream数组并获取视频,我不得不从上下文中捕获RTSPState,然后获取包含时间戳的RTPDemuxContext。

  • 您可以发布一些摘要吗? (3认同)
  • @Arun从对AVFormatContext的引用开始,执行以下操作:`RTSPState * state = _formatCtx-> priv_data;`RTSPStream * stream = state-> rtsp_streams [0];`RTPDemuxContext * demux = stream-> transport_priv;` `demux->时间戳' (2认同)