|
|
|
@@ -123,9 +123,13 @@ static int rtcp_parse_packet(RTPDemuxContext *s, const unsigned char *buf, int l |
|
|
|
payload_len = (AV_RB16(buf + 2) + 1) * 4; |
|
|
|
|
|
|
|
s->last_rtcp_ntp_time = AV_RB64(buf + 8); |
|
|
|
if (s->first_rtcp_ntp_time == AV_NOPTS_VALUE) |
|
|
|
s->first_rtcp_ntp_time = s->last_rtcp_ntp_time; |
|
|
|
s->last_rtcp_timestamp = AV_RB32(buf + 16); |
|
|
|
if (s->first_rtcp_ntp_time == AV_NOPTS_VALUE) { |
|
|
|
s->first_rtcp_ntp_time = s->last_rtcp_ntp_time; |
|
|
|
if (!s->base_timestamp) |
|
|
|
s->base_timestamp = s->last_rtcp_timestamp; |
|
|
|
s->rtcp_ts_offset = s->last_rtcp_timestamp - s->base_timestamp; |
|
|
|
} |
|
|
|
|
|
|
|
buf += payload_len; |
|
|
|
len -= payload_len; |
|
|
|
@@ -440,8 +444,15 @@ static void finalize_packet(RTPDemuxContext *s, AVPacket *pkt, uint32_t timestam |
|
|
|
delta_timestamp = timestamp - s->last_rtcp_timestamp; |
|
|
|
/* convert to the PTS timebase */ |
|
|
|
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 + addend + delta_timestamp; |
|
|
|
pkt->pts = s->range_start_offset + s->rtcp_ts_offset + addend + |
|
|
|
delta_timestamp; |
|
|
|
return; |
|
|
|
} |
|
|
|
if (timestamp == RTP_NOTS_VALUE) |
|
|
|
return; |
|
|
|
if (!s->base_timestamp) |
|
|
|
s->base_timestamp = timestamp; |
|
|
|
pkt->pts = s->range_start_offset + timestamp - s->base_timestamp; |
|
|
|
} |
|
|
|
|
|
|
|
static int rtp_parse_packet_internal(RTPDemuxContext *s, AVPacket *pkt, |
|
|
|
|