|
|
|
@ -74,7 +74,7 @@ void av_register_rtp_dynamic_payload_handlers(void) |
|
|
|
|
|
|
|
|
|
static int rtcp_parse_packet(RTPDemuxContext *s, const unsigned char *buf, int len) |
|
|
|
|
{ |
|
|
|
|
if (buf[1] != 200) |
|
|
|
|
if (buf[1] != RTCP_SR) |
|
|
|
|
return -1; |
|
|
|
|
s->last_rtcp_ntp_time = AV_RB64(buf + 8); |
|
|
|
|
if (s->first_rtcp_ntp_time == AV_NOPTS_VALUE) |
|
|
|
@ -209,7 +209,7 @@ int rtp_check_and_send_back_rr(RTPDemuxContext *s, int count) |
|
|
|
|
|
|
|
|
|
// Receiver Report
|
|
|
|
|
put_byte(pb, (RTP_VERSION << 6) + 1); /* 1 report block */ |
|
|
|
|
put_byte(pb, 201); |
|
|
|
|
put_byte(pb, RTCP_RR); |
|
|
|
|
put_be16(pb, 7); /* length in words - 1 */ |
|
|
|
|
// our own SSRC: we use the server's SSRC + 1 to avoid conflicts
|
|
|
|
|
put_be32(pb, s->ssrc + 1); |
|
|
|
@ -248,7 +248,7 @@ int rtp_check_and_send_back_rr(RTPDemuxContext *s, int count) |
|
|
|
|
|
|
|
|
|
// CNAME
|
|
|
|
|
put_byte(pb, (RTP_VERSION << 6) + 1); /* 1 report block */ |
|
|
|
|
put_byte(pb, 202); |
|
|
|
|
put_byte(pb, RTCP_SDES); |
|
|
|
|
len = strlen(s->hostname); |
|
|
|
|
put_be16(pb, (6 + len + 3) / 4); /* length in words - 1 */ |
|
|
|
|
put_be32(pb, s->ssrc); |
|
|
|
@ -299,7 +299,7 @@ void rtp_send_punch_packets(URLContext* rtp_handle) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
put_byte(pb, (RTP_VERSION << 6)); |
|
|
|
|
put_byte(pb, 201); /* receiver report */ |
|
|
|
|
put_byte(pb, RTCP_RR); /* receiver report */ |
|
|
|
|
put_be16(pb, 1); /* length in words - 1 */ |
|
|
|
|
put_be32(pb, 0); /* our own SSRC */ |
|
|
|
|
|
|
|
|
@ -434,7 +434,7 @@ int rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt, |
|
|
|
|
|
|
|
|
|
if ((buf[0] & 0xc0) != (RTP_VERSION << 6)) |
|
|
|
|
return -1; |
|
|
|
|
if (buf[1] >= 200 && buf[1] <= 204) { |
|
|
|
|
if (buf[1] >= RTCP_SR && buf[1] <= RTCP_APP) { |
|
|
|
|
rtcp_parse_packet(s, buf, len); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|