Some minor cleanup in RTPMpeg4Reader

This commit is contained in:
Manisha Jajoo 2022-02-08 17:02:59 +05:30
parent 743437e34f
commit dfef2d1387
2 changed files with 21 additions and 24 deletions

View File

@ -45,7 +45,7 @@ import com.google.common.collect.ImmutableMap;
// Format specific parameter names. // Format specific parameter names.
private static final String PARAMETER_PROFILE_LEVEL_ID = "profile-level-id"; 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_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. */ /** Prefix for the RFC6381 codecs string for AAC formats. */
private static final String AAC_CODECS_PREFIX = "mp4a.40."; private static final String AAC_CODECS_PREFIX = "mp4a.40.";
@ -171,7 +171,7 @@ import com.google.common.collect.ImmutableMap;
private static void processMPEG4FmtpAttribute( private static void processMPEG4FmtpAttribute(
Format.Builder formatBuilder, ImmutableMap<String, String> fmtpAttributes) { Format.Builder formatBuilder, ImmutableMap<String, String> fmtpAttributes) {
@Nullable String configInput = fmtpAttributes.get(PARAMETER_CONFIG); @Nullable String configInput = fmtpAttributes.get(PARAMETER_MP4V_CONFIG);
if (configInput != null) { if (configInput != null) {
byte[] csd = Util.getBytesFromHexString(configInput); byte[] csd = Util.getBytesFromHexString(configInput);
ImmutableList<byte[]> initializationData = ImmutableList.of(csd); ImmutableList<byte[]> initializationData = ImmutableList.of(csd);

View File

@ -30,7 +30,7 @@ import com.google.common.primitives.Bytes;
import org.checkerframework.checker.nullness.qual.MonotonicNonNull; 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. * RFC6416 for more details.
*/ */
/* package */ final class RtpMPEG4Reader implements RtpPayloadReader { /* package */ final class RtpMPEG4Reader implements RtpPayloadReader {
@ -44,16 +44,11 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private static final int I_VOP = 0; private static final int I_VOP = 0;
private final RtpPayloadFormat payloadFormat; private final RtpPayloadFormat payloadFormat;
private @MonotonicNonNull TrackOutput trackOutput; private @MonotonicNonNull TrackOutput trackOutput;
@C.BufferFlags private int bufferFlags; @C.BufferFlags private int bufferFlags;
private long firstReceivedTimestamp; private long firstReceivedTimestamp;
private int previousSequenceNumber; private int previousSequenceNumber;
private long startTimeOffsetUs; private long startTimeOffsetUs;
private int sampleLength; private int sampleLength;
/** Creates an instance. */ /** Creates an instance. */
@ -64,15 +59,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
sampleLength = 0; 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 @Override
public void createTracks(ExtractorOutput extractorOutput, int trackId) { public void createTracks(ExtractorOutput extractorOutput, int trackId) {
trackOutput = extractorOutput.track(trackId, C.TRACK_TYPE_VIDEO); trackOutput = extractorOutput.track(trackId, C.TRACK_TYPE_VIDEO);
@ -113,6 +99,15 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
previousSequenceNumber = sequenceNumber; previousSequenceNumber = sequenceNumber;
} }
@Override
public void seek(long nextRtpTimestamp, long timeUs) {
firstReceivedTimestamp = nextRtpTimestamp;
startTimeOffsetUs = timeUs;
sampleLength = 0;
}
// Internal methods.
/** /**
* Parses VOP Coding type * Parses VOP Coding type
* *
@ -130,15 +125,17 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
} }
} }
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 @C.BufferFlags
private static int getBufferFlagsFromVopType(int vopType) { private static int getBufferFlagsFromVopType(int vopType) {
return vopType == I_VOP ? C.BUFFER_FLAG_KEY_FRAME : 0; return vopType == I_VOP ? C.BUFFER_FLAG_KEY_FRAME : 0;
} }
@Override
public void seek(long nextRtpTimestamp, long timeUs) {
firstReceivedTimestamp = nextRtpTimestamp;
startTimeOffsetUs = timeUs;
sampleLength = 0;
}
} }