Example usage for org.apache.commons.net.ntp TimeStamp getFraction

List of usage examples for org.apache.commons.net.ntp TimeStamp getFraction

Introduction

In this page you can find the example usage for org.apache.commons.net.ntp TimeStamp getFraction.

Prototype

public long getFraction() 

Source Link

Document

Returns low-order 32-bits representing the fractional seconds.

Usage

From source file:com.eventsourcing.hlc.HybridTimestamp.java

public static int compare(TimeStamp t1, TimeStamp t2) {
    if (t1.getSeconds() == t2.getSeconds() && t1.getFraction() == t2.getFraction()) {
        return 0;
    }/*from   w  ww  .  ja  v a2s. c o  m*/
    if (t1.getSeconds() == t2.getSeconds()) {
        return t1.getFraction() < t2.getFraction() ? -1 : 1;
    }
    return t1.getSeconds() < t2.getSeconds() ? -1 : 1;
}

From source file:com.eventsourcing.hlc.NTPServerTimeProvider.java

TimeStamp getTimestamp() throws TimeoutException {
    if (timestamp == null) {
        throw new TimeoutException();
    }//w w w  .j ava  2 s  .  c  o  m
    TimeStamp ts = new TimeStamp(timestamp.ntpValue());
    long fraction = ts.getFraction();
    long seconds = ts.getSeconds();
    long nanoTime = System.nanoTime();
    long l = (nanoTime - nano) / 1_000_000_000;
    double v = (nanoTime - nano) / 1_000_000_000.0 - l;
    long i = (long) (v * 1_000_000_000);
    long fraction_ = fraction + i;
    if (fraction_ >= 1_000_000_000) {
        fraction_ -= 1_000_000_000;
        l++;
    }
    return new TimeStamp((seconds + l) << 32 | fraction_);
}

From source file:com.eventsourcing.hlc.HybridTimestamp.java

@Override
public BigInteger getSerializableComparable() {
    TimeStamp t = new TimeStamp(logicalTime);
    return BigInteger.valueOf(t.getSeconds()).shiftLeft(64)
            .add(BigInteger.valueOf(t.getFraction()).shiftLeft(32)).add(BigInteger.valueOf(logicalCounter));
}

From source file:org.mobicents.media.server.impl.rtcp.ntp.NtpUtilsTest.java

/**
 * Test correctness of RTCP SR timestamps based on the middle 32-bit of an
 * NTP timestamp.//from  ww  w  .  j  a va  2  s .c o m
 * 
 * Using the values of the example provided by RFC3550: 
 * 
 * [10 Nov 1995 11:33:25.125 UTC]       [10 Nov 1995 11:33:36.5 UTC]
  * n                 SR(n)              A=b710:8000 (46864.500 s)
  * ---------------------------------------------------------------->
  *                    v                 ^
  * ntp_sec =0xb44db705 v               ^ dlsr=0x0005:4000 (    5.250s)
  * ntp_frac=0x20000000  v             ^  lsr =0xb705:2000 (46853.125s)
  *   (3024992005.125 s)  v           ^
  * r                      v         ^ RR(n)
  * ---------------------------------------------------------------->
  *                        |<-DLSR->|
  *                         (5.250 s)
  *     
  * A     0xb710:8000 (46864.500 s)
  * DLSR -0x0005:4000 (    5.250 s)
  * LSR  -0xb705:2000 (46853.125 s)
  * -------------------------------
  * delay 0x0006:2000 (    6.125 s)
  *    
  * @see <a href="http://tools.ietf.org/html/rfc3550#section-6.4.1">RFC3550</a>
 */
@Test
public void testSrTimestamp() {
    // given
    String ntpSec = "b44db705";
    String ntpFrac = "20000000";
    TimeStamp ntp = new TimeStamp(ntpSec.concat(".").concat(ntpFrac));

    // when
    long srTs = NtpUtils.calculateLastSrTimestamp(ntp.getSeconds(), ntp.getFraction());
    long srMs = (srTs * 1000) >> 16;

    // then
    Assert.assertEquals(46853125, srMs);
}

