From 84f8beb884927b7ab0186d3dec8afd8486114461 Mon Sep 17 00:00:00 2001 From: Kekelic Date: Mon, 8 Jul 2024 09:24:46 +0200 Subject: [PATCH] Remove saving unnecessary header extension data --- .../media3/exoplayer/rtsp/RtpPacket.java | 64 ++----------------- .../media3/exoplayer/rtsp/RtpPacketTest.java | 24 +------ 2 files changed, 7 insertions(+), 81 deletions(-) diff --git a/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtpPacket.java b/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtpPacket.java index 3b03901c5b..aca1185aa7 100644 --- a/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtpPacket.java +++ b/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtpPacket.java @@ -63,15 +63,12 @@ public final class RtpPacket { /** Builder class for an {@link RtpPacket} */ public static final class Builder { private boolean padding; - private boolean extension; private boolean marker; private byte payloadType; private int sequenceNumber; private long timestamp; private int ssrc; private byte[] csrc = EMPTY; - private byte[] headerExtension = EMPTY; - private byte[] extensionPayload = EMPTY; private byte[] payloadData = EMPTY; /** Sets the {@link RtpPacket#padding}. The default is false. */ @@ -81,13 +78,6 @@ public final class RtpPacket { 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. */ @CanIgnoreReturnValue public Builder setMarker(boolean marker) { @@ -132,26 +122,6 @@ public final class RtpPacket { 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. */ @CanIgnoreReturnValue 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 MAX_SEQUENCE_NUMBER = 0xFFFF; public static final int CSRC_SIZE = 4; - public static final int HEADER_EXTENSION_SIZE = 4; /** Returns the next sequence number of the {@code sequenceNumber}. */ public static int getNextSequenceNumber(int sequenceNumber) { @@ -217,12 +186,6 @@ public final class RtpPacket { /** The RTP CSRC fields (Optional, up to 15 items). */ 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; /** @@ -272,21 +235,13 @@ public final class RtpPacket { } //Extension. - byte[] headerExtension; - byte[] extensionPayload; if (hasExtension) { - headerExtension = new byte[HEADER_EXTENSION_SIZE]; - packetBuffer.readBytes(headerExtension, 0, HEADER_EXTENSION_SIZE); - int extensionPayloadLength = (headerExtension[2] & 0xFF) << 8 | (headerExtension[3] & 0xFF); - if (extensionPayloadLength != 0) { - extensionPayload = new byte[extensionPayloadLength * 4]; - packetBuffer.readBytes(extensionPayload, 0, extensionPayloadLength * 4); - }else { - extensionPayload = EMPTY; + int headerExtensionProfileData = packetBuffer.readShort(); + int headerExtensionPayloadLength = packetBuffer.readShort(); + if (headerExtensionPayloadLength != 0) { + byte[] extensionPayload = new byte[headerExtensionPayloadLength * 4]; + packetBuffer.readBytes(extensionPayload, 0, headerExtensionPayloadLength * 4); } - }else { - headerExtension = EMPTY; - extensionPayload = EMPTY; } // Everything else will be RTP payload. @@ -302,9 +257,6 @@ public final class RtpPacket { .setTimestamp(timestamp) .setSsrc(ssrc) .setCsrc(csrc) - .setExtension(hasExtension) - .setHeaderExtension(headerExtension) - .setExtensionPayload(extensionPayload) .setPayloadData(payloadData) .build(); } @@ -323,7 +275,7 @@ public final class RtpPacket { private RtpPacket(Builder builder) { this.padding = builder.padding; - this.extension = builder.extension; + this.extension = false; this.marker = builder.marker; this.payloadType = builder.payloadType; this.sequenceNumber = builder.sequenceNumber; @@ -331,8 +283,6 @@ public final class RtpPacket { this.ssrc = builder.ssrc; this.csrc = builder.csrc; this.csrcCount = (byte) (this.csrc.length / CSRC_SIZE); - this.headerExtension = builder.headerExtension; - this.extensionPayload = builder.extensionPayload; this.payloadData = builder.payloadData; } @@ -371,8 +321,6 @@ public final class RtpPacket { .putInt((int) timestamp) .putInt(ssrc) .put(csrc) - .put(headerExtension) - .put(extensionPayload) .put(payloadData); return packetLength; } diff --git a/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/RtpPacketTest.java b/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/RtpPacketTest.java index d2aa851379..89e9e4b1c9 100644 --- a/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/RtpPacketTest.java +++ b/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/RtpPacketTest.java @@ -133,7 +133,7 @@ public final class RtpPacketTest { assertThat(packet.version).isEqualTo(RtpPacket.RTP_VERSION); assertThat(packet.padding).isFalse(); - assertThat(packet.extension).isTrue(); + assertThat(packet.extension).isFalse(); assertThat(packet.csrcCount).isEqualTo(0); assertThat(packet.csrc).hasLength(0); assertThat(packet.marker).isFalse(); @@ -228,28 +228,6 @@ public final class RtpPacketTest { 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 public void getNextSequenceNumber_invokingAtWrapOver() { assertThat(getNextSequenceNumber(65534)).isEqualTo(65535);