From dfef2d13872d7950f54a805a1a18ad83e6c510dd Mon Sep 17 00:00:00 2001 From: Manisha Jajoo Date: Tue, 8 Feb 2022 17:02:59 +0530 Subject: [PATCH] Some minor cleanup in RTPMpeg4Reader --- .../media3/exoplayer/rtsp/RtspMediaTrack.java | 4 +- .../exoplayer/rtsp/reader/RtpMPEG4Reader.java | 41 +++++++++---------- 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtspMediaTrack.java b/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtspMediaTrack.java index 02733aadcc..d0cc763720 100644 --- a/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtspMediaTrack.java +++ b/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtspMediaTrack.java @@ -45,7 +45,7 @@ // Format specific parameter names. private static final String PARAMETER_PROFILE_LEVEL_ID = "profile-level-id"; private static final String PARAMETER_SPROP_PARAMS = "sprop-parameter-sets"; - private static final String PARAMETER_CONFIG = "config"; + private static final String PARAMETER_MP4V_CONFIG = "config"; /** Prefix for the RFC6381 codecs string for AAC formats. */ private static final String AAC_CODECS_PREFIX = "mp4a.40."; @@ -171,7 +171,7 @@ private static void processAacFmtpAttribute( private static void processMPEG4FmtpAttribute( Format.Builder formatBuilder, ImmutableMap fmtpAttributes) { - @Nullable String configInput = fmtpAttributes.get(PARAMETER_CONFIG); + @Nullable String configInput = fmtpAttributes.get(PARAMETER_MP4V_CONFIG); if (configInput != null) { byte[] csd = Util.getBytesFromHexString(configInput); ImmutableList initializationData = ImmutableList.of(csd); diff --git a/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/reader/RtpMPEG4Reader.java b/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/reader/RtpMPEG4Reader.java index a34c1e14f7..a3dacd0f89 100644 --- a/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/reader/RtpMPEG4Reader.java +++ b/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/reader/RtpMPEG4Reader.java @@ -30,7 +30,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; /** - * Parses an H265 byte stream carried on RTP packets, and extracts H265 Access Units. Refer to + * Parses an MPEG4 byte stream carried on RTP packets, and extracts MPEG4 Access Units. Refer to * RFC6416 for more details. */ /* package */ final class RtpMPEG4Reader implements RtpPayloadReader { @@ -44,16 +44,11 @@ private static final int I_VOP = 0; private final RtpPayloadFormat payloadFormat; - private @MonotonicNonNull TrackOutput trackOutput; @C.BufferFlags private int bufferFlags; - private long firstReceivedTimestamp; - private int previousSequenceNumber; - private long startTimeOffsetUs; - private int sampleLength; /** Creates an instance. */ @@ -64,15 +59,6 @@ public RtpMPEG4Reader(RtpPayloadFormat payloadFormat) { sampleLength = 0; } - private static long toSampleUs( - long startTimeOffsetUs, long rtpTimestamp, long firstReceivedRtpTimestamp) { - return startTimeOffsetUs - + Util.scaleLargeTimestamp( - (rtpTimestamp - firstReceivedRtpTimestamp), - /* multiplier= */ C.MICROS_PER_SECOND, - /* divisor= */ MEDIA_CLOCK_FREQUENCY); - } - @Override public void createTracks(ExtractorOutput extractorOutput, int trackId) { trackOutput = extractorOutput.track(trackId, C.TRACK_TYPE_VIDEO); @@ -113,6 +99,15 @@ public void consume(ParsableByteArray data, long timestamp, int sequenceNumber, previousSequenceNumber = sequenceNumber; } + @Override + public void seek(long nextRtpTimestamp, long timeUs) { + firstReceivedTimestamp = nextRtpTimestamp; + startTimeOffsetUs = timeUs; + sampleLength = 0; + } + + // Internal methods. + /** * Parses VOP Coding type * @@ -130,15 +125,17 @@ private void parseVopType(ParsableByteArray data) { } } + private static long toSampleUs( + long startTimeOffsetUs, long rtpTimestamp, long firstReceivedRtpTimestamp) { + return startTimeOffsetUs + + Util.scaleLargeTimestamp( + (rtpTimestamp - firstReceivedRtpTimestamp), + /* multiplier= */ C.MICROS_PER_SECOND, + /* divisor= */ MEDIA_CLOCK_FREQUENCY); + } + @C.BufferFlags private static int getBufferFlagsFromVopType(int vopType) { return vopType == I_VOP ? C.BUFFER_FLAG_KEY_FRAME : 0; } - - @Override - public void seek(long nextRtpTimestamp, long timeUs) { - firstReceivedTimestamp = nextRtpTimestamp; - startTimeOffsetUs = timeUs; - sampleLength = 0; - } }