From source file:org.mobicents.media.server.impl.rtcp.RtcpHandlerTest.java

@Test
public void testHandleSenderReport() throws PacketHandlerException {
    // given/*from  w w  w.  j a  v  a2  s .  com*/
    InetSocketAddress localPeer = new InetSocketAddress("127.0.0.1", 6100);
    InetSocketAddress remotePeer = new InetSocketAddress("127.0.0.1", 6200);

    long localSsrc = statistics.getSsrc();
    long remoteSsrc = SsrcGenerator.generateSsrc();
    String remoteCname = CnameGenerator.generateCname();

    TimeStamp ntp = new TimeStamp(wallClock.getCurrentTime());
    RtcpSenderReport sr = new RtcpSenderReport(false, remoteSsrc, ntp.getSeconds(), ntp.getFraction(), 200, 3,
            3 * 200);
    RtcpReportBlock rrBlock = new RtcpReportBlock(localSsrc, 1, 1, 0, 10, 0, 398416412, 223412);
    sr.addReceiverReport(rrBlock);

    RtcpSdes sdes = new RtcpSdes(false);
    RtcpSdesChunk sdesChunk = new RtcpSdesChunk(remoteSsrc);
    RtcpSdesItem sdesCname = new RtcpSdesItem(RtcpSdesItem.RTCP_SDES_CNAME, remoteCname);
    sdesChunk.addRtcpSdesItem(sdesCname);
    sdes.addRtcpSdesChunk(sdesChunk);

    RtcpPacket rtcpPacket = new RtcpPacket(sr, sdes);
    byte[] rtcpData = new byte[300];
    rtcpPacket.encode(rtcpData, 0);

    // when
    handler.joinRtpSession();
    byte[] response = handler.handle(rtcpData, localPeer, remotePeer);

    // then
    // There are no responses in RTCP
    Assert.assertNull(response);

    /*
     * When an RTCP packet is received from a participant whose SSRC is not in the
     * member table, the SSRC is added to the table, and the value for
     * members is updated once the participant has been validated.
     */
    RtpMember newMember = statistics.getMember(remoteSsrc);
    Assert.assertEquals(2, statistics.getMembers());
    Assert.assertNotNull(newMember);
    Assert.assertEquals(remoteSsrc, newMember.getSsrc());
    Assert.assertEquals(remoteCname, newMember.getCname());

    Assert.assertEquals(sr.getNtpTs(), newMember.getLastSR());
    Assert.assertEquals(0, newMember.getReceivedSinceSR());

    // The average packet size is updated:
    // avg_rtcp_size = (1/16) * packet_size + (15/16) * avg_rtcp_size
    double expectedSize = (1.0 / 16.0) * rtcpPacket.getSize()
            + (15.0 / 16.0) * RtpStatistics.RTCP_DEFAULT_AVG_SIZE;
    Assert.assertEquals(expectedSize, statistics.getRtcpAvgSize(), 0.0);
}

From source file:org.mobicents.media.server.impl.rtcp.RtcpPacketFactory.java

/**
 * Builds a packet containing an RTCP Sender Report.
 * /*w w  w . j  a va 2  s . com*/
 * @param statistics
 *            The statistics of the RTP session
 * @return The RTCP packet
 */
