@@ -531,6 +531,28 @@ public void SendAudioRTCP(byte[] rtcp)
531531 _audioRtpTransport . WriteToControlPort ( rtcp ) ;
532532 }
533533
534+ public byte [ ] BuildRtcpReceiverReport ( uint ssrc )
535+ {
536+ // TODO: do not send just an empty report
537+ // https://www.rfc-editor.org/rfc/rfc3550.txt
538+ // https://learn.microsoft.com/en-us/openspecs/office_protocols/ms-rtp/953b588a-4e9d-4ec8-b4d1-913f9b9d04ef
539+ byte [ ] rtcp_receiver_report = new byte [ 8 ] ;
540+ int version = 2 ;
541+ int paddingBit = 0 ;
542+ int reportCount = 0 ; // an empty report
543+ int packetType = 201 ; // Receiver Report
544+ int length = rtcp_receiver_report . Length / 4 - 1 ; // num 32 bit words minus 1
545+ rtcp_receiver_report [ 0 ] = ( byte ) ( ( version << 6 ) + ( paddingBit << 5 ) + reportCount ) ;
546+ rtcp_receiver_report [ 1 ] = ( byte ) packetType ;
547+ rtcp_receiver_report [ 2 ] = ( byte ) ( length >> 8 & 0xFF ) ;
548+ rtcp_receiver_report [ 3 ] = ( byte ) ( length >> 0 & 0XFF ) ;
549+ rtcp_receiver_report [ 4 ] = ( byte ) ( ssrc >> 24 & 0xFF ) ;
550+ rtcp_receiver_report [ 5 ] = ( byte ) ( ssrc >> 16 & 0xFF ) ;
551+ rtcp_receiver_report [ 6 ] = ( byte ) ( ssrc >> 8 & 0xFF ) ;
552+ rtcp_receiver_report [ 7 ] = ( byte ) ( ssrc >> 0 & 0xFF ) ;
553+ return rtcp_receiver_report ;
554+ }
555+
534556 private void VideoRtpDataReceived ( object sender , RtspDataEventArgs e )
535557 {
536558 if ( e . Data . Data . IsEmpty )
@@ -1342,7 +1364,10 @@ private void SendKeepAlive(object sender, System.Timers.ElapsedEventArgs e)
13421364 else
13431365 {
13441366 keepAliveMessage = new RtspRequestOptions
1345- { } ;
1367+ {
1368+ RtspUri = _uri ,
1369+ Session = _session
1370+ } ;
13461371 }
13471372
13481373 keepAliveMessage . AddAuthorization ( _authentication , _uri , _rtspSocket . NextCommandIndex ( ) ) ;
0 commit comments