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