Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
a1be6d6e
authored
Aug 04, 2022
by
claincly
Committed by
Marc Baechinger
Oct 19, 2022
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Factor out RTP timestamp to sample time method
PiperOrigin-RevId: 465337074
parent
fe2b8465
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
86 additions
and
120 deletions
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpAacReader.java
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpAc3Reader.java
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpAmrReader.java
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpH263Reader.java
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpH264Reader.java
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpH265Reader.java
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpMpeg4Reader.java
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpOpusReader.java
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpPcmReader.java
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpReaderUtils.java
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpVp8Reader.java
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpVp9Reader.java
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpAacReader.java
View file @
a1be6d6e
...
...
@@ -15,6 +15,7 @@
*/
package
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
;
import
static
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
.
RtpReaderUtils
.
toSampleTimeUs
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkNotNull
;
import
com.google.android.exoplayer2.C
;
...
...
@@ -153,14 +154,4 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
trackOutput
.
sampleMetadata
(
sampleTimeUs
,
C
.
BUFFER_FLAG_KEY_FRAME
,
size
,
/* offset= */
0
,
/* cryptoData= */
null
);
}
/** Returns the correct sample time from RTP timestamp, accounting for the AAC sampling rate. */
private
static
long
toSampleTimeUs
(
long
startTimeOffsetUs
,
long
rtpTimestamp
,
long
firstReceivedRtpTimestamp
,
int
sampleRate
)
{
return
startTimeOffsetUs
+
Util
.
scaleLargeTimestamp
(
rtpTimestamp
-
firstReceivedRtpTimestamp
,
/* multiplier= */
C
.
MICROS_PER_SECOND
,
/* divisor= */
sampleRate
);
}
}
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpAc3Reader.java
View file @
a1be6d6e
...
...
@@ -15,6 +15,7 @@
*/
package
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
;
import
static
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
.
RtpReaderUtils
.
toSampleTimeUs
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkNotNull
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkState
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Util
.
castNonNull
;
...
...
@@ -26,7 +27,6 @@ import com.google.android.exoplayer2.extractor.TrackOutput;
import
com.google.android.exoplayer2.source.rtsp.RtpPayloadFormat
;
import
com.google.android.exoplayer2.util.ParsableBitArray
;
import
com.google.android.exoplayer2.util.ParsableByteArray
;
import
com.google.android.exoplayer2.util.Util
;
import
org.checkerframework.checker.nullness.qual.MonotonicNonNull
;
/** Parses an AC3 byte stream carried on RTP packets, and extracts AC3 frames. */
...
...
@@ -206,14 +206,4 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/* cryptoData= */
null
);
numBytesPendingMetadataOutput
=
0
;
}
/** Returns the correct sample time from RTP timestamp, accounting for the AC3 sampling rate. */
private
static
long
toSampleTimeUs
(
long
startTimeOffsetUs
,
long
rtpTimestamp
,
long
firstReceivedRtpTimestamp
,
int
sampleRate
)
{
return
startTimeOffsetUs
+
Util
.
scaleLargeTimestamp
(
rtpTimestamp
-
firstReceivedRtpTimestamp
,
/* multiplier= */
C
.
MICROS_PER_SECOND
,
/* divisor= */
sampleRate
);
}
}
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpAmrReader.java
View file @
a1be6d6e
...
...
@@ -15,6 +15,7 @@
*/
package
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
;
import
static
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
.
RtpReaderUtils
.
toSampleTimeUs
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkArgument
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkNotNull
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkStateNotNull
;
...
...
@@ -183,14 +184,4 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
?
AMR_WB_FRAME_TYPE_INDEX_TO_FRAME_SIZE
[
frameType
]
:
AMR_NB_FRAME_TYPE_INDEX_TO_FRAME_SIZE
[
frameType
];
}
/** Returns the correct sample time from RTP timestamp, accounting for the AMR sampling rate. */
private
static
long
toSampleTimeUs
(
long
startTimeOffsetUs
,
long
rtpTimestamp
,
long
firstReceivedRtpTimestamp
,
int
sampleRate
)
{
return
startTimeOffsetUs
+
Util
.
scaleLargeTimestamp
(
rtpTimestamp
-
firstReceivedRtpTimestamp
,
/* multiplier= */
C
.
MICROS_PER_SECOND
,
/* divisor= */
sampleRate
);
}
}
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpH263Reader.java
View file @
a1be6d6e
...
...
@@ -15,6 +15,7 @@
*/
package
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
;
import
static
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
.
RtpReaderUtils
.
toSampleTimeUs
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkNotNull
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkState
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkStateNotNull
;
...
...
@@ -35,7 +36,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/* package */
final
class
RtpH263Reader
implements
RtpPayloadReader
{
private
static
final
String
TAG
=
"RtpH263Reader"
;
private
static
final
long
MEDIA_CLOCK_FREQUENCY
=
90_000
;
private
static
final
int
MEDIA_CLOCK_FREQUENCY
=
90_000
;
/** I-frame VOP unit type. */
private
static
final
int
I_VOP
=
0
;
...
...
@@ -164,7 +165,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
// Write the video sample.
trackOutput
.
sampleData
(
data
,
fragmentSize
);
fragmentedSampleSizeBytes
+=
fragmentSize
;
fragmentedSampleTimeUs
=
toSampleUs
(
startTimeOffsetUs
,
timestamp
,
firstReceivedTimestamp
);
fragmentedSampleTimeUs
=
toSampleTimeUs
(
startTimeOffsetUs
,
timestamp
,
firstReceivedTimestamp
,
MEDIA_CLOCK_FREQUENCY
);
if
(
rtpMarker
)
{
outputSampleMetadataForFragmentedPackets
();
...
...
@@ -242,13 +244,4 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
isKeyFrame
=
false
;
gotFirstPacketOfH263Frame
=
false
;
}
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
);
}
}
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpH264Reader.java
View file @
a1be6d6e
...
...
@@ -15,6 +15,7 @@
*/
package
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
;
import
static
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
.
RtpReaderUtils
.
toSampleTimeUs
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkNotNull
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkStateNotNull
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Util
.
castNonNull
;
...
...
@@ -36,7 +37,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
/* package */
final
class
RtpH264Reader
implements
RtpPayloadReader
{
private
static
final
String
TAG
=
"RtpH264Reader"
;
private
static
final
long
MEDIA_CLOCK_FREQUENCY
=
90_000
;
private
static
final
int
MEDIA_CLOCK_FREQUENCY
=
90_000
;
/** Offset of payload data within a FU type A payload. */
private
static
final
int
FU_PAYLOAD_OFFSET
=
2
;
...
...
@@ -115,7 +116,9 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
firstReceivedTimestamp
=
timestamp
;
}
long
timeUs
=
toSampleUs
(
startTimeOffsetUs
,
timestamp
,
firstReceivedTimestamp
);
long
timeUs
=
toSampleTimeUs
(
startTimeOffsetUs
,
timestamp
,
firstReceivedTimestamp
,
MEDIA_CLOCK_FREQUENCY
);
trackOutput
.
sampleMetadata
(
timeUs
,
bufferFlags
,
fragmentedSampleSizeBytes
,
/* offset= */
0
,
/* cryptoData= */
null
);
fragmentedSampleSizeBytes
=
0
;
...
...
@@ -287,15 +290,6 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
return
bytesWritten
;
}
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
);
}
private
static
@C
.
BufferFlags
int
getBufferFlagsFromNalType
(
int
nalType
)
{
return
nalType
==
NAL_UNIT_TYPE_IDR
?
C
.
BUFFER_FLAG_KEY_FRAME
:
0
;
}
...
...
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpH265Reader.java
View file @
a1be6d6e
...
...
@@ -15,6 +15,7 @@
*/
package
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
;
import
static
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
.
RtpReaderUtils
.
toSampleTimeUs
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkNotNull
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkStateNotNull
;
...
...
@@ -38,7 +39,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
/* package */
final
class
RtpH265Reader
implements
RtpPayloadReader
{
private
static
final
String
TAG
=
"RtpH265Reader"
;
private
static
final
long
MEDIA_CLOCK_FREQUENCY
=
90_000
;
private
static
final
int
MEDIA_CLOCK_FREQUENCY
=
90_000
;
/** Offset of payload data within a FU payload. */
private
static
final
int
FU_PAYLOAD_OFFSET
=
3
;
/** Aggregation Packet. RFC7798 Section 4.4.2. */
...
...
@@ -111,7 +112,9 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
firstReceivedTimestamp
=
timestamp
;
}
long
timeUs
=
toSampleUs
(
startTimeOffsetUs
,
timestamp
,
firstReceivedTimestamp
);
long
timeUs
=
toSampleTimeUs
(
startTimeOffsetUs
,
timestamp
,
firstReceivedTimestamp
,
MEDIA_CLOCK_FREQUENCY
);
trackOutput
.
sampleMetadata
(
timeUs
,
bufferFlags
,
fragmentedSampleSizeBytes
,
/* offset= */
0
,
/* cryptoData= */
null
);
fragmentedSampleSizeBytes
=
0
;
...
...
@@ -254,15 +257,6 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
return
bytesWritten
;
}
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
);
}
private
static
@C
.
BufferFlags
int
getBufferFlagsFromNalType
(
int
nalType
)
{
return
(
nalType
==
NAL_IDR_W_RADL
||
nalType
==
NAL_IDR_N_LP
)
?
C
.
BUFFER_FLAG_KEY_FRAME
:
0
;
}
...
...
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpMpeg4Reader.java
View file @
a1be6d6e
...
...
@@ -15,6 +15,7 @@
*/
package
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
;
import
static
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
.
RtpReaderUtils
.
toSampleTimeUs
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkStateNotNull
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Util
.
castNonNull
;
...
...
@@ -36,7 +37,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/* package */
final
class
RtpMpeg4Reader
implements
RtpPayloadReader
{
private
static
final
String
TAG
=
"RtpMpeg4Reader"
;
private
static
final
long
MEDIA_CLOCK_FREQUENCY
=
90_000
;
private
static
final
int
MEDIA_CLOCK_FREQUENCY
=
90_000
;
/** VOP (Video Object Plane) unit type. */
private
static
final
int
I_VOP
=
0
;
...
...
@@ -102,7 +103,9 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
firstReceivedTimestamp
=
timestamp
;
}
long
timeUs
=
toSampleUs
(
startTimeOffsetUs
,
timestamp
,
firstReceivedTimestamp
);
long
timeUs
=
toSampleTimeUs
(
startTimeOffsetUs
,
timestamp
,
firstReceivedTimestamp
,
MEDIA_CLOCK_FREQUENCY
);
trackOutput
.
sampleMetadata
(
timeUs
,
bufferFlags
,
sampleLength
,
0
,
null
);
sampleLength
=
0
;
}
...
...
@@ -135,13 +138,4 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
}
return
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
);
}
}
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpOpusReader.java
View file @
a1be6d6e
...
...
@@ -15,6 +15,7 @@
*/
package
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
;
import
static
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
.
RtpReaderUtils
.
toSampleTimeUs
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkArgument
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkStateNotNull
;
...
...
@@ -38,7 +39,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/* package */
final
class
RtpOpusReader
implements
RtpPayloadReader
{
private
static
final
String
TAG
=
"RtpOpusReader"
;
/* Opus uses a fixed 48KHz media clock RFC7845 Section 4. */
private
static
final
long
MEDIA_CLOCK_FREQUENCY
=
48_000
;
private
static
final
int
MEDIA_CLOCK_FREQUENCY
=
48_000
;
private
final
RtpPayloadFormat
payloadFormat
;
...
...
@@ -113,7 +114,9 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
// sending opus data.
int
size
=
data
.
bytesLeft
();
trackOutput
.
sampleData
(
data
,
size
);
long
timeUs
=
toSampleTimeUs
(
startTimeOffsetUs
,
timestamp
,
firstReceivedTimestamp
);
long
timeUs
=
toSampleTimeUs
(
startTimeOffsetUs
,
timestamp
,
firstReceivedTimestamp
,
MEDIA_CLOCK_FREQUENCY
);
trackOutput
.
sampleMetadata
(
timeUs
,
C
.
BUFFER_FLAG_KEY_FRAME
,
size
,
/* offset*/
0
,
/* cryptoData*/
null
);
}
...
...
@@ -144,14 +147,4 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
checkArgument
(
data
.
readUnsignedByte
()
==
1
,
"version number must always be 1"
);
data
.
setPosition
(
currPosition
);
}
/** Returns the correct sample time from RTP timestamp, accounting for the OPUS sampling rate. */
private
static
long
toSampleTimeUs
(
long
startTimeOffsetUs
,
long
rtpTimestamp
,
long
firstReceivedRtpTimestamp
)
{
return
startTimeOffsetUs
+
Util
.
scaleLargeTimestamp
(
rtpTimestamp
-
firstReceivedRtpTimestamp
,
/* multiplier= */
C
.
MICROS_PER_SECOND
,
/* divisor= */
MEDIA_CLOCK_FREQUENCY
);
}
}
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpPcmReader.java
View file @
a1be6d6e
...
...
@@ -15,6 +15,7 @@
*/
package
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
;
import
static
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
.
RtpReaderUtils
.
toSampleTimeUs
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkNotNull
;
import
android.util.Log
;
...
...
@@ -76,7 +77,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
}
long
sampleTimeUs
=
toSampleUs
(
startTimeOffsetUs
,
timestamp
,
firstReceivedTimestamp
,
payloadFormat
.
clockRate
);
toSampleTimeUs
(
startTimeOffsetUs
,
timestamp
,
firstReceivedTimestamp
,
payloadFormat
.
clockRate
);
int
size
=
data
.
bytesLeft
();
trackOutput
.
sampleData
(
data
,
size
);
trackOutput
.
sampleMetadata
(
...
...
@@ -91,14 +93,4 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
firstReceivedTimestamp
=
nextRtpTimestamp
;
startTimeOffsetUs
=
timeUs
;
}
/** Returns the correct sample time from RTP timestamp, accounting for the given clock rate. */
private
static
long
toSampleUs
(
long
startTimeOffsetUs
,
long
rtpTimestamp
,
long
firstReceivedRtpTimestamp
,
int
clockRate
)
{
return
startTimeOffsetUs
+
Util
.
scaleLargeTimestamp
(
rtpTimestamp
-
firstReceivedRtpTimestamp
,
/* multiplier= */
C
.
MICROS_PER_SECOND
,
/* divisor= */
clockRate
);
}
}
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpReaderUtils.java
0 → 100644
View file @
a1be6d6e
/*
* Copyright 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.util.Util
;
/** Utility methods for {@link RtpPayloadReader}s. */
/* package */
class
RtpReaderUtils
{
/**
* Converts RTP timestamp and media frequency to sample presentation time, in microseconds
*
* @param startTimeOffsetUs The offset of the RTP timebase, in microseconds.
* @param rtpTimestamp The RTP timestamp to convert.
* @param firstReceivedRtpTimestamp The first received RTP timestamp.
* @param mediaFrequency The media frequency.
* @return The calculated sample presentation time, in microseconds.
*/
public
static
long
toSampleTimeUs
(
long
startTimeOffsetUs
,
long
rtpTimestamp
,
long
firstReceivedRtpTimestamp
,
int
mediaFrequency
)
{
return
startTimeOffsetUs
+
Util
.
scaleLargeTimestamp
(
rtpTimestamp
-
firstReceivedRtpTimestamp
,
/* multiplier= */
C
.
MICROS_PER_SECOND
,
/* divisor= */
mediaFrequency
);
}
private
RtpReaderUtils
()
{}
}
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpVp8Reader.java
View file @
a1be6d6e
...
...
@@ -15,6 +15,7 @@
*/
package
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
;
import
static
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
.
RtpReaderUtils
.
toSampleTimeUs
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkNotNull
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkState
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkStateNotNull
;
...
...
@@ -37,7 +38,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private
static
final
String
TAG
=
"RtpVP8Reader"
;
/** VP8 uses a 90 KHz media clock (RFC7741 Section 4.1). */
private
static
final
long
MEDIA_CLOCK_FREQUENCY
=
90_000
;
private
static
final
int
MEDIA_CLOCK_FREQUENCY
=
90_000
;
private
final
RtpPayloadFormat
payloadFormat
;
...
...
@@ -124,7 +125,9 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
fragmentedSampleSizeBytes
+=
fragmentSize
;
}
fragmentedSampleTimeUs
=
toSampleUs
(
startTimeOffsetUs
,
timestamp
,
firstReceivedTimestamp
);
fragmentedSampleTimeUs
=
toSampleTimeUs
(
startTimeOffsetUs
,
timestamp
,
firstReceivedTimestamp
,
MEDIA_CLOCK_FREQUENCY
);
if
(
rtpMarker
)
{
outputSampleMetadataForFragmentedPackets
();
...
...
@@ -215,13 +218,4 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
fragmentedSampleTimeUs
=
C
.
TIME_UNSET
;
gotFirstPacketOfVp8Frame
=
false
;
}
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
);
}
}
library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/reader/RtpVp9Reader.java
View file @
a1be6d6e
...
...
@@ -15,6 +15,7 @@
*/
package
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
;
import
static
com
.
google
.
android
.
exoplayer2
.
source
.
rtsp
.
reader
.
RtpReaderUtils
.
toSampleTimeUs
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkArgument
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkNotNull
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkState
;
...
...
@@ -39,7 +40,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private
static
final
String
TAG
=
"RtpVp9Reader"
;
private
static
final
long
MEDIA_CLOCK_FREQUENCY
=
90_000
;
private
static
final
int
MEDIA_CLOCK_FREQUENCY
=
90_000
;
private
static
final
int
SCALABILITY_STRUCTURE_SIZE
=
4
;
private
final
RtpPayloadFormat
payloadFormat
;
...
...
@@ -123,7 +124,9 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
}
else
{
fragmentedSampleSizeBytes
+=
currentFragmentSizeBytes
;
}
fragmentedSampleTimeUs
=
toSampleUs
(
startTimeOffsetUs
,
timestamp
,
firstReceivedTimestamp
);
fragmentedSampleTimeUs
=
toSampleTimeUs
(
startTimeOffsetUs
,
timestamp
,
firstReceivedTimestamp
,
MEDIA_CLOCK_FREQUENCY
);
if
(
rtpMarker
)
{
outputSampleMetadataForFragmentedPackets
();
...
...
@@ -271,13 +274,4 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
fragmentedSampleTimeUs
=
C
.
TIME_UNSET
;
gotFirstPacketOfVp9Frame
=
false
;
}
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
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment