ffmpeg RTSP через TCP, временные метки RTP всегда равны нулю - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь получить метки времени из 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;

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...