Skip to content
Snippets Groups Projects
RTCPFeedbackPacket.java 2.06 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*
     * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
     *
     * Distributable under LGPL license.
     * See terms of license at gnu.org.
     */
    package org.jitsi.impl.neomedia;
    
    import javax.media.rtp.*;
    
    /**
     * Represents an RTCP feedback packet as described in RFC4585.
     *
     * @author Sebastien Vincent
     */
    public class RTCPFeedbackPacket
    {
        /**
         * Feedback message type.
         */
        private int fmt = 0;
    
        /**
         * Payload type.
         */
        private int payloadType = 0;
    
        /**
         * SSRC of packet sender.
         */
        private long senderSSRC = 0;
    
        /**
         * SSRC of media source.
         */
        private long sourceSSRC = 0;
    
        /**
         * Constructor.
         *
         * @param type feedback message type
         * @param payloadType payload type
         * @param sender sender SSRC
         * @param src source SSRC
         */
        public RTCPFeedbackPacket(int type, int payloadType, long sender, long src)
        {
            this.fmt = type;
            this.payloadType = payloadType;
            this.senderSSRC = sender;
            this.sourceSSRC = src;
        }
    
        /**
         * Write RTCP packet to output stream of a <tt>DatagramSocket</tt>.
         *
         * @param out <tt>OutputDataStream</tt> of a <tt>DatagramSocket</tt>
         */
        public void writeTo(OutputDataStream out)
        {
            byte data[] = new byte[12];
    
            byte vpfmt = (byte) (0x80 /* RTP version */ | (fmt & 0x1F));
    
    
            data[0] = vpfmt;
    
    
            /* length (in 32-bit words minus one) */
            data[2] = 0;
            data[3] = 2; /* common packet is 12 bytes so (12/4) - 1 */
    
            /* sender SSRC */
    
            data[4] = (byte) (senderSSRC >> 24);
            data[5] = (byte) ((senderSSRC >> 16) & 0xFF);
            data[6] = (byte) ((senderSSRC >> 8) & 0xFF);
            data[7] = (byte) (senderSSRC & 0xFF);
    
    
            /* source SSRC */
    
            data[8] = (byte) (sourceSSRC >> 24);
            data[9] = (byte) ((sourceSSRC >> 16) & 0xFF);
            data[10] = (byte) ((sourceSSRC >> 8) & 0xFF);
            data[11] = (byte) (sourceSSRC & 0xFF);
    
    
            /* effective write */
            out.write(data, 0, 12);
        }
    }