package com.inspect.tcpserver.sip.stream;
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
@Slf4j
|
|
public class RtpSender {
|
|
|
|
private static final int MTU = 1400;
|
|
private static final int PAYLOAD_TYPE = 98;
|
|
|
|
private int seq = 0;
|
|
private final int ssrc;
|
|
private final RtpSocket socket;
|
|
private final RtpClock clock = new RtpClock();
|
|
|
|
public RtpSender(String ip, int port, int ssrc) throws Exception {
|
|
this.ssrc = ssrc;
|
|
this.socket = new RtpSocket(ip, port);
|
|
}
|
|
|
|
public void sendPs(byte[] ps) throws Exception {
|
|
long ts = clock.next();
|
|
|
|
int offset = 0;
|
|
while (offset < ps.length) {
|
|
int size = Math.min(MTU, ps.length - offset);
|
|
boolean marker = (offset + size) >= ps.length;
|
|
|
|
RtpPacket pkt = new RtpPacket(size);
|
|
pkt.setHeader(PAYLOAD_TYPE, seq++, ts, ssrc, marker);
|
|
|
|
System.arraycopy(ps, offset, pkt.buffer, RtpPacket.HEADER_SIZE, size);
|
|
pkt.length = RtpPacket.HEADER_SIZE + size;
|
|
|
|
|
|
socket.send(pkt.buffer, pkt.length);
|
|
offset += size;
|
|
log.info("sendPs offset = {}", offset);
|
|
}
|
|
}
|
|
|
|
public void close() {
|
|
socket.close();
|
|
}
|
|
}
|
|
|