From 7dd428534ecc02157f1e5c62ea38090f0531ec0c Mon Sep 17 00:00:00 2001 From: Kekelic Date: Tue, 26 Mar 2024 20:43:46 +0100 Subject: [PATCH] Change RtpPacket class to parse header extension if exists --- .../java/androidx/media3/exoplayer/rtsp/RtpPacket.java | 10 ++++++++++ 1 file changed, 10 insertions(+) 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 7f3add3b75..535067e860 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 @@ -143,6 +143,8 @@ 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 EXTENSION_SIZE = 16; + /** Returns the next sequence number of the {@code sequenceNumber}. */ public static int getNextSequenceNumber(int sequenceNumber) { @@ -205,6 +207,8 @@ public final class RtpPacket { byte version = (byte) (firstByte >> 6); boolean padding = ((firstByte >> 5) & 0x1) == 1; byte csrcCount = (byte) (firstByte & 0xF); + boolean hasExtension = ((firstByte & 0x10) >> 4) == 1; + if (version != RTP_VERSION) { return null; @@ -233,6 +237,12 @@ public final class RtpPacket { csrc = EMPTY; } + //Extension. + if (hasExtension){ + byte[] extension = new byte[EXTENSION_SIZE]; + packetBuffer.readBytes(extension, 0, EXTENSION_SIZE); + } + // Everything else will be RTP payload. byte[] payloadData = new byte[packetBuffer.bytesLeft()]; packetBuffer.readBytes(payloadData, 0, packetBuffer.bytesLeft());