You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

49 lines
1.3 KiB

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));
}
}