这是我之前邮政。我目前能够使用 ffmpeg 和 opencv 获取 RTP 时间戳,但是,我实际上试图获取捕获帧的时间戳。我做了一些工作来尝试找到捕获帧的时间(代码是 python 格式)。
seconds_before_frame = cap.getRTPTimeStampSeconds()
fractionofseconds_before_frame = cap.getRTPTimeStampFraction()
ret, frame = cap.read()
seconds_after_frame = cap.getRTPTimeStampSeconds()
fractionofseconds_after_frame = cap.getRTPTimeStampFraction()
通过这样做,我发现捕获的时间偏差了0.02359296
几秒钟,有时甚至0.2359296
几秒,这比我预期的要多得多。
我看到了一种尝试使用 AVFormatContext 来获取帧的时间戳的方法,但我并不真正理解如何通过 priv_data 来获取它。
AVPacket* packet;
av_read_frame(formatCtx, packet);
RTSPState* rtspState = formatCtx->priv_data;
RTPDemuxContext *rtpdemux = rtspState->rtsp_streams[packet->stream_index]->transport_priv;
也
RTSPState *state = _formatCtx->priv_data;
RTSPStream *stream = state->rtsp_streams[0];
RTPDemuxContext *demux = stream->transport_priv;
demux→timestamp
我想问一下我们如何从 C++ 端调用 AVFormatContext,是通过吗av_read_frame
?是否可以使用 python 绑定或VideoCapture
已经包装了 ffmpeg,因此无需使用av_read_frame
而只需调用VideoCapture
?