我正在尝试从RTP数据包获取时间戳。当我用Wireshark扫描数据包时,得到以下输出: rtp_packet 我看到时间戳在几个数据包之后增加了。 我遇到的问题如下:当我从C中的RTPDemuxContext-> timestamp(rtp_demux_context-> timestamp)读取时间戳值时,对于多个摄像机,该值始终为零,但对于大多数摄像机而言,代码运行良好。 您能帮忙弄清楚相机中是否存在错误或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)
是因为您从RTP时间戳记2208988800
中减去了seconds
吗?我怀疑这可能是原因。我处于类似情况,但发现打开相机电源后时间戳开始增加。