private static RtcpSenderReport buildSenderReport(RtpStatistics statistics, boolean padding) {
    /*
     *         0                   1                   2                   3
       *         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       *        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       * header |V=2|P|    RC   |   PT=SR=200   |             length            |
       *        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       *        |                         SSRC of sender                        |
       *        +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
       * sender |              NTP timestamp, most significant word             |
       * info   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       *        |             NTP timestamp, least significant word             |
       *        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       *        |                         RTP timestamp                         |
       *        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       *        |                     sender's packet count                     |
       *        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       *        |                      sender's octet count                     |
       *        +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
       * report |                 SSRC_1 (SSRC of first source)                 |
       * block  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       *   1    | fraction lost |       cumulative number of packets lost       |
       *        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       *        |           extended highest sequence number received           |
       *        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       *        |                      interarrival jitter                      |
       *        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       *        |                         last SR (LSR)                         |
       *        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       *        |                   delay since last SR (DLSR)                  |
       *        +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
       * report |                 SSRC_2 (SSRC of second source)                |
       * block  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       *   2    :                               ...                             :
       *        +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
       *        |                  profile-specific extensions                  |
       *        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     */
    long ssrc = statistics.getSsrc();
    long currentTime = statistics.getCurrentTime();
    TimeStamp ntpTs = new TimeStamp(new Date(currentTime));
    long ntpSec = ntpTs.getSeconds();
    long ntpFrac = ntpTs.getFraction();
    long elapsedTime = statistics.getCurrentTime() - statistics.getRtpSentOn();
    long rtpTs = statistics.getRtpTimestamp() + statistics.getRtpTime(elapsedTime);
    long psent = statistics.getRtpPacketsSent();
    long osent = statistics.getRtpOctetsSent();

    RtcpSenderReport senderReport = new RtcpSenderReport(padding, ssrc, ntpSec, ntpFrac, rtpTs, psent, osent);

    // Add receiver reports for each registered member
    List<Long> members = statistics.getMembersList();
    for (Long memberSsrc : members) {
        if (ssrc != memberSsrc) {
            RtpMember memberStats = statistics.getMember(memberSsrc.longValue());
            RtcpReportBlock rcvrReport = buildSubReceiverReport(memberStats);
            senderReport.addReceiverReport(rcvrReport);
        }
    }
    return senderReport;
}

From source file:org.mobicents.media.server.impl.rtp.statistics.RtpMember.java

public void estimateRtt(long receiptDate, long lastSR, long delaySinceSR) {
    TimeStamp receiptNtp = TimeStamp.getNtpTime(receiptDate);
    long receiptNtpTime = NtpUtils.calculateLastSrTimestamp(receiptNtp.getSeconds(), receiptNtp.getFraction());
    long delay = receiptNtpTime - lastSR - delaySinceSR;
    this.roundTripDelay = (delay > 4294967L) ? RTP_SEQ_MOD : (int) ((delay * 1000L) >> 16);
    logger.info("rtt=" + receiptNtpTime + " - " + lastSR + " - " + delaySinceSR + " = " + delay + " => "
            + this.roundTripDelay + "ms");
}

From source file:org.mobicents.media.server.impl.rtp.statistics.RtpMemberTest.java

@Test
public void testOnReceiveSR() {
    // given//from w w  w .  j av a 2s .  c  om
    RtpMember member = new RtpMember(rtpClock, 123);

    TimeStamp ntp = new TimeStamp(new Date());
    RtcpSenderReport sendReport = new RtcpSenderReport(false, 123, ntp.getSeconds(), ntp.getFraction(), 160 * 2,
            100, 100 * 130);

    long receiveTime = this.wallClock.getCurrentTime();

    // when
    member.onReceiveSR(sendReport);
    this.wallClock.tick(20000000L);

    // then
    long expectedSrTimestamp = NtpUtils.calculateLastSrTimestamp(ntp.getSeconds(), ntp.getFraction());
    assertEquals(expectedSrTimestamp, member.getLastSR());
    assertEquals(0, member.getReceivedSinceSR());

    long expectedDelay = (long) ((this.wallClock.getCurrentTime() - receiveTime) * 65.536);
    assertEquals(expectedDelay, member.getLastSRdelay());
}

From source file:org.mobicents.media.server.impl.rtp.statistics.RtpMemberTest.java

