Получение метки времени в RTP / RTSP

Я использую 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 \ г \ п

1

Решение

Наконец я решил проблему.

Мне нужно было поймать RTSPState из контекста, чтобы получить массив RTSPStream и получить видео, а затем получить RTPDemuxContext, который содержит метку времени.

4

Другие решения

Пакеты RTP содержат только относительные метки времени. Абсолютные метки времени включаются в отчет отправителя (SR), являющийся частью RTCP.

Некоторые неполные реализованные IP-камеры не отправляют SR-пакеты — тогда вам не повезло.
Я бы дал live555’s testRTSPClient (http://www.live555.com/liveMedia/#testProgs)
попытка, которая дает вам доступ к абсолютной метке времени — если передано.

Функция afterGettingFrame передает вам абсолютную метку времени, и с помощью RTPSource :: hasBeenSynchronizedUsingRTCP вы можете проверить ее.

3

По вопросам рекламы [email protected]