mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Some minor cleanup in RTPMpeg4Reader
This commit is contained in:
parent
743437e34f
commit
dfef2d1387
@ -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);
|
||||||
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user