package com.inspect.tcpserver.sip.media; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class RtpSender { private DatagramSocket socket; private InetAddress address; private int port; private int seq = 0; private long timestamp = 0; private int ssrc; public RtpSender(String ip, int port, int ssrc) throws Exception { this.socket = new DatagramSocket(); this.address = InetAddress.getByName(ip); this.port = port; this.ssrc = ssrc; } public void send(byte[] payload, boolean mark) throws Exception { byte[] rtp = new byte[12 + payload.length]; rtp[0] = (byte) 0x80; rtp[1] = (byte) (96 | (mark ? 0x80 : 0)); rtp[2] = (byte) (seq >> 8); rtp[3] = (byte) (seq); seq++; timestamp += 3600; // 90k时钟 rtp[4] = (byte) (timestamp >> 24); rtp[5] = (byte) (timestamp >> 16); rtp[6] = (byte) (timestamp >> 8); rtp[7] = (byte) (timestamp); rtp[8] = (byte) (ssrc >> 24); rtp[9] = (byte) (ssrc >> 16); rtp[10] = (byte) (ssrc >> 8); rtp[11] = (byte) (ssrc); System.arraycopy(payload, 0, rtp, 12, payload.length); socket.send(new DatagramPacket(rtp, rtp.length, address, port)); } }