Ffmpeg rtsp через tcp, временные метки rtp всегда равны нулю

Я пытаюсь получить метки времени из пакета RTP. Когда я сканирую пакеты с помощью Wireshark, я получаю следующий результат: rtp_packet Я вижу, что отметки времени увеличились после нескольких пакетов. У меня есть следующая проблема: когда я читаю значение временной метки из RTPDemuxContext-> timestamp (rtp_demux_context-> timestamp) в C, значение всегда равно нулю для нескольких камер, но для большинства камер код работает хорошо. Можете ли вы помочь разобраться, есть ли ошибка в камерах или в ffmpeg?

Вот мой код:

double ntp_timestamp(AVFormatContext* pFormatCtx, uint32_t* last_rtcp_ts, double* base_time) {
RTSPState* rtsp_state = (RTSPState*) pFormatCtx->priv_data;
RTSPStream* rtsp_stream = rtsp_state->rtsp_streams[0];
RTPDemuxContext* rtp_demux_context = (RTPDemuxContext*) rtsp_stream->transport_priv;

uint32_t new_rtcp_ts = rtp_demux_context->last_rtcp_timestamp;

uint64_t last_ntp_time = 0;

if (new_rtcp_ts != *last_rtcp_ts) {
    *last_rtcp_ts = new_rtcp_ts;
    last_ntp_time = rtp_demux_context->last_rtcp_ntp_time;
    uint32_t seconds = ((last_ntp_time >> 32) & 0xffffffff) - 2208988800;
    uint32_t fraction  = (last_ntp_time & 0xffffffff);
    double useconds = ((double) fraction / 0xffffffff);
    *base_time = seconds + useconds;
}
uint32_t d_ts = rtp_demux_context->timestamp - *last_rtcp_ts;
return *base_time + d_ts / 90000.0;

}

0
0
412
2

Ответы 2

могло ли это быть из-за того, что вы вычли 2208988800 из метки времени RTP seconds? Я подозреваю, что это может быть причиной. Я был в аналогичной ситуации, но обнаружил, что отметка времени начинает увеличиваться после включения камеры.

Возможно, сервер rtsp не отправляет отчет об отправителе rtcp. вы можете проверить, отправляет ли сервер отчет об отправителе rtcp с помощью wirehake.

Другие вопросы по теме