package com.inspect.tcpserver.sip.gb28181;
|
|
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.nio.ByteBuffer;
|
|
|
|
public class Gb28181PsMuxer {
|
|
|
|
private boolean headerSent = false;
|
|
|
|
public byte[] muxH264(byte[] annexB, long pts90k) {
|
|
try {
|
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
|
|
|
if (!headerSent) {
|
|
out.write(PsHeader.packHeader());
|
|
out.write(PsHeader.systemHeader());
|
|
out.write(PsHeader.psmHeader());
|
|
headerSent = true;
|
|
}
|
|
|
|
out.write(PesPacket.buildH264Pes(annexB, pts90k));
|
|
return out.toByteArray();
|
|
|
|
} catch (Exception e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public byte[] muxOneFrame(byte[] h264, long pts90k) {
|
|
try {
|
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
|
|
|
// ⚠️ 每一帧都必须有
|
|
out.write(PsHeader.packHeader());
|
|
out.write(PsHeader.systemHeader());
|
|
out.write(PsHeader.psmHeader());
|
|
|
|
out.write(PesPacket.buildH264Pes(h264, pts90k));
|
|
return out.toByteArray();
|
|
|
|
} catch (Exception e) {
|
|
return null;
|
|
}
|
|
}
|
|
}
|