@Test
public void testOnReceiveRtpAndSR() {
    // given//  w w w .j a v  a 2  s  .co m
    RtpMember member = new RtpMember(rtpClock, 123);

    RtpPacket p1 = new RtpPacket(172, false);
    RtpPacket p2 = new RtpPacket(172, false);
    RtpPacket p3 = new RtpPacket(172, false);
    RtpPacket p4 = new RtpPacket(172, false);
    RtpPacket p5 = new RtpPacket(172, false);
    p1.wrap(false, 8, 1, 160 * 1, 123, new byte[160], 0, 160);
    p2.wrap(false, 8, 2, 160 * 2, 123, new byte[160], 0, 160);
    p3.wrap(false, 8, 3, 160 * 3, 123, new byte[160], 0, 160);
    p4.wrap(false, 8, 4, 160 * 4, 123, new byte[160], 0, 160);
    p5.wrap(false, 8, 5, 160 * 5, 123, new byte[160], 0, 160);

    TimeStamp ntp = new TimeStamp(new Date());
    RtcpSenderReport sendReport = new RtcpSenderReport(false, 123, ntp.getSeconds(), ntp.getFraction(), 160 * 2,
            100, 100 * 130);

    // when
    member.onReceiveRtp(p1);
    wallClock.tick(20000000L);
    member.onReceiveRtp(p2);
    wallClock.tick(20000000L);
    member.onReceiveRtp(p3);
    wallClock.tick(20000000L);
    member.onReceiveRtp(p4);
    wallClock.tick(20000000L);
    long receivedSrOn = this.wallClock.getCurrentTime();
    member.onReceiveSR(sendReport);
    member.onReceiveRtp(p5);
    wallClock.tick(20000000L);

    // then
    assertEquals(0, member.getSequenceCycle());
    long expectedHighSeq = (65536 * 0 + p5.getSeqNumber());
    assertEquals(expectedHighSeq, member.getExtHighSequence());
    assertEquals(3, member.getPacketsReceived());
    assertEquals(sumOctets(p3, p4, p5), member.getOctetsReceived());
    assertEquals(1, member.getReceivedSinceSR());
    assertEquals(0, member.getPacketsLost());
    assertEquals(0, member.getFractionLost()); // expected packets = received packets = no loss
    long expectedDelay = (long) ((wallClock.getCurrentTime() - receivedSrOn) * 65.536);
    assertEquals(expectedDelay, member.getLastSRdelay());
}

From source file:org.mobicents.media.server.impl.rtp.statistics.RtpMemberTest.java

@Test
public void testLostPackets() {
    // given/*  ww w.j a va  2s.c  om*/
    RtpMember member = new RtpMember(rtpClock, 123);

    RtpPacket p1 = new RtpPacket(172, false);
    RtpPacket p2 = new RtpPacket(172, false);
    RtpPacket p3 = new RtpPacket(172, false);
    RtpPacket p4 = new RtpPacket(172, false);
    RtpPacket p5 = new RtpPacket(172, false);
    p1.wrap(false, 8, 1, 160 * 1, 123, new byte[160], 0, 160);
    p2.wrap(false, 8, 2, 160 * 2, 123, new byte[160], 0, 160);
    p3.wrap(false, 8, 3, 160 * 3, 123, new byte[160], 0, 160);
    p4.wrap(false, 8, 4, 160 * 4, 123, new byte[160], 0, 160);
    p5.wrap(false, 8, 24, 160 * 5, 123, new byte[160], 0, 160);

    TimeStamp ntp = new TimeStamp(new Date());
    RtcpSenderReport sendReport = new RtcpSenderReport(false, 123, ntp.getSeconds(), ntp.getFraction(), 160 * 2,
            100, 100 * 130);

    // when
    member.onReceiveRtp(p1);
    wallClock.tick(20000000L);
    member.onReceiveRtp(p2);
    wallClock.tick(20000000L);
    member.onReceiveRtp(p3);
    wallClock.tick(20000000L);
    member.onReceiveRtp(p4);
    wallClock.tick(20000000L);
    member.onReceiveSR(sendReport);
    member.onReceiveRtp(p5);
    wallClock.tick(20000000L);

    // then
    int packetsReceived = 3; // 2 first packets were in probation period
    int expected = p5.getSeqNumber() - p3.getSeqNumber() + 1; // only considers valid sequence after 2 consecutive packets
    long expectedLostPackets = expected - packetsReceived;
    long lostInterval = expected - packetsReceived;
    long fractionLost = (lostInterval * 256) / expected;

    assertEquals(expectedLostPackets, member.getPacketsLost());
    assertEquals(fractionLost, member.getFractionLost());
}