在文件rtpdec.c里 分两种情况:1、有ntp时间(就是有sr包);2、没有ntp时间
static void finalize_packet ( RTPDemuxContext * s, AVPacket * pkt, uint32_t timestamp)
{
if ( pkt- > pts != AV_NOPTS_VALUE || pkt- > dts != AV_NOPTS_VALUE)
return ;
if ( timestamp == RTP_NOTS_VALUE)
return ;
if ( s- > last_rtcp_ntp_time != AV_NOPTS_VALUE && s- > ic- > nb_streams > 1 ) {
int64_t addend;
int delta_timestamp;
delta_timestamp = timestamp - s- > last_rtcp_timestamp;
addend = av_rescale ( s- > last_rtcp_ntp_time - s- > first_rtcp_ntp_time,
s- > st- > time_base. den,
( uint64_t ) s- > st- > time_base. num << 32 ) ;
pkt- > pts = s- > range_start_offset + s- > rtcp_ts_offset + addend +
delta_timestamp;
return ;
}
if ( ! s- > base_timestamp)
s- > base_timestamp = timestamp;
if ( ! s- > timestamp)
s- > unwrapped_timestamp + = timestamp;
else
s- > unwrapped_timestamp + = ( int32_t ) ( timestamp - s- > timestamp) ;
s- > timestamp = timestamp;
pkt- > pts = s- > unwrapped_timestamp + s- > range_start_offset -
s- > base_timestamp;
}
参考:https://www.jianshu.com/p/67d3e6a1d72e