public override bool SignalInputData(InputStream inputStream, IPEndPoint address) { if (address != _lastAddress) { _lastAddress = address; _validLastAddress = true; } var bufferLength = inputStream.AvaliableByteCounts; var pos = inputStream.Position; //1. Parse the SR if (bufferLength < 16) { return(true); } inputStream.Reader.ReadByte(); var PT = inputStream.Reader.ReadByte(); var len = inputStream.Reader.ReadUInt16(); len = (ushort)((len + 1) * 4); if (len > bufferLength) { inputStream.IgnoreAll(); return(true); } switch (PT) { case 200: if (len < 28) { Logger.WARN("Invalid RTCP packet length: {0}", len); inputStream.IgnoreAll(); return(true); } inputStream.Reader.ReadUInt32(); var ntpSec = inputStream.Reader.ReadUInt32() - 2208988800U; var ntpFrac = inputStream.Reader.ReadUInt32(); ulong ntpMicroseconds = (ulong)((ntpFrac / (double)(0x100000000L)) * 1000000.0); ntpMicroseconds += ((ulong)ntpSec) * 1000000; var rtpTimestamp = inputStream.Reader.ReadUInt32(); _pConnectivity.ReportSR(ntpMicroseconds, rtpTimestamp, _isAudio); break; default: inputStream.IgnoreAll(); return(true); } inputStream.Position = pos + 10; _lsr = inputStream.Reader.ReadUInt32(); inputStream.IgnoreAll(); //2. Send the RR if (_pConnectivity == null) { Logger.FATAL("no connectivity"); return(false); } if (!_pConnectivity.SendRR(_isAudio)) { Logger.FATAL("Unable to send RR"); _pConnectivity.EnqueueForDelete(); _pConnectivity = null; return(false); } return(true); }