public void TestHeaderExtension() { var buffer = new ByteBuffer(_packetBytes, 0, _packetBytes.Length); var packet = RtpPacket.Decode(buffer); var date = new DateTime(2017, 10, 17, 4, 33, 17, 32, DateTimeKind.Local); var headerBuf = new OnvifRtpHeader() { Time = date, CbitSet = true, DbitSet = true, EbitSet = true, CSeq = 3 }.Encode(); packet.HasExtensionHeader = true; packet.ExtensionHeaderData = OnvifRtpHeader.PROFILE_ID; packet.ExtensionData = headerBuf; var encoded = packet.Encode(); var toTest = RtpPacket.Decode(encoded); Assert.True(toTest.Version.Is(RtpVersion.V2)); Assert.True(toTest.HasExtensionHeader); Assert.False(toTest.Marker); Assert.True(toTest.CsrcIds.IsEmpty); Assert.Equal(97, toTest.PayloadType); Assert.Equal(40179, toTest.SequenceNumber); Assert.Equal(3616193167, toTest.Timestamp); Assert.Equal((uint)1849968209, toTest.SSRC); Assert.Equal(51, toTest.Payload.Length); Assert.Equal(OnvifRtpHeader.PROFILE_ID, packet.ExtensionHeaderData); var header = OnvifRtpHeader.Decode(toTest.ExtensionData); Assert.Equal(date, header.Time.ToLocalTime()); Assert.True(header.CbitSet); Assert.True(header.DbitSet); Assert.True(header.EbitSet); Assert.Equal(3, header.CSeq); }
public void TestOnlyEbitSet() { var date = new DateTime(2017, 10, 17, 4, 33, 17, 32, DateTimeKind.Local); var buffer = new OnvifRtpHeader() { Time = date, CbitSet = false, DbitSet = false, EbitSet = true, CSeq = 3 }.Encode(); var header = OnvifRtpHeader.Decode(buffer); Assert.Equal(date, header.Time.ToLocalTime()); Assert.False(header.CbitSet); Assert.False(header.DbitSet); Assert.True(header.EbitSet); Assert.Equal(3, header.CSeq); }
/// <summary> /// Converts an RTP packet into an the RTP payload. Basically it just strips off /// the RTP transport info and returns that actual payload data. /// </summary> /// <param name="buffer"></param> /// <returns></returns> public override bool WriteBuffer(ByteBuffer buffer) { try { var packet = RtpPacket.Decode(buffer); var paylaod = packet.Payload; if (packet.HasExtensionHeader && packet.ExtensionHeaderData == OnvifRtpHeader.PROFILE_ID) { // Packet contains Onvif header extension set packet time reference. var onvifHdr = OnvifRtpHeader.Decode(packet.ExtensionData); paylaod.TimeReference = onvifHdr.Time; } return(PushBuffer(paylaod)); } catch (Exception e) { LOG.Error($"Unable to decode RTP packet, reason: {e.Message}"); return(false); } }