接收rtp 时间戳设置
1. 设置pts
Pts的设置是根据timestamp和rtcp的ntp time设置的,在函数finalize_packet()内设置。跟ntp time挂钩是音视频同步的基础。
基本上可以认为timestamp的变化值就是pts的变化值,在没有B frame 时25fps 就是3600递增, 29.97fps 是3003 递增。存在B frame 时 timestamp 值 不是线性增加。
/**
* This was the second switch in rtp_parse packet.
* Normalizes time, if required, sets stream_index, etc.
*/
static void finalize_packet(RTPDemuxContext *s, AVPacket *pkt, uint32_t timestamp)
{
if (pkt->pts != AV_NOPTS_VALUE || pkt->dts != AV_NOPTS_VALUE)
return; /* Timestamp already set by depacketizer */
if (timestamp == RTP_NOTS_VALUE)
return;
if (s->last_rtcp_ntp_time != AV_NOPTS_VALUE && s->ic->nb_streams > 1) {
int64_t addend;
int del

该博客详细介绍了在ffmpeg接收rtsp流时如何设置pts和dts。pts的设置依赖于timestamp和rtcp的ntp时间,用于音视频同步,其变化值与帧率相关。dts的设置在无B帧时与pts相同,存在B帧时会缓存并选择特定的pts作为dts。
最低0.47元/天 解锁文章
326

被折叠的 条评论
为什么被折叠?



