Я использую libav / ffmpeg для подключения к IP-камерам. Мне нужно извлечь абсолютную метку времени из кадров, а не pts / dts. Как я могу иметь это значение?
Используя Wireshark, я вижу следующий ответ от камеры (Axis P1355):
Информация RTP: url = rtsp: //xxx.dyndns.org: 4378 / axis-media / media.amp / trackID = 1? Fps = 4&разрешение = 1280×720&сжатие = 60; сл = 32446; rtptime = 3287715479 \ г \ п
Наконец я решил проблему.
Мне нужно было поймать RTSPState из контекста, чтобы получить массив RTSPStream и получить видео, а затем получить RTPDemuxContext, который содержит метку времени.
Пакеты RTP содержат только относительные метки времени. Абсолютные метки времени включаются в отчет отправителя (SR), являющийся частью RTCP.
Некоторые неполные реализованные IP-камеры не отправляют SR-пакеты — тогда вам не повезло.
Я бы дал live555’s testRTSPClient (http://www.live555.com/liveMedia/#testProgs)
попытка, которая дает вам доступ к абсолютной метке времени — если передано.
Функция afterGettingFrame передает вам абсолютную метку времени, и с помощью RTPSource :: hasBeenSynchronizedUsingRTCP вы можете проверить ее.