Remove saving unnecessary header extension data

This commit is contained in:
Kekelic 2024-07-08 09:24:46 +02:00 committed by microkatz
parent 5a8a250a1a
commit 84f8beb884
2 changed files with 7 additions and 81 deletions

View File

@ -63,15 +63,12 @@ public final class RtpPacket {
/** Builder class for an {@link RtpPacket} */ /** Builder class for an {@link RtpPacket} */
public static final class Builder { public static final class Builder {
private boolean padding; private boolean padding;
private boolean extension;
private boolean marker; private boolean marker;
private byte payloadType; private byte payloadType;
private int sequenceNumber; private int sequenceNumber;
private long timestamp; private long timestamp;
private int ssrc; private int ssrc;
private byte[] csrc = EMPTY; private byte[] csrc = EMPTY;
private byte[] headerExtension = EMPTY;
private byte[] extensionPayload = EMPTY;
private byte[] payloadData = EMPTY; private byte[] payloadData = EMPTY;
/** Sets the {@link RtpPacket#padding}. The default is false. */ /** Sets the {@link RtpPacket#padding}. The default is false. */
@ -81,13 +78,6 @@ public final class RtpPacket {
return this; return this;
} }
/** Sets the {@link RtpPacket#extension}. The default is false. */
@CanIgnoreReturnValue
public Builder setExtension(boolean extension) {
this.extension = extension;
return this;
}
/** Sets {@link RtpPacket#marker}. The default is false. */ /** Sets {@link RtpPacket#marker}. The default is false. */
@CanIgnoreReturnValue @CanIgnoreReturnValue
public Builder setMarker(boolean marker) { public Builder setMarker(boolean marker) {
@ -132,26 +122,6 @@ public final class RtpPacket {
return this; return this;
} }
/**
* Sets {@link RtpPacket#headerExtension}. The default is an empty byte array.
*/
@CanIgnoreReturnValue
public Builder setHeaderExtension(byte[] headerExtension) {
checkNotNull(headerExtension);
this.headerExtension = headerExtension;
return this;
}
/**
* Sets {@link RtpPacket#extensionPayload}. The default is an empty byte array.
*/
@CanIgnoreReturnValue
public Builder setExtensionPayload(byte[] extensionPayload) {
checkNotNull(extensionPayload);
this.extensionPayload = extensionPayload;
return this;
}
/** Sets {@link RtpPacket#payloadData}. The default is an empty byte array. */ /** Sets {@link RtpPacket#payloadData}. The default is an empty byte array. */
@CanIgnoreReturnValue @CanIgnoreReturnValue
public Builder setPayloadData(byte[] payloadData) { public Builder setPayloadData(byte[] payloadData) {
@ -173,7 +143,6 @@ public final class RtpPacket {
public static final int MIN_SEQUENCE_NUMBER = 0; public static final int MIN_SEQUENCE_NUMBER = 0;
public static final int MAX_SEQUENCE_NUMBER = 0xFFFF; public static final int MAX_SEQUENCE_NUMBER = 0xFFFF;
public static final int CSRC_SIZE = 4; public static final int CSRC_SIZE = 4;
public static final int HEADER_EXTENSION_SIZE = 4;
/** Returns the next sequence number of the {@code sequenceNumber}. */ /** Returns the next sequence number of the {@code sequenceNumber}. */
public static int getNextSequenceNumber(int sequenceNumber) { public static int getNextSequenceNumber(int sequenceNumber) {
@ -217,12 +186,6 @@ public final class RtpPacket {
/** The RTP CSRC fields (Optional, up to 15 items). */ /** The RTP CSRC fields (Optional, up to 15 items). */
public final byte[] csrc; public final byte[] csrc;
/** The RTP header extension fields (Optional, 32 bits). */
public final byte[] headerExtension;
/** The RTP extension payload fields (Optional). */
public final byte[] extensionPayload;
public final byte[] payloadData; public final byte[] payloadData;
/** /**
@ -272,21 +235,13 @@ public final class RtpPacket {
} }
//Extension. //Extension.
byte[] headerExtension;
byte[] extensionPayload;
if (hasExtension) { if (hasExtension) {
headerExtension = new byte[HEADER_EXTENSION_SIZE]; int headerExtensionProfileData = packetBuffer.readShort();
packetBuffer.readBytes(headerExtension, 0, HEADER_EXTENSION_SIZE); int headerExtensionPayloadLength = packetBuffer.readShort();
int extensionPayloadLength = (headerExtension[2] & 0xFF) << 8 | (headerExtension[3] & 0xFF); if (headerExtensionPayloadLength != 0) {
if (extensionPayloadLength != 0) { byte[] extensionPayload = new byte[headerExtensionPayloadLength * 4];
extensionPayload = new byte[extensionPayloadLength * 4]; packetBuffer.readBytes(extensionPayload, 0, headerExtensionPayloadLength * 4);
packetBuffer.readBytes(extensionPayload, 0, extensionPayloadLength * 4);
}else {
extensionPayload = EMPTY;
} }
}else {
headerExtension = EMPTY;
extensionPayload = EMPTY;
} }
// Everything else will be RTP payload. // Everything else will be RTP payload.
@ -302,9 +257,6 @@ public final class RtpPacket {
.setTimestamp(timestamp) .setTimestamp(timestamp)
.setSsrc(ssrc) .setSsrc(ssrc)
.setCsrc(csrc) .setCsrc(csrc)
.setExtension(hasExtension)
.setHeaderExtension(headerExtension)
.setExtensionPayload(extensionPayload)
.setPayloadData(payloadData) .setPayloadData(payloadData)
.build(); .build();
} }
@ -323,7 +275,7 @@ public final class RtpPacket {
private RtpPacket(Builder builder) { private RtpPacket(Builder builder) {
this.padding = builder.padding; this.padding = builder.padding;
this.extension = builder.extension; this.extension = false;
this.marker = builder.marker; this.marker = builder.marker;
this.payloadType = builder.payloadType; this.payloadType = builder.payloadType;
this.sequenceNumber = builder.sequenceNumber; this.sequenceNumber = builder.sequenceNumber;
@ -331,8 +283,6 @@ public final class RtpPacket {
this.ssrc = builder.ssrc; this.ssrc = builder.ssrc;
this.csrc = builder.csrc; this.csrc = builder.csrc;
this.csrcCount = (byte) (this.csrc.length / CSRC_SIZE); this.csrcCount = (byte) (this.csrc.length / CSRC_SIZE);
this.headerExtension = builder.headerExtension;
this.extensionPayload = builder.extensionPayload;
this.payloadData = builder.payloadData; this.payloadData = builder.payloadData;
} }
@ -371,8 +321,6 @@ public final class RtpPacket {
.putInt((int) timestamp) .putInt((int) timestamp)
.putInt(ssrc) .putInt(ssrc)
.put(csrc) .put(csrc)
.put(headerExtension)
.put(extensionPayload)
.put(payloadData); .put(payloadData);
return packetLength; return packetLength;
} }

View File

@ -133,7 +133,7 @@ public final class RtpPacketTest {
assertThat(packet.version).isEqualTo(RtpPacket.RTP_VERSION); assertThat(packet.version).isEqualTo(RtpPacket.RTP_VERSION);
assertThat(packet.padding).isFalse(); assertThat(packet.padding).isFalse();
assertThat(packet.extension).isTrue(); assertThat(packet.extension).isFalse();
assertThat(packet.csrcCount).isEqualTo(0); assertThat(packet.csrcCount).isEqualTo(0);
assertThat(packet.csrc).hasLength(0); assertThat(packet.csrc).hasLength(0);
assertThat(packet.marker).isFalse(); assertThat(packet.marker).isFalse();
@ -228,28 +228,6 @@ public final class RtpPacketTest {
assertThat(builtPacketBytes).isEqualTo(rtpDataWithLargeTimestamp); assertThat(builtPacketBytes).isEqualTo(rtpDataWithLargeTimestamp);
} }
@Test
public void buildRtpPacketWithHeaderExtension_matchesPacketData() {
RtpPacket builtPacket =
new RtpPacket.Builder()
.setPadding(false)
.setExtension(true)
.setMarker(false)
.setPayloadType((byte) 96)
.setSequenceNumber(61514)
.setTimestamp(2000000000)
.setSsrc(0x35ff2773)
.setHeaderExtension(Arrays.copyOfRange(rtpDataExtension, 0, RtpPacket.HEADER_EXTENSION_SIZE))
.setExtensionPayload(Arrays.copyOfRange(rtpDataExtension, RtpPacket.HEADER_EXTENSION_SIZE, rtpDataExtension.length))
.setPayloadData(rtpWithHeaderExtensionPayloadData)
.build();
int packetSize = RtpPacket.MIN_HEADER_SIZE + rtpDataExtension.length + builtPacket.payloadData.length;
byte[] builtPacketBytes = new byte[packetSize];
builtPacket.writeToBuffer(builtPacketBytes, /* offset= */ 0, packetSize);
assertThat(builtPacketBytes).isEqualTo(rtpDataWithHeaderExtension);
}
@Test @Test
public void getNextSequenceNumber_invokingAtWrapOver() { public void getNextSequenceNumber_invokingAtWrapOver() {
assertThat(getNextSequenceNumber(65534)).isEqualTo(65535); assertThat(getNextSequenceNumber(65534)).isEqualTo(65535);