视频流的传输采用的GB28181国标协议。视频格式RTP+ts,对接的宇视。
tcp数据流格式:magicNumber(2字节)+Datalength(2字节)+dataContent
代码实例功能:粘包,丢包处理(因为双方网络环境设计到中间防火墙等,网络状况比较复杂),监测断流自动重启(ipc前端中 断,后端依据前端异常优化处理)。
public class TcpRtpClient extends RtpClient {
private static final Logger LOG = LoggerFactory.getLogger(TcpRtpClient.class);
private ServerSocket ss;
private BufferedInputStream dis;
private byte[] buffer;
private Thread rtpWorkThread;
private RtpTask rtpTask;
private TaskContext context;
private int len = 0;
// 参数数据变量
byte[] save;
public TcpRtpClient(RtpClient.PacketProcessor processor, TaskContext context) throws Exception {
packetProcessor = processor;
this.context = context;
buffer = new byte[context.getRtpBufferSize()];
ip = Utils.getHostIp();
resetSocket();
rtpTask = new RtpTask();
rtpWorkThread = new Thread(rtpTask, "rtp-listen-thread");
}
@Override
public void start() {
if (rtpWorkThread != null) {
rtpWorkThread.start();
}
}
@Override
public void stop() {
if (rtpTask != null) {
rtpTask.stop();
if (ss != null) {
try {
if (dis!=null) {
dis.close();
}
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
try {
if (rtpWorkThread != null) {