【问题标题】:Retrieving timestamp in RTP/RTSP [closed]在 RTP/RTSP 中检索时间戳 [关闭]
【发布时间】:2013-12-04 09:21:38
【问题描述】:

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

使用 Wireshark 我可以看到来自相机(Axis 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

【问题讨论】:

  • 到目前为止你尝试过什么?有什么效果?什么没有奏效?如果您还没有这样做,您可能想阅读the Stack Overflow question checklist。
  • 我没有尝试任何东西,因为我找不到任何提取时间戳的方法。没有任何效果,所以...
  • 这对ffmpeg.org/doxygen/2.0/…有帮助吗?
  • 嗨,谢尔盖,感谢您的评论。可能有用,但实际上问题是我不知道如何检索该时间戳,问题不在于我如何解析/表示它。
  • @DídacPérez 与您最初的问题有关。我的意思是,您对“绝对时间戳”的期望是什么,在最佳情况下,您将能够获得挂钟时间,但不是实时时间。

标签: c++ ffmpeg rtsp rtp libav


【解决方案1】:

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

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

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

【讨论】:

  • 您好,谢谢您的回答。我将尝试 testRTSPClient。但是,我的问题是关于使用 ffmpeg lib 检索该时间戳,所以我无法将您的答案标记为正确的答案:(
  • 这个看起来很像,可能对你有帮助stackoverflow.com/questions/6149983/…
【解决方案2】:

我终于解决了这个问题。

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

【讨论】:

  • 你能发一些sn-ps吗?
  • @Arun 从对 AVFormatContext 的引用开始,执行以下操作:RTSPState *state = _formatCtx->priv_data;RTSPStream *stream = state->rtsp_streams[0];RTPDemuxContext *demux = stream->transport_priv;demux->timestamp
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
  • 2023-01-13
相关资源
最近更新 更多