X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fstream_out%2Frtcp.c;h=cbc3dade8a96374c56197623868f763a28f7ae0b;hb=b5277240aa78e2515cc4f32ca4b582160b2ee8d8;hp=8458f77f4c9e505cc2315fb3e3b291043befb3b3;hpb=c0a898e18e7fce541be58980f09ca199b736dc1c;p=vlc diff --git a/modules/stream_out/rtcp.c b/modules/stream_out/rtcp.c index 8458f77f4c..cbc3dade8a 100644 --- a/modules/stream_out/rtcp.c +++ b/modules/stream_out/rtcp.c @@ -27,7 +27,7 @@ # include "config.h" #endif -#include +#include #include #include @@ -53,7 +53,7 @@ struct rtcp_sender_t { size_t length; /* RTCP packet length */ - uint8_t payload[28 + 8 + (2 * 257)]; + uint8_t payload[28 + 8 + (2 * 257) + 8]; int handle; /* RTCP socket handler */ uint32_t packets; /* RTP packets sent */ @@ -164,16 +164,22 @@ void CloseRTCP (rtcp_sender_t *rtcp) return; uint8_t *ptr = rtcp->payload; + uint64_t now64 = NTPtime64 (); + SetQWBE (ptr + 8, now64); /* Update the Sender Report timestamp */ + /* Bye */ + ptr += rtcp->length; ptr[0] = (2 << 6) | 1; /* V = 2, P = 0, SC = 1 */ ptr[1] = 203; /* payload type: Bye */ SetWBE (ptr + 2, 1); - /* SSRC is already there :) */ + memcpy (ptr + 4, rtcp->payload + 4, 4); /* Copy SSRC from Sender Report */ + rtcp->length += 8; /* We are THE sender, so we are more important than anybody else, so * we can afford not to check bandwidth constraints here. */ - send (rtcp->handle, rtcp->payload, 8, 0); + send (rtcp->handle, rtcp->payload, rtcp->length, 0); net_Close (rtcp->handle); + free (rtcp); }